Browse Source
Added first version of MarkovAutomaton class.
Added first version of MarkovAutomaton class.
Former-commit-id: c211dd9bf4
tempestpy_adaptions
dehnert
11 years ago
1 changed files with 83 additions and 0 deletions
@ -0,0 +1,83 @@ |
|||||
|
/* |
||||
|
* MarkovAutomaton.h |
||||
|
* |
||||
|
* Created on: 07.11.2013 |
||||
|
* Author: Christian Dehnert |
||||
|
*/ |
||||
|
|
||||
|
#ifndef STORM_MODELS_MA_H_ |
||||
|
#define STORM_MODELS_MA_H_ |
||||
|
|
||||
|
#include "AbstractNondeterministicModel.h" |
||||
|
#include "AtomicPropositionsLabeling.h" |
||||
|
#include "src/storage/SparseMatrix.h" |
||||
|
#include "src/exceptions/InvalidArgumentException.h" |
||||
|
#include "src/settings/Settings.h" |
||||
|
#include "src/utility/vector.h" |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace models { |
||||
|
|
||||
|
template <class T> |
||||
|
class MarkovAutomaton : public storm::models::AbstractNondeterministicModel<T> { |
||||
|
|
||||
|
public: |
||||
|
MarkovAutomaton(storm::storage::SparseMatrix<T> const& transitionMatrix, storm::models::AtomicPropositionsLabeling const& stateLabeling, |
||||
|
std::vector<uint_fast64_t>&& nondeterministicChoiceIndices, |
||||
|
storm::storage::BitVector const& markovianChoices, std::vector<T> const& exitRates, |
||||
|
boost::optional<std::vector<T>> const& optionalStateRewardVector, boost::optional<storm::storage::SparseMatrix<T>> const& optionalTransitionRewardMatrix, |
||||
|
boost::optional<std::vector<storm::storage::VectorSet<uint_fast64_t>>> const& optionalChoiceLabeling) |
||||
|
: AbstractNondeterministicModel<T>(transitionMatrix, stateLabeling, nondeterministicChoiceIndices, optionalStateRewardVector, optionalTransitionRewardMatrix, optionalChoiceLabeling), |
||||
|
markovianChoices(markovianChoices), exitRates(exitRates) { |
||||
|
if (this->hasTransitionRewards()) { |
||||
|
if (!this->getTransitionRewardMatrix().isSubmatrixOf(this->getTransitionMatrix())) { |
||||
|
LOG4CPLUS_ERROR(logger, "Transition reward matrix is not a submatrix of the transition matrix, i.e. there are rewards for transitions that do not exist."); |
||||
|
throw storm::exceptions::InvalidArgumentException() << "There are transition rewards for nonexistent transitions."; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
MarkovAutomaton(storm::storage::SparseMatrix<T>&& transitionMatrix, |
||||
|
storm::models::AtomicPropositionsLabeling&& stateLabeling, |
||||
|
std::vector<uint_fast64_t>&& nondeterministicChoiceIndices, |
||||
|
storm::storage::BitVector const& markovianChoices, std::vector<T> const& exitRates, |
||||
|
boost::optional<std::vector<T>>&& optionalStateRewardVector, |
||||
|
boost::optional<storm::storage::SparseMatrix<T>>&& optionalTransitionRewardMatrix, |
||||
|
boost::optional<std::vector<storm::storage::VectorSet<uint_fast64_t>>>&& optionalChoiceLabeling) |
||||
|
// The std::move call must be repeated here because otherwise this calls the copy constructor of the Base Class |
||||
|
: AbstractNondeterministicModel<T>(std::move(transitionMatrix), std::move(stateLabeling), std::move(nondeterministicChoiceIndices), std::move(optionalStateRewardVector), std::move(optionalTransitionRewardMatrix), |
||||
|
std::move(optionalChoiceLabeling)), markovianChoices(std::move(markovianChoices)), exitRates(std::move(exitRates)) { |
||||
|
if (this->hasTransitionRewards()) { |
||||
|
if (!this->getTransitionRewardMatrix().isSubmatrixOf(this->getTransitionMatrix())) { |
||||
|
LOG4CPLUS_ERROR(logger, "Transition reward matrix is not a submatrix of the transition matrix, i.e. there are rewards for transitions that do not exist."); |
||||
|
throw storm::exceptions::InvalidArgumentException() << "There are transition rewards for nonexistent transitions."; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
MarkovAutomaton(MarkovAutomaton<T> const & markovAutomaton) : AbstractNondeterministicModel<T>(markovAutomaton) { |
||||
|
// Intentionally left empty. |
||||
|
} |
||||
|
|
||||
|
MarkovAutomaton(MarkovAutomaton<T>&& markovAutomaton) : AbstractNondeterministicModel<T>(std::move(markovAutomaton)) { |
||||
|
// Intentionally left empty. |
||||
|
} |
||||
|
|
||||
|
~MarkovAutomaton() { |
||||
|
// Intentionally left empty. |
||||
|
} |
||||
|
|
||||
|
storm::models::ModelType getType() const { |
||||
|
return MA; |
||||
|
} |
||||
|
|
||||
|
private: |
||||
|
|
||||
|
std::vector<T> exitRates; |
||||
|
storm::storage::BitVector markovianChoices; |
||||
|
|
||||
|
}; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#endif /* STORM_MODELS_MA_H_ */ |
Write
Preview
Loading…
Cancel
Save
Reference in new issue