Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
GameBasedMdpModelChecker.h
Go to the documentation of this file.
1#pragma once
2
4
5#include <boost/algorithm/string.hpp>
6
8
11
13
17
18#include "storm/logic/Bound.h"
19
21
24
27#include "storm/utility/graph.h"
29
30namespace storm::gbar {
31namespace abstraction {
32
33template<storm::dd::DdType Type, typename ValueType>
34class MenuGame;
35
36template<storm::dd::DdType Type, typename ValueType>
38
39template<storm::dd::DdType Type, typename ValueType>
40class MenuGameRefiner;
41
42template<storm::dd::DdType Type>
44
45template<storm::dd::DdType Type, typename ValueType>
47
50
51template<typename ValueType>
53
54class ExplicitGameStrategy;
55class ExplicitGameStrategyPair;
56} // namespace abstraction
57
58namespace modelchecker {
59
60using storm::gbar::abstraction::ExplicitQualitativeGameResult;
61using storm::gbar::abstraction::ExplicitQualitativeGameResultMinMax;
62using storm::gbar::abstraction::ExplicitQuantitativeResult;
63using storm::gbar::abstraction::ExplicitQuantitativeResultMinMax;
64using storm::gbar::abstraction::SymbolicQualitativeGameResult;
65using storm::gbar::abstraction::SymbolicQualitativeGameResultMinMax;
66
67namespace detail {
68template<typename ValueType>
78} // namespace detail
79
82 GameBasedMdpModelCheckerOptions(std::vector<storm::expressions::Expression> const& constraints,
83 std::vector<std::vector<storm::expressions::Expression>> const& injectedRefinementPredicates)
85 // Intentionally left empty.
86 }
87
88 std::vector<storm::expressions::Expression> constraints;
89 std::vector<std::vector<storm::expressions::Expression>> injectedRefinementPredicates;
90};
91
92template<storm::dd::DdType Type, typename ModelType>
94 public:
95 typedef typename ModelType::ValueType ValueType;
96
107 std::shared_ptr<storm::utility::solver::SmtSolverFactory> const& smtSolverFactory =
108 std::make_shared<storm::utility::solver::MathsatSmtSolverFactory>());
109
111 virtual bool canHandle(storm::modelchecker::CheckTask<storm::logic::Formula, ValueType> const& checkTask) const override;
112 virtual std::unique_ptr<storm::modelchecker::CheckResult> computeUntilProbabilities(
114 virtual std::unique_ptr<storm::modelchecker::CheckResult> computeReachabilityProbabilities(
116
117 private:
121 std::unique_ptr<storm::modelchecker::CheckResult> performGameBasedAbstractionRefinement(
123 storm::expressions::Expression const& constraintExpression, storm::expressions::Expression const& targetStateExpression);
124
125 std::unique_ptr<storm::modelchecker::CheckResult> performSymbolicAbstractionSolutionStep(
128 storm::dd::Bdd<Type> const& initialStates, storm::dd::Bdd<Type> const& constraintStates, storm::dd::Bdd<Type> const& targetStates,
130 boost::optional<SymbolicQualitativeGameResultMinMax<Type>>& previousQualitativeResult,
131 boost::optional<abstraction::SymbolicQuantitativeGameResult<Type, ValueType>>& previousMinQuantitativeResult);
132 std::unique_ptr<storm::modelchecker::CheckResult> performExplicitAbstractionSolutionStep(
135 storm::dd::Bdd<Type> const& initialStates, storm::dd::Bdd<Type> const& constraintStates, storm::dd::Bdd<Type> const& targetStates,
137
141 std::vector<storm::expressions::Expression> getInitialPredicates(storm::expressions::Expression const& constraintExpression,
142 storm::expressions::Expression const& targetStateExpression);
143
148
153 SymbolicQualitativeGameResultMinMax<Type> computeProb01States(boost::optional<SymbolicQualitativeGameResultMinMax<Type>> const& previousQualitativeResult,
155 storm::OptimizationDirection player1Direction,
156 storm::dd::Bdd<Type> const& transitionMatrixBdd, storm::dd::Bdd<Type> const& constraintStates,
157 storm::dd::Bdd<Type> const& targetStates);
158
159 ExplicitQualitativeGameResultMinMax computeProb01States(
160 boost::optional<detail::PreviousExplicitResult<ValueType>> const& previousResult, storm::dd::Odd const& odd,
161 storm::OptimizationDirection player1Direction, storm::storage::SparseMatrix<ValueType> const& transitionMatrix,
162 std::vector<uint64_t> const& player1RowGrouping, storm::storage::SparseMatrix<ValueType> const& player1BackwardTransitions,
163 std::vector<uint64_t> const& player2BackwardTransitions, storm::storage::BitVector const& constraintStates,
164 storm::storage::BitVector const& targetStates, storage::ExplicitGameStrategyPair& minStrategyPair, storage::ExplicitGameStrategyPair& maxStrategyPair);
165
166 void printStatistics(storm::gbar::abstraction::MenuGameAbstractor<Type, ValueType> const& abstractor,
167 storm::gbar::abstraction::MenuGame<Type, ValueType> const& game, uint64_t refinements, uint64_t peakPlayer1States,
168 uint64_t peakTransitions) const;
169
170 /*
171 * Retrieves the expression characterized by the formula. The formula needs to be propositional.
172 */
173 storm::expressions::Expression getExpression(storm::logic::Formula const& formula);
174
177
181
183 std::shared_ptr<storm::utility::solver::SmtSolverFactory> smtSolverFactory;
184
187
189 bool reuseQualitativeResults;
190
192 bool reuseQuantitativeResults;
193
195 uint64_t maximalNumberOfAbstractions;
196
199
201 std::shared_ptr<storm::gbar::abstraction::MenuGameAbstractor<Type, ValueType>> abstractor;
202
204 uint64_t iteration;
205
207 bool fixPlayer1Strategy;
208
210 bool fixPlayer2Strategy;
211
213 bool debug;
214
216 storm::utility::Stopwatch totalAbstractionWatch;
217 storm::utility::Stopwatch totalSolutionWatch;
218 storm::utility::Stopwatch totalRefinementWatch;
219 storm::utility::Stopwatch totalTranslationWatch;
220 storm::utility::Stopwatch totalStrategyProcessingWatch;
221 storm::utility::Stopwatch setupWatch;
222 storm::utility::Stopwatch totalWatch;
223};
224} // namespace modelchecker
225} // namespace storm::gbar
This class represents a discrete-time stochastic two-player game.
Definition MenuGame.h:14
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
GameBasedMdpModelChecker(storm::storage::SymbolicModelDescription const &model, GameBasedMdpModelCheckerOptions const &options=GameBasedMdpModelCheckerOptions(), std::shared_ptr< storm::utility::solver::SmtSolverFactory > const &smtSolverFactory=std::make_shared< storm::utility::solver::MathsatSmtSolverFactory >())
Constructs a model checker whose underlying model is implicitly given by the provided program.
virtual bool canHandle(storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
Overridden methods from super class.
A bit vector that is internally represented as a vector of 64-bit values.
Definition BitVector.h:16
A class that holds a possibly non-square matrix in the compressed row storage format.
A class that provides convenience operations to display run times.
Definition Stopwatch.h:13
solver::OptimizationDirection OptimizationDirection
GameBasedMdpModelCheckerOptions(std::vector< storm::expressions::Expression > const &constraints, std::vector< std::vector< storm::expressions::Expression > > const &injectedRefinementPredicates)
std::vector< std::vector< storm::expressions::Expression > > injectedRefinementPredicates
std::vector< storm::expressions::Expression > constraints