From f68120639399c1253f63872eae77b2434b5c24db Mon Sep 17 00:00:00 2001 From: TimQu Date: Wed, 29 Jun 2016 16:49:56 +0200 Subject: [PATCH] building markov automata from prism code Former-commit-id: 791c49c7cf4c2c0ab467afdd1ee3fcdc87433294 --- src/builder/ExplicitModelBuilder.cpp | 70 +++++++++++++++++-- src/builder/ExplicitModelBuilder.h | 19 ++++- src/generator/PrismNextStateGenerator.cpp | 4 +- src/models/sparse/MarkovAutomaton.cpp | 51 +++++++++++--- src/models/sparse/MarkovAutomaton.h | 41 ++++++++++- src/storage/BitVector.cpp | 10 +++ src/storage/BitVector.h | 11 +++ src/storage/SparseMatrix.cpp | 64 +++++++++++++++++ src/storage/SparseMatrix.h | 8 +++ src/utility/ModelInstantiator.h | 2 +- .../builder/ExplicitPrismModelBuilderTest.cpp | 26 +++++++ test/functional/builder/hybrid_states.ma | 19 +++++ test/functional/builder/simple.ma | 15 ++++ test/functional/builder/stream2.ma | 50 +++++++++++++ 14 files changed, 369 insertions(+), 21 deletions(-) create mode 100644 test/functional/builder/hybrid_states.ma create mode 100644 test/functional/builder/simple.ma create mode 100644 test/functional/builder/stream2.ma diff --git a/src/builder/ExplicitModelBuilder.cpp b/src/builder/ExplicitModelBuilder.cpp index f008321ee..aaa000000 100644 --- a/src/builder/ExplicitModelBuilder.cpp +++ b/src/builder/ExplicitModelBuilder.cpp @@ -5,6 +5,7 @@ #include "src/models/sparse/Dtmc.h" #include "src/models/sparse/Ctmc.h" #include "src/models/sparse/Mdp.h" +#include "src/models/sparse/MarkovAutomaton.h" #include "src/models/sparse/StandardRewardModel.h" #include "src/storage/expressions/ExpressionManager.h" @@ -133,6 +134,9 @@ namespace storm { case storm::generator::ModelType::MDP: result = std::shared_ptr>(new storm::models::sparse::Mdp(std::move(modelComponents.transitionMatrix), std::move(modelComponents.stateLabeling), std::move(modelComponents.rewardModels), std::move(modelComponents.choiceLabeling))); break; + case storm::generator::ModelType::MA: + result = std::shared_ptr>(new storm::models::sparse::MarkovAutomaton(std::move(modelComponents.transitionMatrix), std::move(modelComponents.stateLabeling), *std::move(modelComponents.markovianStates), std::move(modelComponents.rewardModels), std::move(modelComponents.choiceLabeling))); + break; default: STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error while creating model: cannot handle this model type."); break; @@ -165,12 +169,17 @@ namespace storm { } template - boost::optional>> ExplicitModelBuilder::buildMatrices(storm::storage::SparseMatrixBuilder& transitionMatrixBuilder, std::vector>& rewardModelBuilders) { + void ExplicitModelBuilder::buildMatrices(storm::storage::SparseMatrixBuilder& transitionMatrixBuilder, std::vector>& rewardMode