Browse Source

MultiObjectivePreprocesso: Fix for new preprocessing in case of multi-dimensional bounded until formulas.

tempestpy_adaptions
Tim Quatmann 5 years ago
parent
commit
f83c0fa606
  1. 17
      src/storm/modelchecker/multiobjective/preprocessing/SparseMultiObjectivePreprocessor.cpp

17
src/storm/modelchecker/multiobjective/preprocessing/SparseMultiObjectivePreprocessor.cpp

@ -119,6 +119,22 @@ namespace storm {
absorbingStatesForSubformula = storm::utility::graph::performProb0A(backwardTransitions, lhs, rhs);
absorbingStatesForSubformula |= getOnlyReachableViaPhi(*model, ~lhs | rhs);
} else if (pathFormula.isBoundedUntilFormula()) {
if (pathFormula.asBoundedUntilFormula().hasMultiDimensionalSubformulas()) {
absorbingStatesForSubformula = storm::storage::BitVector(model->getNumberOfStates(), true);
storm::storage::BitVector absorbingStatesForSubSubformula;
for (uint64_t i = 0; i < pathFormula.asBoundedUntilFormula().getDimension(); ++i) {
auto subPathFormula = pathFormula.asBoundedUntilFormula().restrictToDimension(i);
auto lhs = mc.check(pathFormula.asBoundedUntilFormula().getLeftSubformula(i))->asExplicitQualitativeCheckResult().getTruthValuesVector();
auto rhs = mc.check(pathFormula.asBoundedUntilFormula().getRightSubformula(i))->asExplicitQualitativeCheckResult().getTruthValuesVector();
absorbingStatesForSubSubformula = storm::utility::graph::performProb0A(backwardTransitions, lhs, rhs);
if (pathFormula.asBoundedUntilFormula().hasLowerBound(i)) {
absorbingStatesForSubSubformula |= getOnlyReachableViaPhi(*model, ~lhs);
} else {
absorbingStatesForSubSubformula |= getOnlyReachableViaPhi(*model, ~lhs | rhs);
}
absorbingStatesForSubformula &= absorbingStatesForSubSubformula;
}
} else {
auto lhs = mc.check(pathFormula.asBoundedUntilFormula().getLeftSubformula())->asExplicitQualitativeCheckResult().getTruthValuesVector();
auto rhs = mc.check(pathFormula.asBoundedUntilFormula().getRightSubformula())->asExplicitQualitativeCheckResult().getTruthValuesVector();
absorbingStatesForSubformula = storm::utility::graph::performProb0A(backwardTransitions, lhs, rhs);
@ -127,6 +143,7 @@ namespace storm {
} else {
absorbingStatesForSubformula |= getOnlyReachableViaPhi(*model, ~lhs | rhs);
}
}
} else if (pathFormula.isGloballyFormula()){
auto phi = mc.check(pathFormula.asGloballyFormula().getSubformula())->asExplicitQualitativeCheckResult().getTruthValuesVector();
auto notPhi = ~phi;

Loading…
Cancel
Save