Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
AbstractAbstractionRefinementModelChecker.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace storm {
7
8class Environment;
9
10namespace dd {
11template<storm::dd::DdType DdType>
12class Bdd;
13
14template<storm::dd::DdType DdType, typename ValueType>
15class Add;
16} // namespace dd
17
18namespace models {
19template<typename ValueType>
20class Model;
21
22namespace symbolic {
23template<storm::dd::DdType DdType, typename ValueType>
24class Model;
25
26template<storm::dd::DdType DdType, typename ValueType>
27class Dtmc;
28
29template<storm::dd::DdType DdType, typename ValueType>
30class Mdp;
31
32template<storm::dd::DdType DdType, typename ValueType>
33class StochasticTwoPlayerGame;
34} // namespace symbolic
35} // namespace models
36
37namespace modelchecker {
38template<typename ModelType>
40
41template<typename ValueType>
43
44template<storm::dd::DdType DdType, typename ValueType>
46} // namespace modelchecker
47} // namespace storm
48
49namespace storm::gbar {
50namespace abstraction {
51class QualitativeResultMinMax;
52
53template<storm::dd::DdType DdType>
54class SymbolicQualitativeResultMinMax;
55
56template<storm::dd::DdType DdType>
57class SymbolicQualitativeMdpResultMinMax;
58
59template<storm::dd::DdType DdType>
60class SymbolicQualitativeGameResultMinMax;
61
62class StateSet;
63
64template<storm::dd::DdType DdType>
65class SymbolicStateSet;
66} // namespace abstraction
67
68namespace modelchecker {
69
70template<typename ModelType>
72 public:
73 typedef typename ModelType::ValueType ValueType;
74 static const storm::dd::DdType DdType = ModelType::DdType;
75
80
82
84 virtual bool canHandle(storm::modelchecker::CheckTask<storm::logic::Formula> const& checkTask) const override;
85 virtual std::unique_ptr<storm::modelchecker::CheckResult> computeUntilProbabilities(
87 virtual std::unique_ptr<storm::modelchecker::CheckResult> computeReachabilityProbabilities(
89 virtual std::unique_ptr<storm::modelchecker::CheckResult> computeReachabilityRewards(
91
92 protected:
94
96 virtual bool supportsReachabilityRewards() const;
97
99 virtual std::string const& getName() const = 0;
100
103
105 virtual std::shared_ptr<storm::models::Model<ValueType>> getAbstractModel() = 0;
106
108 virtual std::pair<std::unique_ptr<storm::gbar::abstraction::StateSet>, std::unique_ptr<storm::gbar::abstraction::StateSet>> getConstraintAndTargetStates(
109 storm::models::Model<ValueType> const& abstractModel) = 0;
110
113 virtual uint64_t getAbstractionPlayer() const = 0;
114
116 virtual bool requiresSchedulerSynthesis() const = 0;
117
120 virtual void refineAbstractModel() = 0;
121
123
125 std::unique_ptr<storm::modelchecker::CheckResult> performAbstractionRefinement(Environment const& env);
126
128 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> computeBounds(
129 Environment const& env, storm::models::Model<ValueType> const& abstractModel);
130
132 std::unique_ptr<storm::gbar::abstraction::QualitativeResultMinMax> computeQualitativeResult(Environment const& env,
133 storm::models::Model<ValueType> const& abstractModel,
134 storm::gbar::abstraction::StateSet const& constraintStates,
135 storm::gbar::abstraction::StateSet const& targetStates);
136 std::unique_ptr<storm::gbar::abstraction::QualitativeResultMinMax> computeQualitativeResult(
137 Environment const& env, storm::models::symbolic::Model<DdType, ValueType> const& abstractModel,
139 std::unique_ptr<storm::gbar::abstraction::QualitativeResultMinMax> computeQualitativeResult(
140 Environment const& env, storm::models::symbolic::Dtmc<DdType, ValueType> const& abstractModel,
142 std::unique_ptr<storm::gbar::abstraction::QualitativeResultMinMax> computeQualitativeResult(
143 Environment const& env, storm::models::symbolic::Mdp<DdType, ValueType> const& abstractModel,
145 std::unique_ptr<storm::gbar::abstraction::QualitativeResultMinMax> computeQualitativeResult(
148 std::unique_ptr<storm::gbar::abstraction::SymbolicQualitativeGameResultMinMax<DdType>> computeQualitativeResultReuse(
151 uint64_t abstractionPlayer, storm::OptimizationDirection const& modelNondeterminismDirection, bool requiresSchedulers);
152 std::unique_ptr<storm::modelchecker::CheckResult> checkForResultAfterQualitativeCheck(storm::models::Model<ValueType> const& abstractModel);
153 std::unique_ptr<storm::modelchecker::CheckResult> checkForResultAfterQualitativeCheck(
155
156 // Methods related to the quantitative solution.
158 storm::gbar::abstraction::QualitativeResultMinMax const& qualitativeResults);
161 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> computeQuantitativeResult(
162 Environment const& env, storm::models::Model<ValueType> const& abstractModel, storm::gbar::abstraction::StateSet const& constraintStates,
164 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> computeQuantitativeResult(
165 Environment const& env, storm::models::symbolic::Model<DdType, ValueType> const& abstractModel,
168 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> computeQuantitativeResult(
169 Environment const& env, storm::models::symbolic::Dtmc<DdType, ValueType> const& abstractModel,
172 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> computeQuantitativeResult(
173 Environment const& env, storm::models::symbolic::Mdp<DdType, ValueType> const& abstractModel,
176 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> computeQuantitativeResult(
181 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>>& bounds);
183 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>>& bounds);
184 void printBoundsInformation(std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>>& bounds);
187 bool checkForResultAfterQuantitativeCheck(storm::models::Model<ValueType> const& abstractModel, bool lowerBounds,
189 std::unique_ptr<storm::modelchecker::CheckResult> computeReachabilityProbabilitiesHelper(
191 storm::OptimizationDirection const& player1Direction, storm::OptimizationDirection const& player2Direction, storm::dd::Bdd<DdType> const& maybeStates,
192 storm::dd::Bdd<DdType> const& prob1States, storm::dd::Add<DdType, ValueType> const& startValues);
193
197 std::unique_ptr<storm::modelchecker::CheckResult> tryToObtainResultFromBounds(
199 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>>& bounds);
202 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> const& bounds);
205 std::unique_ptr<storm::modelchecker::CheckResult> getAverageOfBounds(
206 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> const& bounds);
207
211
213 bool getReuseQualitativeResults() const;
214 bool getReuseQuantitativeResults() const;
215
216 private:
218 std::unique_ptr<storm::modelchecker::CheckTask<storm::logic::Formula, ValueType> const> checkTask;
219
221 bool reuseQualitativeResults;
222
224 bool reuseQuantitativeResults;
225
227 std::unique_ptr<storm::gbar::abstraction::QualitativeResultMinMax> lastQualitativeResults;
228
231 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> lastBounds;
232};
233} // namespace modelchecker
234} // namespace storm::gbar
virtual std::shared_ptr< storm::models::Model< ValueType > > getAbstractModel()=0
Retrieves the abstract model.
std::unique_ptr< storm::gbar::abstraction::SymbolicQualitativeGameResultMinMax< DdType > > computeQualitativeResultReuse(storm::models::symbolic::StochasticTwoPlayerGame< DdType, ValueType > const &abstractModel, storm::dd::Bdd< DdType > const &transitionMatrixBdd, storm::gbar::abstraction::SymbolicStateSet< DdType > const &constraintStates, storm::gbar::abstraction::SymbolicStateSet< DdType > const &targetStates, uint64_t abstractionPlayer, storm::OptimizationDirection const &modelNondeterminismDirection, bool requiresSchedulers)
std::unique_ptr< storm::modelchecker::CheckResult > getAverageOfBounds(std::pair< std::unique_ptr< storm::modelchecker::CheckResult >, std::unique_ptr< storm::modelchecker::CheckResult > > const &bounds)
Retrieves the average of the two bounds.
bool checkForResultAfterQuantitativeCheck(storm::models::Model< ValueType > const &abstractModel, bool lowerBounds, storm::modelchecker::QuantitativeCheckResult< ValueType > const &result)
std::unique_ptr< storm::modelchecker::CheckResult > performAbstractionRefinement(Environment const &env)
-----— Methods used to implement the abstraction refinement procedure.
std::pair< std::unique_ptr< storm::modelchecker::CheckResult >, std::unique_ptr< storm::modelchecker::CheckResult > > computeQuantitativeResult(Environment const &env, storm::models::Model< ValueType > const &abstractModel, storm::gbar::abstraction::StateSet const &constraintStates, storm::gbar::abstraction::StateSet const &targetStates, storm::gbar::abstraction::QualitativeResultMinMax const &qualitativeResults)
virtual void refineAbstractModel()=0
Refines the abstract model so that the next iteration obtains bounds that are at least as precise as ...
storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > const & getCheckTask() const
std::unique_ptr< storm::gbar::abstraction::QualitativeResultMinMax > computeQualitativeResult(Environment const &env, storm::models::Model< ValueType > const &abstractModel, storm::gbar::abstraction::StateSet const &constraintStates, storm::gbar::abstraction::StateSet const &targetStates)
Solves the current check task qualitatively, i.e. computes all states with probability 0/1.
void setCheckTask(storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > const &checkTask)
Methods to set/get the check task that is currently handled.
virtual bool requiresSchedulerSynthesis() const =0
Retrieves whether schedulers need to be computed.
virtual std::string const & getName() const =0
Retrieves the name of the underlying method.
void printBoundsInformation(std::pair< std::unique_ptr< storm::modelchecker::CheckResult >, std::unique_ptr< storm::modelchecker::CheckResult > > &bounds)
virtual void initializeAbstractionRefinement()=0
Called before the abstraction refinement loop to give the implementation a time to set up auxiliary d...
virtual bool supportsReachabilityRewards() const
-----— Methods that need to be overwritten/defined by implementations in subclasses.
std::unique_ptr< storm::modelchecker::CheckResult > checkForResultAfterQualitativeCheck(storm::models::Model< ValueType > const &abstractModel)
virtual std::unique_ptr< storm::modelchecker::CheckResult > computeReachabilityProbabilities(Environment const &env, storm::modelchecker::CheckTask< storm::logic::EventuallyFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< storm::modelchecker::CheckResult > computeUntilProbabilities(Environment const &env, storm::modelchecker::CheckTask< storm::logic::UntilFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< storm::modelchecker::CheckResult > computeReachabilityRewards(Environment const &env, storm::modelchecker::CheckTask< storm::logic::EventuallyFormula, ValueType > const &checkTask) override
bool skipQuantitativeSolution(storm::models::Model< ValueType > const &abstractModel, storm::gbar::abstraction::QualitativeResultMinMax const &qualitativeResults)
virtual std::pair< std::unique_ptr< storm::gbar::abstraction::StateSet >, std::unique_ptr< storm::gbar::abstraction::StateSet > > getConstraintAndTargetStates(storm::models::Model< ValueType > const &abstractModel)=0
Retrieves the state sets corresponding to the constraint and target states.
std::unique_ptr< storm::modelchecker::CheckResult > computeReachabilityProbabilitiesHelper(Environment const &env, storm::models::symbolic::StochasticTwoPlayerGame< DdType, ValueType > const &abstractModel, storm::OptimizationDirection const &player1Direction, storm::OptimizationDirection const &player2Direction, storm::dd::Bdd< DdType > const &maybeStates, storm::dd::Bdd< DdType > const &prob1States, storm::dd::Add< DdType, ValueType > const &startValues)
virtual uint64_t getAbstractionPlayer() const =0
Retrieves the index of the abstraction player.
std::pair< std::unique_ptr< storm::modelchecker::CheckResult >, std::unique_ptr< storm::modelchecker::CheckResult > > computeBounds(Environment const &env, storm::models::Model< ValueType > const &abstractModel)
Computes lower and upper bounds on the abstract model and returns the bounds for the initial states.
void filterInitialStates(storm::models::Model< ValueType > const &abstractModel, std::pair< std::unique_ptr< storm::modelchecker::CheckResult >, std::unique_ptr< storm::modelchecker::CheckResult > > &bounds)
std::unique_ptr< storm::modelchecker::CheckResult > tryToObtainResultFromBounds(storm::models::Model< ValueType > const &model, std::pair< std::unique_ptr< storm::modelchecker::CheckResult >, std::unique_ptr< storm::modelchecker::CheckResult > > &bounds)
Tries to obtain the results from the bounds.
bool getReuseQualitativeResults() const
Methods that retrieve which results shall be reused.
bool boundsAreSufficientlyClose(std::pair< std::unique_ptr< storm::modelchecker::CheckResult >, std::unique_ptr< storm::modelchecker::CheckResult > > const &bounds)
Checks whether the provided bounds are sufficiently close to terminate.
virtual bool canHandle(storm::modelchecker::CheckTask< storm::logic::Formula > const &checkTask) const override
Overridden methods from super class.
This class represents a discrete-time Markov chain.
Definition Dtmc.h:14
This class represents a (discrete-time) Markov decision process.
Definition Mdp.h:14
This class represents a discrete-time Markov chain.
Definition Dtmc.h:15
This class represents a discrete-time Markov decision process.
Definition Mdp.h:15
Base class for all symbolic models.
Definition Model.h:46
This class represents a discrete-time stochastic two-player game.
SFTBDDChecker::Bdd Bdd
LabParser.cpp.
Definition cli.cpp:18