-
Notifications
You must be signed in to change notification settings - Fork 83
Implemented support for verifying IDTMCs #808
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Implemented support for verifying IDTMCs #808
Conversation
…propositional model checking for interval DTMCs
tquatmann
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good progress! My comment regarding the interval optimization direction is related to #807 .
| solver->setHasUniqueSolution(false); | ||
| solver->setHasNoEndComponents(false); | ||
| solver->setLowerBound(storm::utility::zero<SolutionType>()); | ||
| solver->setUpperBound(storm::utility::one<SolutionType>()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The upper bound of 1 does not apply if we compute expected rewareds
| Environment const& env, CheckTask<storm::logic::UntilFormula, SolutionType> const& checkTask) { | ||
| storm::logic::UntilFormula const& pathFormula = checkTask.getFormula(); | ||
| if (storm::IsIntervalType<ValueType>) { | ||
| STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(), storm::exceptions::InvalidPropertyException, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's a bit odd that the optimization direction controls nature for IDTMCs (but not for IMDPs, it seems).
Suggestion: the interval optimization direction should be stored as an std::optional<storm::OptimizationDirection> in the Checktask (and then checked e.g. here). That forces an API user to set it explicitly.
When creating a checktask from a formula, the interval optimization direction can be derived automatically (following PRISM behaviour).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Of course, this also means that we have to read the IntervalOptimizationDirection from the SolveGoal (somewhere in the Helper).
| Environment const& env, CheckTask<storm::logic::EventuallyFormula, SolutionType> const& checkTask) { | ||
| storm::logic::EventuallyFormula const& eventuallyFormula = checkTask.getFormula(); | ||
| if (storm::IsIntervalType<ValueType>) { | ||
| STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(), storm::exceptions::InvalidPropertyException, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See above
…uncertainty should be resolved by nature. This flag is required as soon as interval models are being checked.
| solver->setHasNoEndComponents(); | ||
| // Uncertainty is not robust (=adversarial) | ||
| solver->setUncertaintyIsRobust(false); | ||
| solver->setUncertaintyResolutionMode(UncertaintyResolutionMode::Cooperative); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In case the uncertaintyIsRobust-flag has been set explicitly, I used the corresponding enum value.
This feature extension includes IDTMC support to verify the following properties:
Note:
Pmin,Pmax,RminandRmaxare flipped compared to PRISM.minmax:methodis not manually set tovi, the current implementation prints a warning and defaults to robust value iteration. This is somewhat related to issue Default selected method not supported (dd's) #264. Note that the warning currently appears twice as theminmax:methodis checked in two places.I'm happy to receive any kind of feedback!