Storm
A Modern Probabilistic Model Checker
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
MultiValueStateEliminator.cpp
Go to the documentation of this file.
2
5
6namespace storm {
7namespace solver {
8namespace stateelimination {
9
10template<typename ValueType>
13 PriorityQueuePointer priorityQueue, std::vector<ValueType>& stateValues,
14 std::vector<ValueType>& additionalStateValuesVector)
15 : PrioritizedStateEliminator<ValueType>(transitionMatrix, backwardTransitions, priorityQueue, stateValues),
16 additionalStateValues({std::ref(additionalStateValuesVector)}) {}
17
18template<typename ValueType>
21 std::vector<storm::storage::sparse::state_type> const& statesToEliminate,
22 std::vector<ValueType>& stateValues, std::vector<ValueType>& additionalStateValuesVector)
23 : PrioritizedStateEliminator<ValueType>(transitionMatrix, backwardTransitions, statesToEliminate, stateValues),
24 additionalStateValues({std::ref(additionalStateValuesVector)}) {}
25
26template<typename ValueType>
28 this->stateValues[state] = storm::utility::simplify((ValueType)(loopProbability * this->stateValues[state]));
29 for (auto additionalStateValueVectorRef : additionalStateValues) {
30 additionalStateValueVectorRef.get()[state] = storm::utility::simplify((ValueType)(loopProbability * additionalStateValueVectorRef.get()[state]));
31 }
32}
33
34template<typename ValueType>
37 this->stateValues[predecessor] =
38 storm::utility::simplify((ValueType)(this->stateValues[predecessor] + storm::utility::simplify((ValueType)(probability * this->stateValues[state]))));
39 for (auto additionalStateValueVectorRef : additionalStateValues) {
40 additionalStateValueVectorRef.get()[predecessor] =
41 storm::utility::simplify((ValueType)(additionalStateValueVectorRef.get()[predecessor] +
42 storm::utility::simplify((ValueType)(probability * additionalStateValueVectorRef.get()[state]))));
43 }
44}
45
46template<typename ValueType>
48 super::clearStateValues(state);
49 for (auto additionStateValueVectorRef : additionalStateValues) {
50 additionStateValueVectorRef.get()[state] = storm::utility::zero<ValueType>();
51 }
52}
53
55
56#ifdef STORM_HAVE_CARL
59#endif
60} // namespace stateelimination
61} // namespace solver
62} // namespace storm
void updatePredecessor(storm::storage::sparse::state_type const &predecessor, ValueType const &probability, storm::storage::sparse::state_type const &state) override
MultiValueStateEliminator(storm::storage::FlexibleSparseMatrix< ValueType > &transitionMatrix, storm::storage::FlexibleSparseMatrix< ValueType > &backwardTransitions, PriorityQueuePointer priorityQueue, std::vector< ValueType > &stateValues, std::vector< ValueType > &additionalStateValues)
virtual void clearStateValues(storm::storage::sparse::state_type const &state) override
void updateValue(storm::storage::sparse::state_type const &state, ValueType const &loopProbability) override
The flexible sparse matrix is used during state elimination.
ValueType simplify(ValueType value)
LabParser.cpp.
Definition cli.cpp:18