13template<storm::dd::DdType DdType>
16template<storm::dd::DdType DdType,
typename ValueType>
21template<
typename ValueType>
25template<storm::dd::DdType DdType,
typename ValueType>
28template<storm::dd::DdType DdType,
typename ValueType>
31template<storm::dd::DdType DdType,
typename ValueType>
34template<storm::dd::DdType DdType,
typename ValueType>
40template<
typename ModelType>
43template<
typename ValueType>
46template<storm::dd::DdType DdType,
typename ValueType>
52namespace abstraction {
53class QualitativeResultMinMax;
55template<storm::dd::DdType DdType>
56class SymbolicQualitativeResultMinMax;
58template<storm::dd::DdType DdType>
59class SymbolicQualitativeMdpResultMinMax;
61template<storm::dd::DdType DdType>
62class SymbolicQualitativeGameResultMinMax;
66template<storm::dd::DdType DdType>
67class SymbolicStateSet;
72template<
typename ModelType>
101 virtual std::string
const&
getName()
const = 0;
110 virtual std::pair<std::unique_ptr<storm::gbar::abstraction::StateSet>, std::unique_ptr<storm::gbar::abstraction::StateSet>>
getConstraintAndTargetStates(
130 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>>
computeBounds(
163 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>>
computeQuantitativeResult(
166 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>>
computeQuantitativeResult(
170 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>>
computeQuantitativeResult(
174 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>>
computeQuantitativeResult(
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);
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);
208 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>>
const& bounds);
220 std::unique_ptr<storm::modelchecker::CheckTask<storm::logic::Formula, ValueType>
const> checkTask;
223 bool reuseQualitativeResults;
226 bool reuseQuantitativeResults;
232 std::unique_ptr<storm::gbar::abstraction::QualitativeResultMinMax> lastQualitativeResults;
236 std::pair<std::unique_ptr<storm::modelchecker::CheckResult>, std::unique_ptr<storm::modelchecker::CheckResult>> lastBounds;
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.
virtual ~AbstractAbstractionRefinementModelChecker()
ModelType::ValueType ValueType
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 ...
static const storm::dd::DdType DdType
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)
bool getReuseQuantitativeResults() const
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.
This class represents a discrete-time Markov decision process.
Base class for all symbolic models.
This class represents a discrete-time stochastic two-player game.
solver::OptimizationDirection OptimizationDirection
Options that configure the game-based abstraction-refinement procedure.