24 double const mttfPrecision,
double const mttfStepsize, std::string
const mttfAlgorithmName,
bool const calculateMCS,
25 bool const calculateProbability,
bool const useModularisation, std::string
const importanceMeasureName,
26 std::vector<double>
const& timepoints, std::vector<std::shared_ptr<storm::logic::Formula const>>
const& properties,
27 std::vector<std::string>
const& additionalRelevantEventNames,
size_t const chunksize) {
29 if (mttfAlgorithmName ==
"proceeding") {
31 }
else if (mttfAlgorithmName ==
"variableChange") {
36 if (useModularisation && calculateProbability) {
39 for (
auto const& timebound : timepoints) {
41 std::cout <<
"System failure probability at timebound " << timebound <<
" is " << probability <<
'\n';
44 auto const probabilities{checker.getProbabilitiesAtTimepoints(timepoints, chunksize)};
45 for (
size_t i{0}; i < timepoints.size(); ++i) {
46 auto const timebound{timepoints[i]};
47 auto const probability{probabilities[i]};
48 std::cout <<
"System failure probability at timebound " << timebound <<
" is " << probability <<
'\n';
51 if (!properties.empty()) {
52 auto const probabilities{checker.check(properties, chunksize)};
53 for (
size_t i{0}; i < probabilities.size(); ++i) {
54 std::cout <<
"Property \"" << properties.at(i)->toString() <<
"\" has result " << probabilities.at(i) <<
'\n';
59 STORM_LOG_THROW(dft->nrDynamicElements() == 0, storm::exceptions::NotSupportedException,
61 "Bdds can only be used on static fault trees. "
62 "Try modularisation.");
65 auto sylvanBddManager{std::make_shared<storm::dft::storage::SylvanBddManager>()};
66 sylvanBddManager->execute([&]() {
72 checker->exportBddToDot(filename);
76 auto const minimalCutSets{checker->getMinimalCutSetsAsIndices()};
77 auto const sylvanBddManager{checker->getSylvanBddManager()};
80 for (
auto const& minimalCutSet : minimalCutSets) {
82 for (
auto const& be : minimalCutSet) {
83 std::cout << sylvanBddManager->getName(be) <<
' ';
90 if (calculateProbability) {
92 for (
auto const& timebound : timepoints) {
93 auto const probability{checker->getProbabilityAtTimebound(timebound)};
94 std::cout <<
"System failure probability at timebound " << timebound <<
" is " << probability <<
'\n';
97 auto const probabilities{checker->getProbabilitiesAtTimepoints(timepoints, chunksize)};
98 for (
size_t i{0}; i < timepoints.size(); ++i) {
99 auto const timebound{timepoints[i]};
100 auto const probability{probabilities[i]};
101 std::cout <<
"System failure probability at timebound " << timebound <<
" is " << probability <<
'\n';
105 if (!properties.empty()) {
106 auto const probabilities{adapter.check(chunksize)};
107 for (
size_t i{0}; i < probabilities.size(); ++i) {
108 std::cout <<
"Property \"" << properties.at(i)->toString() <<
"\" has result " << probabilities.at(i) <<
'\n';
113 if (importanceMeasureName !=
"" && timepoints.size() == 1) {
114 auto const bes{dft->getBasicElements()};
115 std::vector<double> values{};
116 if (importanceMeasureName ==
"MIF") {
117 values = checker->getAllBirnbaumFactorsAtTimebound(timepoints[0]);
119 if (importanceMeasureName ==
"CIF") {
120 values = checker->getAllCIFsAtTimebound(timepoints[0]);
122 if (importanceMeasureName ==
"DIF") {
123 values = checker->getAllDIFsAtTimebound(timepoints[0]);
125 if (importanceMeasureName ==
"RAW") {
126 values = checker->getAllRAWsAtTimebound(timepoints[0]);
128 if (importanceMeasureName ==
"RRW") {
129 values = checker->getAllRRWsAtTimebound(timepoints[0]);
132 for (
size_t i{0}; i < bes.size(); ++i) {
133 std::cout << importanceMeasureName <<
" for the basic event " << bes[i]->name() <<
" at timebound " << timepoints[0] <<
" is " << values[i]
136 }
else if (importanceMeasureName !=
"") {
137 auto const bes{dft->getBasicElements()};
138 std::vector<std::vector<double>> values{};
139 if (importanceMeasureName ==
"MIF") {
140 values = checker->getAllBirnbaumFactorsAtTimepoints(timepoints, chunksize);
142 if (importanceMeasureName ==
"CIF") {
143 values = checker->getAllCIFsAtTimepoints(timepoints, chunksize);
145 if (importanceMeasureName ==
"DIF") {
146 values = checker->getAllDIFsAtTimepoints(timepoints, chunksize);
148 if (importanceMeasureName ==
"RAW") {
149 values = checker->getAllRAWsAtTimepoints(timepoints, chunksize);
151 if (importanceMeasureName ==
"RRW") {
152 values = checker->getAllRRWsAtTimepoints(timepoints, chunksize);
154 for (
size_t i{0}; i < bes.size(); ++i) {
155 for (
size_t j{0}; j < timepoints.size(); ++j) {
156 std::cout << importanceMeasureName <<
" for the basic event " << bes[i]->name() <<
" at timebound " << timepoints[j] <<
" is "
157 << values[i][j] <<
'\n';