33 std::shared_ptr<storm::dft::storage::DFT<ValueType>> dft;
34 if (dftIOSettings.isDftFileSet()) {
35 STORM_LOG_DEBUG(
"Loading DFT from Galileo file " << dftIOSettings.getDftFilename());
37 }
else if (dftIOSettings.isDftJsonFileSet()) {
38 STORM_LOG_DEBUG(
"Loading DFT from Json file " << dftIOSettings.getDftJsonFilename());
41 STORM_LOG_THROW(
false, storm::exceptions::InvalidSettingsException,
"No input model given.");
45 if (dftIOSettings.isShowDftStatisticsSet()) {
46 dft->writeStatsToStream(std::cout);
51 if (dftIOSettings.isExportToJson()) {
57 STORM_LOG_THROW(wellFormedResult.first, storm::exceptions::UnmetRequirementException,
"DFT is not well-formed: " << wellFormedResult.second <<
".");
63 if (dftGspnSettings.isTransformToGspn()) {
65 std::shared_ptr<storm::gspn::GSPN> gspn = pair.first;
66 uint64_t toplevelFailedPlace = pair.second;
78 if (dftIOSettings.isExportToSmt()) {
84 uint64_t solverTimeout = 10;
86 if (faultTreeSettings.solveWithSMT()) {
101 STORM_LOG_DEBUG(
"BE failure bounds: lower bound: " << bounds.first <<
", upper bound: " << bounds.second <<
".");
113 if (dftIOSettings.isExportToBddDot() || dftIOSettings.isAnalyzeWithBdds() || dftIOSettings.isMinimalCutSets() || dftIOSettings.isImportanceMeasureSet()) {
114 bool const isImportanceMeasureSet{dftIOSettings.isImportanceMeasureSet()};
115 bool const isMinimalCutSets{dftIOSettings.isMinimalCutSets()};
116 bool const isMTTF{dftIOSettings.usePropExpectedTime()};
117 double const mttfPrecision{faultTreeSettings.getMttfPrecision()};
118 double const mttfStepsize{faultTreeSettings.getMttfStepsize()};
119 std::string
const mttfAlgorithm{faultTreeSettings.getMttfAlgorithm()};
120 bool const isExportToBddDot{dftIOSettings.isExportToBddDot()};
121 bool const isTimebound{dftIOSettings.usePropTimebound()};
122 bool const isTimepoints{dftIOSettings.usePropTimepoints()};
124 bool const probabilityAnalysis{ioSettings.isPropertySet() || !isImportanceMeasureSet};
125 size_t const chunksize{faultTreeSettings.getChunksize()};
126 bool const isModularisation{faultTreeSettings.useModularisation()};
128 std::vector<double> timepoints{};
130 timepoints = dftIOSettings.getPropTimepoints();
133 timepoints.push_back(dftIOSettings.getPropTimebound());
136 std::string filename{
""};
137 if (isExportToBddDot) {
138 filename = dftIOSettings.getExportBddDotFilename();
142 std::vector<std::shared_ptr<storm::logic::Formula const>> manuallyInputtedProperties;
143 if (ioSettings.isPropertySet()) {
147 std::string importanceMeasureName{
""};
148 if (isImportanceMeasureSet) {
149 importanceMeasureName = dftIOSettings.getImportanceMeasure();
153 if (dftIOSettings.isVariableOrderingFileSet()) {
155 dft->setBEOrder(beOrder);
158 auto const additionalRelevantEventNames{faultTreeSettings.getRelevantEvents()};
160 probabilityAnalysis, isModularisation, importanceMeasureName, timepoints, manuallyInputtedProperties,
161 additionalRelevantEventNames, chunksize);
164 if (dftIOSettings.isAnalyzeWithBdds()) {
172 std::string optimizationDirection =
"min";
173 if (dftIOSettings.isComputeMaximalValue()) {
174 optimizationDirection =
"max";
179 std::vector<std::string> properties;
180 if (ioSettings.isPropertySet()) {
181 properties.push_back(ioSettings.getProperty());
183 if (dftIOSettings.usePropExpectedTime()) {
184 properties.push_back(
"T" + optimizationDirection +
"=? [F \"failed\"]");
186 if (dftIOSettings.usePropProbability()) {
187 properties.push_back(
"P" + optimizationDirection +
"=? [F \"failed\"]");
189 if (dftIOSettings.usePropTimebound()) {
190 std::stringstream stream;
191 stream <<
"P" << optimizationDirection <<
"=? [F<=" << dftIOSettings.getPropTimebound() <<
" \"failed\"]";
192 properties.push_back(stream.str());
194 if (dftIOSettings.usePropTimepoints()) {
195 for (
double timepoint : dftIOSettings.getPropTimepoints()) {
196 std::stringstream stream;
197 stream <<
"P" << optimizationDirection <<
"=? [F<=" << timepoint <<
" \"failed\"]";
198 properties.push_back(stream.str());
203 std::vector<std::shared_ptr<storm::logic::Formula const>> props;
204 if (!properties.empty()) {
205 std::string propString;
206 for (
size_t i = 0; i < properties.size(); ++i) {
207 propString += properties[i];
208 if (i + 1 < properties.size()) {
216 std::vector<std::string> additionalRelevantEventNames;
217 if (faultTreeSettings.areRelevantEventsSet()) {
219 additionalRelevantEventNames = faultTreeSettings.getRelevantEvents();
220 }
else if (faultTreeSettings.isDisableDC()) {
222 additionalRelevantEventNames = {
"all"};
228 STORM_LOG_DEBUG(
"DFT after preparation for Markov analysis:\n" << dft->getElementsString());
240 STORM_LOG_WARN(
"No property given. No analysis will be performed.");
242 double approximationError = 0.0;
243 if (faultTreeSettings.isApproximationErrorSet()) {
244 approximationError = faultTreeSettings.getApproximationError();
247 faultTreeSettings.isAllowDCForRelevantEvents(), approximationError,
248 faultTreeSettings.getApproximationHeuristic(), transformationSettings.isChainEliminationSet(),
249 transformationSettings.getLabelBehavior(),
true);