Browse Source

Fixed handling of constant BE in approximation

tempestpy_adaptions
Matthias Volk 5 years ago
parent
commit
7e1f5bf2ac
  1. 38
      src/storm-dft/builder/ExplicitDFTModelBuilder.cpp

38
src/storm-dft/builder/ExplicitDFTModelBuilder.cpp

@ -745,37 +745,35 @@ namespace storm {
storm::storage::BitVector coldBEs(subtree.size(), false);
for (size_t i = 0; i < subtree.size(); ++i) {
size_t id = subtree[i];
// Consider only still operational BEs
if (state->isOperational(id)) {
// Get BE rate
ValueType rate = state->getBERate(id);
if (storm::utility::isZero<ValueType>(rate)) {
// Get active failure rate for cold BE
auto be = dft.getBasicElement(id);
switch (be->type()) {
case storm::storage::DFTElementType::BE_EXP:
{
auto be = dft.getBasicElement(id);
switch (be->type()) {
case storm::storage::DFTElementType::BE_EXP:
{
// Get BE rate
ValueType rate = state->getBERate(id);
if (storm::utility::isZero<ValueType>(rate)) {
// Get active failure rate for cold BE
auto beExp = std::static_pointer_cast<storm::storage::BEExponential<ValueType> const>(be);
rate = beExp->activeFailureRate();
STORM_LOG_ASSERT(!storm::utility::isZero<ValueType>(rate), "Failure rate should not be zero.");
// Mark BE as cold
coldBEs.set(i, true);
break;
}
case storm::storage::DFTElementType::BE_CONST:
{
// Ignore BE which cannot fail
continue;
}
default:
STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "BE of type '" << be->type() << "' is not known.");
break;
rates.push_back(rate);
rateSum += rate;
break;
}
case storm::storage::DFTElementType::BE_CONST:
// Ignore BE which cannot fail
continue;
default:
STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "BE of type '" << be->type() << "' is not known.");
break;
}
rates.push_back(rate);
rateSum += rate;
}
}
STORM_LOG_ASSERT(rates.size() > 0, "No rates failable");
// Sort rates

Loading…
Cancel
Save