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
80template<storm::dd::DdType Type, typename ModelType>
82 public:
83 typedef typename ModelType::ValueType ValueType;
84
95 std::shared_ptr<storm::utility::solver::SmtSolverFactory> const& smtSolverFactory =
96 std::make_shared<storm::utility::solver::MathsatSmtSolverFactory>());
97
99 virtual bool canHandle(storm::modelchecker::CheckTask<storm::logic::Formula, ValueType> const& checkTask) const override;
100 virtual std::unique_ptr<storm::modelchecker::CheckResult> computeUntilProbabilities(
102 virtual std::unique_ptr<storm::modelchecker::CheckResult> computeReachabilityProbabilities(
104
105 private:
109 std::unique_ptr<storm::modelchecker::CheckResult> performGameBasedAbstractionRefinement(
111 storm::expressions::Expression const& constraintExpression, storm::expressions::Expression const& targetStateExpression);
112
113 std::unique_ptr<storm::modelchecker::CheckResult> performSymbolicAbstractionSolutionStep(
116 storm::dd::Bdd<Type> const& initialStates, storm::dd::Bdd<Type> const& constraintStates, storm::dd::Bdd<Type> const& targetStates,
118 boost::optional<SymbolicQualitativeGameResultMinMax<Type>>& previousQualitativeResult,
119 boost::optional<abstraction::SymbolicQuantitativeGameResult<Type, ValueType>>& previousMinQuantitativeResult);
120 std::unique_ptr<storm::modelchecker::CheckResult> performExplicitAbstractionSolutionStep(
123 storm::dd::Bdd<Type> const& initialStates, storm::dd::Bdd<Type> const& constraintStates, storm::dd::Bdd<Type> const& targetStates,
125
129 std::vector<storm::expressions::Expression> getInitialPredicates(storm::expressions::Expression const& constraintExpression,
130 storm::expressions::Expression const& targetStateExpression);
131
136
141 SymbolicQualitativeGameResultMinMax<Type> computeProb01States(boost::optional<SymbolicQualitativeGameResultMinMax<Type>> const& previousQualitativeResult,
143 storm::OptimizationDirection player1Direction,
144 storm::dd::Bdd<Type> const& transitionMatrixBdd, storm::dd::Bdd<Type> const& constraintStates,
145 storm::dd::Bdd<Type> const& targetStates);
146
147 ExplicitQualitativeGameResultMinMax computeProb01States(
148 boost::optional<detail::PreviousExplicitResult<ValueType>> const& previousResult, storm::dd::Odd const& odd,
149 storm::OptimizationDirection player1Direction, storm::storage::SparseMatrix<ValueType> const& transitionMatrix,
150 std::vector<uint64_t> const& player1RowGrouping, storm::storage::SparseMatrix<ValueType> const& player1BackwardTransitions,
151 std::vector<uint64_t> const& player2BackwardTransitions, storm::storage::BitVector const& constraintStates,
152 storm::storage::BitVector const& targetStates, storage::ExplicitGameStrategyPair& minStrategyPair, storage::ExplicitGameStrategyPair& maxStrategyPair);
153
154 void printStatistics(storm::gbar::abstraction::MenuGameAbstractor<Type, ValueType> const& abstractor,
155 storm::gbar::abstraction::MenuGame<Type, ValueType> const& game, uint64_t refinements, uint64_t peakPlayer1States,
156 uint64_t peakTransitions) const;
157
158 /*
159 * Retrieves the expression characterized by the formula. The formula needs to be propositional.
160 */
161 storm::expressions::Expression getExpression(storm::logic::Formula const& formula);
162
165
169
171 std::shared_ptr<storm::utility::solver::SmtSolverFactory> smtSolverFactory;
172
175
177 bool reuseQualitativeResults;
178
180 bool reuseQuantitativeResults;
181
183 uint64_t maximalNumberOfAbstractions;
184
186 abstraction::SolveMode solveMode;
187
189 std::shared_ptr<storm::gbar::abstraction::MenuGameAbstractor<Type, ValueType>> abstractor;
190
192 uint64_t iteration;
193
195 bool fixPlayer1Strategy;
196
198 bool fixPlayer2Strategy;
199
201 bool debug;
202
204 storm::utility::Stopwatch totalAbstractionWatch;
205 storm::utility::Stopwatch totalSolutionWatch;
206 storm::utility::Stopwatch totalRefinementWatch;
207 storm::utility::Stopwatch totalTranslationWatch;
208 storm::utility::Stopwatch totalStrategyProcessingWatch;
209 storm::utility::Stopwatch setupWatch;
210 storm::utility::Stopwatch totalWatch;
211};
212} // namespace modelchecker
213} // 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, abstraction::AbstractionOptions const &options=abstraction::AbstractionOptions(), 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
Options that configure the game-based abstraction-refinement procedure.