42 std::string
const& filename,
bool const calculateMttf,
double const mttfPrecision,
double const mttfStepsize,
43 std::string
const mttfAlgorithmName,
bool const calculateMCS,
bool const calculateProbability,
bool const useModularisation,
44 std::string
const importanceMeasureName, std::vector<double>
const& timepoints,
45 std::vector<std::shared_ptr<storm::logic::Formula const>>
const& properties, std::vector<std::string>
const& additionalRelevantEventNames,
46 size_t const chunksize) {
47#ifdef STORM_HAVE_SYLVAN
49 if (mttfAlgorithmName ==
"proceeding") {
51 }
else if (mttfAlgorithmName ==
"variableChange") {
56 if (useModularisation && calculateProbability) {
59 for (
auto const& timebound : timepoints) {
61 std::cout <<
"System failure probability at timebound " << timebound <<
" is " << probability <<
'\n';
65 for (
size_t i{0}; i < timepoints.size(); ++i) {
66 auto const timebound{timepoints[i]};
67 auto const probability{probabilities[i]};
68 std::cout <<
"System failure probability at timebound " << timebound <<
" is " << probability <<
'\n';
71 if (!properties.empty()) {
72 auto const probabilities{checker.
check(properties, chunksize)};
73 for (
size_t i{0}; i < probabilities.size(); ++i) {
74 std::cout <<
"Property \"" << properties.at(i)->toString() <<
"\" has result " << probabilities.at(i) <<
'\n';
79 STORM_LOG_THROW(
dft->nrDynamicElements() == 0, storm::exceptions::NotSupportedException,
81 "Bdds can only be used on static fault trees. "
82 "Try modularisation.");
85 auto sylvanBddManager{std::make_shared<storm::dft::storage::SylvanBddManager>(env.
core())};
86 sylvanBddManager->execute([&]() {
92 checker->exportBddToDot(filename);
96 auto const minimalCutSets{checker->getMinimalCutSetsAsIndices()};
97 auto const sylvanBddManager{checker->getSylvanBddManager()};
100 for (
auto const& minimalCutSet : minimalCutSets) {
102 for (
auto const& be : minimalCutSet) {
103 std::cout << sylvanBddManager->getName(be) <<
' ';
110 if (calculateProbability) {
111 if (chunksize == 1) {
112 for (
auto const& timebound : timepoints) {
113 auto const probability{checker->getProbabilityAtTimebound(timebound)};
114 std::cout <<
"System failure probability at timebound " << timebound <<
" is " << probability <<
'\n';
117 auto const probabilities{checker->getProbabilitiesAtTimepoints(timepoints, chunksize)};
118 for (
size_t i{0}; i < timepoints.size(); ++i) {
119 auto const timebound{timepoints[i]};
120 auto const probability{probabilities[i]};
121 std::cout <<
"System failure probability at timebound " << timebound <<
" is " << probability <<
'\n';
125 if (!properties.empty()) {
126 auto const probabilities{adapter.
check(chunksize)};
127 for (
size_t i{0}; i < probabilities.size(); ++i) {
128 std::cout <<
"Property \"" << properties.at(i)->toString() <<
"\" has result " << probabilities.at(i) <<
'\n';
133 if (importanceMeasureName !=
"" && timepoints.size() == 1) {
134 auto const bes{
dft->getBasicElements()};
135 std::vector<double> values{};
136 if (importanceMeasureName ==
"MIF") {
137 values = checker->getAllBirnbaumFactorsAtTimebound(timepoints[0]);
139 if (importanceMeasureName ==
"CIF") {
140 values = checker->getAllCIFsAtTimebound(timepoints[0]);
142 if (importanceMeasureName ==
"DIF") {
143 values = checker->getAllDIFsAtTimebound(timepoints[0]);
145 if (importanceMeasureName ==
"RAW") {
146 values = checker->getAllRAWsAtTimebound(timepoints[0]);
148 if (importanceMeasureName ==
"RRW") {
149 values = checker->getAllRRWsAtTimebound(timepoints[0]);
152 for (
size_t i{0}; i < bes.size(); ++i) {
153 std::cout << importanceMeasureName <<
" for the basic event " << bes[i]->name() <<
" at timebound " << timepoints[0] <<
" is " << values[i]
156 }
else if (importanceMeasureName !=
"") {
157 auto const bes{
dft->getBasicElements()};
158 std::vector<std::vector<double>> values{};
159 if (importanceMeasureName ==
"MIF") {
160 values = checker->getAllBirnbaumFactorsAtTimepoints(timepoints, chunksize);
162 if (importanceMeasureName ==
"CIF") {
163 values = checker->getAllCIFsAtTimepoints(timepoints, chunksize);
165 if (importanceMeasureName ==
"DIF") {
166 values = checker->getAllDIFsAtTimepoints(timepoints, chunksize);
168 if (importanceMeasureName ==
"RAW") {
169 values = checker->getAllRAWsAtTimepoints(timepoints, chunksize);
171 if (importanceMeasureName ==
"RRW") {
172 values = checker->getAllRRWsAtTimepoints(timepoints, chunksize);
174 for (
size_t i{0}; i < bes.size(); ++i) {
175 for (
size_t j{0}; j < timepoints.size(); ++j) {
176 std::cout << importanceMeasureName <<
" for the basic event " << bes[i]->name() <<
" at timebound " << timepoints[j] <<
" is "
177 << values[i][j] <<
'\n';
184 "This version of Storm was compiled without support for Sylvan. Yet, a method was called that requires this support. Please choose a "
185 "version of Storm with Sylvan support.");