90 std::shared_ptr<storm::dft::storage::DFT<ValueType>> dft;
91 if (dftIOSettings.isDftFileSet()) {
92 STORM_LOG_DEBUG(
"Loading DFT from Galileo file " << dftIOSettings.getDftFilename());
94 }
else if (dftIOSettings.isDftJsonFileSet()) {
95 STORM_LOG_DEBUG(
"Loading DFT from Json file " << dftIOSettings.getDftJsonFilename());
98 STORM_LOG_THROW(
false, storm::exceptions::InvalidSettingsException,
"No input model given.");
102 if (dftIOSettings.isShowDftStatisticsSet()) {
103 dft->writeStatsToStream(std::cout);
108 if (dftIOSettings.isExportToJson()) {
114 STORM_LOG_THROW(wellFormedResult.first, storm::exceptions::UnmetRequirementException,
"DFT is not well-formed: " << wellFormedResult.second <<
".");
120 if (dftGspnSettings.isTransformToGspn()) {
122 std::pair<std::shared_ptr<storm::gspn::GSPN>, uint64_t> pair =
124 !dftGspnSettings.isDisableSmartTransformation(), dftGspnSettings.isMergeDCFailed());
125 std::shared_ptr<storm::gspn::GSPN> gspn = pair.first;
126 uint64_t toplevelFailedPlace = pair.second;
129 if (gspnExportSettings.isWriteToDotSet()) {
132 if (gspnExportSettings.isWriteToPnproSet()) {
135 if (gspnExportSettings.isWriteToPnmlSet()) {
138 if (gspnExportSettings.isWriteToJsonSet()) {
141 if (gspnExportSettings.isDisplayStatsSet()) {
142 std::cout <<
"============GSPN Statistics==============\n";
144 std::cout <<
"=========================================\n";
146 if (gspnExportSettings.isWriteStatsToFileSet()) {
153 if (gspnExportSettings.isWriteToJaniSet()) {
161 if (dftIOSettings.isExportToSmt()) {
167 uint64_t solverTimeout = 10;
184 STORM_LOG_DEBUG(
"BE failure bounds: lower bound: " << bounds.first <<
", upper bound: " << bounds.second <<
".");
196 if (dftIOSettings.isExportToBddDot() || dftIOSettings.isAnalyzeWithBdds() || dftIOSettings.isMinimalCutSets() || dftIOSettings.isImportanceMeasureSet()) {
197 bool const isImportanceMeasureSet{dftIOSettings.isImportanceMeasureSet()};
198 bool const isMinimalCutSets{dftIOSettings.isMinimalCutSets()};
199 bool const isMTTF{dftIOSettings.usePropExpectedTime()};
203 bool const isExportToBddDot{dftIOSettings.isExportToBddDot()};
204 bool const isTimebound{dftIOSettings.usePropTimebound()};
205 bool const isTimepoints{dftIOSettings.usePropTimepoints()};
207 bool const probabilityAnalysis{ioSettings.isPropertySet() || !isImportanceMeasureSet};
211 std::vector<double> timepoints{};
213 timepoints = dftIOSettings.getPropTimepoints();
216 timepoints.push_back(dftIOSettings.getPropTimebound());
219 std::string filename{
""};
220 if (isExportToBddDot) {
221 filename = dftIOSettings.getExportBddDotFilename();
225 std::vector<std::shared_ptr<storm::logic::Formula const>> manuallyInputtedProperties;
226 if (ioSettings.isPropertySet()) {
230 std::string importanceMeasureName{
""};
231 if (isImportanceMeasureSet) {
232 importanceMeasureName = dftIOSettings.getImportanceMeasure();
236 if (dftIOSettings.isVariableOrderingFileSet()) {
238 dft->setBEOrder(beOrder);
241 auto const additionalRelevantEventNames{faultTreeSettings.getRelevantEvents()};
243 probabilityAnalysis, isModularisation, importanceMeasureName, timepoints, manuallyInputtedProperties,
244 additionalRelevantEventNames, chunksize);
247 if (dftIOSettings.isAnalyzeWithBdds()) {
255 std::string optimizationDirection =
"min";
256 if (dftIOSettings.isComputeMaximalValue()) {
257 optimizationDirection =
"max";
262 std::vector<std::string> properties;
263 if (ioSettings.isPropertySet()) {
264 properties.push_back(ioSettings.getProperty());
266 if (dftIOSettings.usePropExpectedTime()) {
267 properties.push_back(
"T" + optimizationDirection +
"=? [F \"failed\"]");
269 if (dftIOSettings.usePropProbability()) {
270 properties.push_back(
"P" + optimizationDirection +
"=? [F \"failed\"]");
272 if (dftIOSettings.usePropTimebound()) {
273 std::stringstream stream;
274 stream <<
"P" << optimizationDirection <<
"=? [F<=" << dftIOSettings.getPropTimebound() <<
" \"failed\"]";
275 properties.push_back(stream.str());
277 if (dftIOSettings.usePropTimepoints()) {
278 for (
double timepoint : dftIOSettings.getPropTimepoints()) {
279 std::stringstream stream;
280 stream <<
"P" << optimizationDirection <<
"=? [F<=" << timepoint <<
" \"failed\"]";
281 properties.push_back(stream.str());
286 std::vector<std::shared_ptr<storm::logic::Formula const>> props;
287 if (!properties.empty()) {
288 std::string propString;
289 for (
size_t i = 0; i < properties.size(); ++i) {
290 propString += properties[i];
291 if (i + 1 < properties.size()) {
299 std::vector<std::string> additionalRelevantEventNames;
300 if (faultTreeSettings.areRelevantEventsSet()) {
302 additionalRelevantEventNames = faultTreeSettings.getRelevantEvents();
303 }
else if (faultTreeSettings.isDisableDC()) {
305 additionalRelevantEventNames = {
"all"};
312 STORM_LOG_DEBUG(
"DFT after preparation for Markov analysis:\n" << dft->getElementsString());
324 STORM_LOG_WARN(
"No property given. No analysis will be performed.");
326 auto exportCallback = [&ioSettings](std::shared_ptr<storm::models::sparse::Model<ValueType>>
const& model,
bool isFinalModel) {
327 if (ioSettings.isExportExplicitSet()) {
328 std::vector<std::string> parameterNames;
330 !ioSettings.isExplicitExportPlaceholdersDisabled());
332 if (isFinalModel && ioSettings.isExportDotSet()) {