Storm 1.11.1.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
SparseDtmcEliminationModelChecker.h
Go to the documentation of this file.
1#pragma once
2
8
9namespace storm {
10namespace modelchecker {
11
12// forward declaration of friend class
13namespace region {
14template<typename ParametricModelType, typename ConstantType>
16}
17
19
20template<typename SparseDtmcModelType>
22 template<typename ParametricModelType, typename ConstantType>
24
25 public:
26 typedef typename SparseDtmcModelType::ValueType ValueType;
27 typedef typename SparseDtmcModelType::RewardModelType RewardModelType;
29 typedef typename FlexibleRowType::iterator FlexibleRowIterator;
30 using SolutionType = typename std::conditional<std::is_same_v<ValueType, storm::Interval>, double, ValueType>::type;
31
38
39 // The implemented methods of the AbstractModelChecker interface.
40 virtual bool canHandle(CheckTask<storm::logic::Formula, SolutionType> const& checkTask) const override;
41 virtual std::unique_ptr<CheckResult> computeBoundedUntilProbabilities(Environment const& env,
43 virtual std::unique_ptr<CheckResult> computeUntilProbabilities(Environment const& env,
45 virtual std::unique_ptr<CheckResult> computeReachabilityRewards(Environment const& env,
47 virtual std::unique_ptr<CheckResult> computeLongRunAverageRewards(
49 virtual std::unique_ptr<CheckResult> computeConditionalProbabilities(Environment const& env,
51 virtual std::unique_ptr<CheckResult> computeLongRunAverageProbabilities(Environment const& env,
53
54 // Static helper methods
55 static std::unique_ptr<CheckResult> computeUntilProbabilities(storm::storage::SparseMatrix<ValueType> const& probabilityMatrix,
56 storm::storage::SparseMatrix<ValueType> const& backwardTransitions,
57 storm::storage::BitVector const& initialStates, storm::storage::BitVector const& phiStates,
58 storm::storage::BitVector const& psiStates, bool computeForInitialStatesOnly);
59
60 static std::unique_ptr<CheckResult> computeReachabilityRewards(storm::storage::SparseMatrix<ValueType> const& probabilityMatrix,
61 storm::storage::SparseMatrix<ValueType> const& backwardTransitions,
62 storm::storage::BitVector const& initialStates,
63 storm::storage::BitVector const& targetStates, std::vector<ValueType>& stateRewardValues,
64 bool computeForInitialStatesOnly);
65
66 private:
67 static std::vector<SolutionType> computeLongRunValues(storm::storage::SparseMatrix<ValueType> const& transitionMatrix,
68 storm::storage::SparseMatrix<ValueType> const& backwardTransitions,
69 storm::storage::BitVector const& initialStates, storm::storage::BitVector const& maybeStates,
70 bool computeResultsForInitialStatesOnly, std::vector<ValueType>& stateValues);
71
72 static std::unique_ptr<CheckResult> computeReachabilityRewards(
73 storm::storage::SparseMatrix<ValueType> const& probabilityMatrix, storm::storage::SparseMatrix<ValueType> const& backwardTransitions,
74 storm::storage::BitVector const& initialStates, storm::storage::BitVector const& targetStates,
75 std::function<std::vector<ValueType>(uint_fast64_t, storm::storage::SparseMatrix<ValueType> const&, storm::storage::BitVector const&)> const&
76 totalStateRewardVectorGetter,
77 bool computeForInitialStatesOnly);
78
79 static std::vector<ValueType> computeReachabilityValues(storm::storage::SparseMatrix<ValueType> const& transitionMatrix, std::vector<ValueType>& values,
80 storm::storage::SparseMatrix<ValueType> const& backwardTransitions,
81 storm::storage::BitVector const& initialStates, bool computeResultsForInitialStatesOnly,
82 std::vector<ValueType> const& oneStepProbabilitiesToTarget);
83
84 static void performPrioritizedStateElimination(std::shared_ptr<StatePriorityQueue>& priorityQueue,
86 storm::storage::FlexibleSparseMatrix<ValueType>& backwardTransitions, std::vector<ValueType>& values,
87 storm::storage::BitVector const& initialStates, bool computeResultsForInitialStatesOnly);
88
89 static void performOrdinaryStateElimination(storm::storage::FlexibleSparseMatrix<ValueType>& transitionMatrix,
91 storm::storage::BitVector const& subsystem, storm::storage::BitVector const& initialStates,
92 bool computeResultsForInitialStatesOnly, std::vector<ValueType>& values,
93 boost::optional<std::vector<uint_fast64_t>> const& distanceBasedPriorities);
94
95 static uint_fast64_t performHybridStateElimination(storm::storage::SparseMatrix<ValueType> const& forwardTransitions,
98 storm::storage::BitVector const& subsystem, storm::storage::BitVector const& initialStates,
99 bool computeResultsForInitialStatesOnly, std::vector<ValueType>& values,
100 boost::optional<std::vector<uint_fast64_t>> const& distanceBasedPriorities);
101
102 static uint_fast64_t treatScc(storm::storage::FlexibleSparseMatrix<ValueType>& matrix, std::vector<ValueType>& values,
103 storm::storage::BitVector const& entryStates, storm::storage::BitVector const& scc,
104 storm::storage::BitVector const& initialStates, storm::storage::SparseMatrix<ValueType> const& forwardTransitions,
105 storm::storage::FlexibleSparseMatrix<ValueType>& backwardTransitions, bool eliminateEntryStates, uint_fast64_t level,
106 uint_fast64_t maximalSccSize, std::vector<storm::storage::sparse::state_type>& entryStateQueue,
107 bool computeResultsForInitialStatesOnly,
108 boost::optional<std::vector<uint_fast64_t>> const& distanceBasedPriorities = boost::none);
109
110 static bool checkConsistent(storm::storage::FlexibleSparseMatrix<ValueType>& transitionMatrix,
112};
113
114} // namespace modelchecker
115} // namespace storm
virtual bool canHandle(CheckTask< storm::logic::Formula, SolutionType > const &checkTask) const override
Determines whether the model checker can handle the given verification task.
virtual std::unique_ptr< CheckResult > computeReachabilityRewards(Environment const &env, CheckTask< storm::logic::EventuallyFormula, SolutionType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeUntilProbabilities(Environment const &env, CheckTask< storm::logic::UntilFormula, SolutionType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeLongRunAverageProbabilities(Environment const &env, CheckTask< storm::logic::StateFormula, SolutionType > const &checkTask) override
storm::storage::FlexibleSparseMatrix< ValueType >::row_type FlexibleRowType
virtual std::unique_ptr< CheckResult > computeBoundedUntilProbabilities(Environment const &env, CheckTask< storm::logic::BoundedUntilFormula, SolutionType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeLongRunAverageRewards(Environment const &env, CheckTask< storm::logic::LongRunAverageRewardFormula, SolutionType > const &checkTask) override
typename std::conditional< std::is_same_v< ValueType, storm::Interval >, double, ValueType >::type SolutionType
virtual std::unique_ptr< CheckResult > computeConditionalProbabilities(Environment const &env, CheckTask< storm::logic::ConditionalFormula, SolutionType > const &checkTask) override
This class represents a discrete-time Markov chain.
Definition Dtmc.h:13
A bit vector that is internally represented as a vector of 64-bit values.
Definition BitVector.h:16
The flexible sparse matrix is used during state elimination.
std::vector< storm::storage::MatrixEntry< index_type, value_type > > row_type
A class that holds a possibly non-square matrix in the compressed row storage format.