13template<storm::dd::DdType Type,
typename ValueType>
18 std::set<storm::expressions::Variable>
const& columnVariables,
19 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>>
const& rowColumnMetaVariablePairs,
20 std::set<storm::expressions::Variable>
const& nondeterminismVariables, std::map<std::string, storm::expressions::Expression> labelToExpressionMap,
21 std::unordered_map<std::string, RewardModelType>
const& rewardModels)
23 transitionMatrix, rowVariables, rowExpressionAdapter, columnVariables, rowColumnMetaVariablePairs,
24 nondeterminismVariables, labelToExpressionMap, rewardModels),
25 markovianMarker(markovianMarker) {
27 computeMarkovianChoicesAndStates();
28 convertToExitRatesAndProbabilities();
31template<storm::dd::DdType Type,
typename ValueType>
35 std::set<storm::expressions::Variable>
const& rowVariables, std::set<storm::expressions::Variable>
const& columnVariables,
36 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>>
const& rowColumnMetaVariablePairs,
37 std::set<storm::expressions::Variable>
const& nondeterminismVariables, std::map<std::string,
storm::dd::Bdd<Type>> labelToBddMap,
40 transitionMatrix, rowVariables, columnVariables, rowColumnMetaVariablePairs, nondeterminismVariables,
41 labelToBddMap, rewardModels),
42 markovianMarker(markovianMarker) {
43 computeMarkovianChoicesAndStates();
46 this->exitRateVector = std::move(exitRateVector).value();
49 convertToExitRatesAndProbabilities();
53template<storm::dd::DdType Type,
typename ValueType>
54void MarkovAutomaton<Type, ValueType>::computeMarkovianChoicesAndStates() {
59 std::set<storm::expressions::Variable> columnAndNondeterminsmVariables;
60 std::set_union(this->getColumnVariables().begin(), this->getColumnVariables().end(), this->getNondeterminismVariables().begin(),
61 this->getNondeterminismVariables().end(), std::inserter(columnAndNondeterminsmVariables, columnAndNondeterminsmVariables.begin()));
65 this->markovianStates = markovianChoices.existsAbstract(columnAndNondeterminsmVariables);
68template<storm::dd::DdType Type,
typename ValueType>
69void MarkovAutomaton<Type, ValueType>::convertToExitRatesAndProbabilities() {
70 std::set<storm::expressions::Variable> columnAndNondeterminsmVariables;
71 std::set_union(this->getColumnVariables().begin(), this->getColumnVariables().end(), this->getNondeterminismVariables().begin(),
72 this->getNondeterminismVariables().end(), std::inserter(columnAndNondeterminsmVariables, columnAndNondeterminsmVariables.begin()));
75 this->exitRateVector = (this->getTransitionMatrix() * this->markovianMarker.template toAdd<ValueType>()).sumAbstract(columnAndNondeterminsmVariables);
79 this->transitionMatrix = this->transitionMatrix / this->markovianChoices.ite(this->exitRateVector, this->getManager().
template getAddOne<ValueType>());
82template<storm::dd::DdType Type,
typename ValueType>
84 return this->markovianMarker;
87template<storm::dd::DdType Type,
typename ValueType>
89 return this->markovianStates;
92template<storm::dd::DdType Type,
typename ValueType>
94 return this->markovianChoices;
97template<storm::dd::DdType Type,
typename ValueType>
99 return this->markovianStates;
102template<storm::dd::DdType Type,
typename ValueType>
104 return !(this->probabilisticStates && this->markovianStates).isZero();
107template<storm::dd::DdType Type,
typename ValueType>
112template<storm::dd::DdType Type,
typename ValueType>
124template<storm::dd::DdType Type,
typename ValueType>
126 return this->exitRateVector;
129template<storm::dd::DdType Type,
typename ValueType>
130template<
typename NewValueType>
133 std::unordered_map<std::string, NewRewardModelType> newRewardModels;
140 newLabelToBddMap.erase(
"init");
141 newLabelToBddMap.erase(
"deadlock");
144 newLabelToBddMap.emplace(labelExpressionPair.first, this->getStates(labelExpressionPair.first));
147 return std::make_shared<MarkovAutomaton<Type, NewValueType>>(
This class represents a discrete-time Markov decision process.
storm::dd::Bdd< Type > const & getProbabilisticStates() const
MarkovAutomaton< Type, ValueType > close()
storm::dd::Bdd< Type > const & getMarkovianStates() const
bool hasHybridStates() const
MarkovAutomaton(MarkovAutomaton< Type, ValueType > const &other)=default
storm::dd::Bdd< Type > const & getMarkovianMarker() const
std::shared_ptr< MarkovAutomaton< Type, NewValueType > > toValueType() const
storm::dd::Add< Type, ValueType > const & getExitRateVector() const
storm::dd::Bdd< Type > const & getMarkovianChoices() const
storm::dd::Add< Type, ValueType > const & getTransitionMatrix() const
storm::dd::Bdd< Type > const & getDeadlockStates() const
std::shared_ptr< storm::adapters::AddExpressionAdapter< Type, ValueType > > const & getRowExpressionAdapter() const
std::set< storm::expressions::Variable > const & getColumnVariables() const
std::shared_ptr< storm::dd::DdManager< Type > > const & getManagerAsSharedPointer() const
std::map< std::string, storm::dd::Bdd< Type > > const & getLabelToBddMap() const
storm::dd::Bdd< Type > const & getInitialStates() const
storm::dd::Add< Type, ValueType > transitionMatrix
std::vector< std::pair< storm::expressions::Variable, storm::expressions::Variable > > const & getRowColumnMetaVariablePairs() const
std::set< storm::expressions::Variable > const & getRowVariables() const
std::map< std::string, storm::expressions::Expression > const & getLabelToExpressionMap() const
std::unordered_map< std::string, RewardModelType > & getRewardModels()
storm::dd::Bdd< Type > const & getReachableStates() const
virtual std::set< storm::expressions::Variable > const & getNondeterminismVariables() const override
Model< Type, ValueType >::RewardModelType RewardModelType
NondeterministicModel(NondeterministicModel< Type, double > const &other)=default
storm::dd::Bdd< Type > Model< Type, ValueType >::getQualitativeTransitionMatrix(bool) const