Storm
A Modern Probabilistic Model Checker
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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
37
38 // The implemented methods of the AbstractModelChecker interface.
39 virtual bool canHandle(CheckTask<storm::logic::Formula, ValueType> const& checkTask) const override;
40 virtual std::unique_ptr<CheckResult> computeBoundedUntilProbabilities(Environment const& env,
42 virtual std::unique_ptr<CheckResult> computeUntilProbabilities(Environment const& env,
43 CheckTask<storm::logic::UntilFormula, ValueType> const& checkTask) override;
44 virtual std::unique_ptr<CheckResult> computeReachabilityRewards(Environment const& env,
46 virtual std::unique_ptr<CheckResult> computeLongRunAverageRewards(
48 virtual std::unique_ptr<CheckResult> computeConditionalProbabilities(Environment const& env,
50 virtual std::unique_ptr<CheckResult> computeLongRunAverageProbabilities(Environment const& env,
51 CheckTask<storm::logic::StateFormula, ValueType> const& checkTask) override;
52
53 // Static helper methods
54 static std::unique_ptr<CheckResult> computeUntilProbabilities(storm::storage::SparseMatrix<ValueType> const& probabilityMatrix,
55 storm::storage::SparseMatrix<ValueType> const& backwardTransitions,
56 storm::storage::BitVector const& initialStates, storm::storage::BitVector const& phiStates,
57 storm::storage::BitVector const& psiStates, bool computeForInitialStatesOnly);
58
59 static std::unique_ptr<CheckResult> computeReachabilityRewards(storm::storage::SparseMatrix<ValueType> const& probabilityMatrix,
60 storm::storage::SparseMatrix<ValueType> const& backwardTransitions,
61 storm::storage::BitVector const& initialStates,
62 storm::storage::BitVector const& targetStates, std::vector<ValueType>& stateRewardValues,
63 bool computeForInitialStatesOnly);
64
65 private:
66 static std::vector<ValueType> computeLongRunValues(storm::storage::SparseMatrix<ValueType> const& transitionMatrix,
67 storm::storage::SparseMatrix<ValueType> const& backwardTransitions,
68 storm::storage::BitVector const& initialStates, storm::storage::BitVector const& maybeStates,
69 bool computeResultsForInitialStatesOnly, std::vector<ValueType>& stateValues);
70
71 static std::unique_ptr<CheckResult> computeReachabilityRewards(
72 storm::storage::SparseMatrix<ValueType> const& probabilityMatrix, storm::storage::SparseMatrix<ValueType> const& backwardTransitions,
73 storm::storage::BitVector const& initialStates, storm::storage::BitVector const& targetStates,
74 std::function<std::vector<ValueType>(uint_fast64_t, storm::storage::SparseMatrix<ValueType> const&, storm::storage::BitVector const&)> const&
75 totalStateRewardVectorGetter,
76 bool computeForInitialStatesOnly);
77
78 static std::vector<ValueType> computeReachabilityValues(storm::storage::SparseMatrix<ValueType> const& transitionMatrix, std::vector<ValueType>& values,
79 storm::storage::SparseMatrix<ValueType> const& backwardTransitions,
80 storm::storage::BitVector const& initialStates, bool computeResultsForInitialStatesOnly,
81 std::vector<ValueType> const& oneStepProbabilitiesToTarget);
82
83 static void performPrioritizedStateElimination(std::shared_ptr<StatePriorityQueue>& priorityQueue,
85 storm::storage::FlexibleSparseMatrix<ValueType>& backwardTransitions, std::vector<ValueType>& values,
86 storm::storage::BitVector const& initialStates, bool computeResultsForInitialStatesOnly);
87
88 static void performOrdinaryStateElimination(storm::storage::FlexibleSparseMatrix<ValueType>& transitionMatrix,
90 storm::storage::BitVector const& subsystem, storm::storage::BitVector const& initialStates,
91 bool computeResultsForInitialStatesOnly, std::vector<ValueType>& values,
92 boost::optional<std::vector<ValueType>>& additionalStateValues,
93 boost::optional<std::vector<uint_fast64_t>> const& distanceBasedPriorities);
94
95 static void performOrdinaryStateElimination(storm::storage::FlexibleSparseMatrix<ValueType>& transitionMatrix,
97 storm::storage::BitVector const& subsystem, storm::storage::BitVector const& initialStates,
98 bool computeResultsForInitialStatesOnly, std::vector<ValueType>& values,
99 boost::optional<std::vector<uint_fast64_t>> const& distanceBasedPriorities);
100
101 static uint_fast64_t performHybridStateElimination(storm::storage::SparseMatrix<ValueType> const& forwardTransitions,
104 storm::storage::BitVector const& subsystem, storm::storage::BitVector const& initialStates,
105 bool computeResultsForInitialStatesOnly, std::vector<ValueType>& values,
106 boost::optional<std::vector<uint_fast64_t>> const& distanceBasedPriorities);
107
108 static uint_fast64_t treatScc(storm::storage::FlexibleSparseMatrix<ValueType>& matrix, std::vector<ValueType>& values,
109 storm::storage::BitVector const& entryStates, storm::storage::BitVector const& scc,
110 storm::storage::BitVector const& initialStates, storm::storage::SparseMatrix<ValueType> const& forwardTransitions,
111 storm::storage::FlexibleSparseMatrix<ValueType>& backwardTransitions, bool eliminateEntryStates, uint_fast64_t level,
112 uint_fast64_t maximalSccSize, std::vector<storm::storage::sparse::state_type>& entryStateQueue,
113 bool computeResultsForInitialStatesOnly,
114 boost::optional<std::vector<uint_fast64_t>> const& distanceBasedPriorities = boost::none);
115
116 static bool checkConsistent(storm::storage::FlexibleSparseMatrix<ValueType>& transitionMatrix,
118};
119
120} // namespace modelchecker
121} // namespace storm
virtual std::unique_ptr< CheckResult > computeBoundedUntilProbabilities(Environment const &env, CheckTask< storm::logic::BoundedUntilFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeUntilProbabilities(Environment const &env, CheckTask< storm::logic::UntilFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeLongRunAverageRewards(Environment const &env, CheckTask< storm::logic::LongRunAverageRewardFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeLongRunAverageProbabilities(Environment const &env, CheckTask< storm::logic::StateFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeReachabilityRewards(Environment const &env, CheckTask< storm::logic::EventuallyFormula, ValueType > const &checkTask) override
storm::storage::FlexibleSparseMatrix< ValueType >::row_type FlexibleRowType
virtual std::unique_ptr< CheckResult > computeConditionalProbabilities(Environment const &env, CheckTask< storm::logic::ConditionalFormula, ValueType > const &checkTask) override
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
This class represents a discrete-time Markov chain.
Definition Dtmc.h:14
A bit vector that is internally represented as a vector of 64-bit values.
Definition BitVector.h:18
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.
LabParser.cpp.
Definition cli.cpp:18