46 double const mttfPrecision,
double const mttfStepsize, std::string
const mttfAlgorithmName,
bool const calculateMCS,
47 bool const calculateProbability,
bool const useModularisation, std::string
const importanceMeasureName,
48 std::vector<double>
const& timepoints, std::vector<std::shared_ptr<storm::logic::Formula const>>
const& properties,
49 std::vector<std::string>
const& additionalRelevantEventNames,
size_t const chunksize) {
50#ifdef STORM_HAVE_SYLVAN
52 if (mttfAlgorithmName ==
"proceeding") {
54 }
else if (mttfAlgorithmName ==
"variableChange") {
59 if (useModularisation && calculateProbability) {
62 for (
auto const& timebound : timepoints) {
64 std::cout <<
"System failure probability at timebound " << timebound <<
" is " << probability <<
'\n';
68 for (
size_t i{0}; i < timepoints.size(); ++i) {
69 auto const timebound{timepoints[i]};
70 auto const probability{probabilities[i]};
71 std::cout <<
"System failure probability at timebound " << timebound <<
" is " << probability <<
'\n';
74 if (!properties.empty()) {
75 auto const probabilities{checker.
check(properties, chunksize)};
76 for (
size_t i{0}; i < probabilities.size(); ++i) {
77 std::cout <<
"Property \"" << properties.at(i)->toString() <<
"\" has result " << probabilities.at(i) <<
'\n';
82 STORM_LOG_THROW(
dft->nrDynamicElements() == 0, storm::exceptions::NotSupportedException,
84 "Bdds can only be used on static fault trees. "
85 "Try modularisation.");
89 sylvanBddManager->execute([&]() {
95 checker->exportBddToDot(filename);
99 auto const minimalCutSets{checker->getMinimalCutSetsAsIndices()};
100 auto const sylvanBddManager{checker->getSylvanBddManager()};
103 for (
auto const& minimalCutSet : minimalCutSets) {
105 for (
auto const& be : minimalCutSet) {
106 std::cout << sylvanBddManager->getName(be) <<
' ';
113 if (calculateProbability) {
114 if (chunksize == 1) {
115 for (
auto const& timebound : timepoints) {
116 auto const probability{checker->getProbabilityAtTimebound(timebound)};
117 std::cout <<
"System failure probability at timebound " << timebound <<
" is " << probability <<
'\n';
120 auto const probabilities{checker->getProbabilitiesAtTimepoints(timepoints, chunksize)};
121 for (
size_t i{0}; i < timepoints.size(); ++i) {
122 auto const timebound{timepoints[i]};
123 auto const probability{probabilities[i]};
124 std::cout <<
"System failure probability at timebound " << timebound <<
" is " << probability <<
'\n';
128 if (!properties.empty()) {
129 auto const probabilities{adapter.
check(chunksize)};
130 for (
size_t i{0}; i < probabilities.size(); ++i) {
131 std::cout <<
"Property \"" << properties.at(i)->toString() <<
"\" has result " << probabilities.at(i) <<
'\n';
136 if (importanceMeasureName !=
"" && timepoints.size() == 1) {
137 auto const bes{
dft->getBasicElements()};
138 std::vector<double> values{};
139 if (importanceMeasureName ==
"MIF") {
140 values = checker->getAllBirnbaumFactorsAtTimebound(timepoints[0]);
142 if (importanceMeasureName ==
"CIF") {
143 values = checker->getAllCIFsAtTimebound(timepoints[0]);
145 if (importanceMeasureName ==
"DIF") {
146 values = checker->getAllDIFsAtTimebound(timepoints[0]);
148 if (importanceMeasureName ==
"RAW") {
149 values = checker->getAllRAWsAtTimebound(timepoints[0]);
151 if (importanceMeasureName ==
"RRW") {
152 values = checker->getAllRRWsAtTimebound(timepoints[0]);
155 for (
size_t i{0}; i < bes.size(); ++i) {
156 std::cout << importanceMeasureName <<
" for the basic event " << bes[i]->name() <<
" at timebound " << timepoints[0] <<
" is " << values[i]
159 }
else if (importanceMeasureName !=
"") {
160 auto const bes{
dft->getBasicElements()};
161 std::vector<std::vector<double>> values{};
162 if (importanceMeasureName ==
"MIF") {
163 values = checker->getAllBirnbaumFactorsAtTimepoints(timepoints, chunksize);
165 if (importanceMeasureName ==
"CIF") {
166 values = checker->getAllCIFsAtTimepoints(timepoints, chunksize);
168 if (importanceMeasureName ==
"DIF") {
169 values = checker->getAllDIFsAtTimepoints(timepoints, chunksize);
171 if (importanceMeasureName ==
"RAW") {
172 values = checker->getAllRAWsAtTimepoints(timepoints, chunksize);
174 if (importanceMeasureName ==
"RRW") {
175 values = checker->getAllRRWsAtTimepoints(timepoints, chunksize);
177 for (
size_t i{0}; i < bes.size(); ++i) {
178 for (
size_t j{0}; j < timepoints.size(); ++j) {
179 std::cout << importanceMeasureName <<
" for the basic event " << bes[i]->name() <<
" at timebound " << timepoints[j] <<
" is "
180 << values[i][j] <<
'\n';
187 "This version of Storm was compiled without support for Sylvan. Yet, a method was called that requires this support. Please choose a "
188 "version of Storm with Sylvan support.");