Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
AbstractAbstractionRefinementModelChecker.h
Go to the documentation of this file.
1#pragma once
2
5
7
8namespace storm {
9
10class Environment;
11
12namespace dd {
13template<storm::dd::DdType DdType>
14class Bdd;
15
16template<storm::dd::DdType DdType, typename ValueType>
17class Add;
18} // namespace dd
19
20namespace models {
21template<typename ValueType>
22class Model;
23
24namespace symbolic {
25template<storm::dd::DdType DdType, typename ValueType>
26class Model;
27
28template<storm::dd::DdType DdType, typename ValueType>
29class Dtmc;
30
31template<storm::dd::DdType DdType, typename ValueType>
32class Mdp;
33
34template<storm::dd::DdType DdType, typename ValueType>
36} // namespace symbolic
37} // namespace models
38
39namespace modelchecker {
40template<typename ModelType>
42
43template<typename ValueType>
45
46template<storm::dd::DdType DdType, typename ValueType>
48} // namespace modelchecker
49} // namespace storm
50
51namespace storm::gbar {
52namespace abstraction {
53class QualitativeResultMinMax;
54
55template<storm::dd::DdType DdType>
56class SymbolicQualitativeResultMinMax;
57
58template<storm::dd::DdType DdType>
59class SymbolicQualitativeMdpResultMinMax;
60
61template<storm::dd::DdType DdType>
62class SymbolicQualitativeGameResultMinMax;
63
64class StateSet;
65
66template<storm::dd::DdType DdType>
67class SymbolicStateSet;
68} // namespace abstraction
69
70namespace modelchecker {
71
72template<typename ModelType>
74 public:
75 typedef typename ModelType::ValueType ValueType;
76 static const storm::dd::DdType DdType = ModelType::DdType;
77
82
84
86 virtual bool canHandle(storm::modelchecker::CheckTask<storm::logic::Formula> const& checkTask) const override;
87 virtual std::unique_ptr<storm::modelchecker::CheckResult> computeUntilProbabilities(
89 virtual std::unique_ptr<storm::modelchecker::CheckResult> computeReachabilityProbabilities(
91 virtual std::unique_ptr<storm::modelchecker::CheckResult> computeReachabilityRewards(
93
94 protected:
96
98 virtual bool supportsReachabilityRewards() const;
99
101 virtual std::string const& getName() const = 0;
102
105
107 virtual std::shared_ptr<storm::models::Model<ValueType>> getAbstractModel() = 0;
108
110 virtual std::pair<std::unique_ptr<storm::gbar::abstraction::StateSet>, std::unique_ptr<storm::gbar::abstraction::StateSet>> getConstraintAndTargetStates(
111 storm::models::Model<ValueType> const& abstractModel) = 0;
112
115 virtual uint64_t getAbstractionPlayer() const = 0;
116
118 virtual bool requiresSchedulerSynthesis() const = 0;
119
122 virtual void refineAbstractModel() = 0;
123
125
127 std::unique_ptr<storm::modelchecker::CheckResult> performAbstractionRefinement(Environment const& env);
128
130 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> computeBounds(
131 Environment const& env, storm::models::Model<ValueType> const& abstractModel);
132
134 std::unique_ptr<storm::gbar::abstraction::QualitativeResultMinMax> computeQualitativeResult(Environment const& env,
135 storm::models::Model<ValueType> const& abstractModel,
136 storm::gbar::abstraction::StateSet const& constraintStates,
137 storm::gbar::abstraction::StateSet const& targetStates);
138 std::unique_ptr<storm::gbar::abstraction::QualitativeResultMinMax> computeQualitativeResult(
139 Environment const& env, storm::models::symbolic::Model<DdType, ValueType> const& abstractModel,
141 std::unique_ptr<storm::gbar::abstraction::QualitativeResultMinMax> computeQualitativeResult(
142 Environment const& env, storm::models::symbolic::Dtmc<DdType, ValueType> const& abstractModel,
144 std::unique_ptr<storm::gbar::abstraction::QualitativeResultMinMax> computeQualitativeResult(
145 Environment const& env, storm::models::symbolic::Mdp<DdType, ValueType> const& abstractModel,
147 std::unique_ptr<storm::gbar::abstraction::QualitativeResultMinMax> computeQualitativeResult(
150 std::unique_ptr<storm::gbar::abstraction::SymbolicQualitativeGameResultMinMax<DdType>> computeQualitativeResultReuse(
153 uint64_t abstractionPlayer, storm::OptimizationDirection const& modelNondeterminismDirection, bool requiresSchedulers);
154 std::unique_ptr<storm::modelchecker::CheckResult> checkForResultAfterQualitativeCheck(storm::models::Model<ValueType> const& abstractModel);
155 std::unique_ptr<storm::modelchecker::CheckResult> checkForResultAfterQualitativeCheck(
157
158 // Methods related to the quantitative solution.
160 storm::gbar::abstraction::QualitativeResultMinMax const& qualitativeResults);
163 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> computeQuantitativeResult(
164 Environment const& env, storm::models::Model<ValueType> const& abstractModel, storm::gbar::abstraction::StateSet const& constraintStates,
166 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> computeQuantitativeResult(
167 Environment const& env, storm::models::symbolic::Model<DdType, ValueType> const& abstractModel,
170 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> computeQuantitativeResult(
171 Environment const& env, storm::models::symbolic::Dtmc<DdType, ValueType> const& abstractModel,
174 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> computeQuantitativeResult(
175 Environment const& env, storm::models::symbolic::Mdp<DdType, ValueType> const& abstractModel,
178 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> computeQuantitativeResult(
183 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>>& bounds);
185 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>>& bounds);
186 void printBoundsInformation(std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>>& bounds);
189 bool checkForResultAfterQuantitativeCheck(storm::models::Model<ValueType> const& abstractModel, bool lowerBounds,
191 std::unique_ptr<storm::modelchecker::CheckResult> computeReachabilityProbabilitiesHelper(
193 storm::OptimizationDirection const& player1Direction, storm::OptimizationDirection const& player2Direction, storm::dd::Bdd<DdType> const& maybeStates,
194 storm::dd::Bdd<DdType> const& prob1States, storm::dd::Add<DdType, ValueType> const& startValues);
195
199 std::unique_ptr<storm::modelchecker::CheckResult> tryToObtainResultFromBounds(
201 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>>& bounds);
204 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> const& bounds);
207 std::unique_ptr<storm::modelchecker::CheckResult> getAverageOfBounds(
208 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> const& bounds);
209
213
215 bool getReuseQualitativeResults() const;
216 bool getReuseQuantitativeResults() const;
217
218 private:
220 std::unique_ptr<storm::modelchecker::CheckTask<storm::logic::Formula, ValueType> const> checkTask;
221
223 bool reuseQualitativeResults;
224
226 bool reuseQuantitativeResults;
227
229 double precision;
230
232 std::unique_ptr<storm::gbar::abstraction::QualitativeResultMinMax> lastQualitativeResults;
233
236 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> lastBounds;
237};
238} // namespace modelchecker
239} // 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.
AbstractAbstractionRefinementModelChecker(abstraction::AbstractionOptions const &options=abstraction::AbstractionOptions())
Constructs a model checker for the given model.
This class represents a discrete-time Markov chain.
Definition Dtmc.h:13
This class represents a discrete-time Markov decision process.
Definition Mdp.h:13
Base class for all symbolic models.
Definition Model.h:42
This class represents a discrete-time stochastic two-player game.
solver::OptimizationDirection OptimizationDirection
Options that configure the game-based abstraction-refinement procedure.