#include "storm/parser/DeterministicModelParser.h" #include #include #include "storm/models/sparse/StandardRewardModel.h" #include "storm/parser/DeterministicSparseTransitionParser.h" #include "storm/parser/SparseItemLabelingParser.h" #include "storm/parser/SparseStateRewardParser.h" #include "storm/adapters/CarlAdapter.h" namespace storm { namespace parser { template typename DeterministicModelParser::Result DeterministicModelParser::parseDeterministicModel(std::string const& transitionsFilename, std::string const& labelingFilename, std::string const& stateRewardFilename, std::string const& transitionRewardFilename, std::string const& choiceLabelingFilename) { // Parse the transitions. storm::storage::SparseMatrix transitions(std::move(storm::parser::DeterministicSparseTransitionParser::parseDeterministicTransitions(transitionsFilename))); uint_fast64_t stateCount = transitions.getColumnCount(); // Parse the state labeling. storm::models::sparse::StateLabeling labeling(storm::parser::SparseItemLabelingParser::parseAtomicPropositionLabeling(stateCount, labelingFilename)); // Construct the result. DeterministicModelParser::Result result(std::move(transitions), std::move(labeling)); // Only parse state rewards if a file is given. if (stateRewardFilename != "") { result.stateRewards = storm::parser::SparseStateRewardParser::parseSparseStateReward(stateCount, stateRewardFilename); } // Only parse transition rewards if a file is given. if (transitionRewardFilename != "") { result.transitionRewards = storm::parser::DeterministicSparseTransitionParser::parseDeterministicTransitionRewards(transitionRewardFilename, result.transitionSystem); } // Only parse choice labeling if a file is given. boost::optional choiceLabeling; if (!choiceLabelingFilename.empty()) { result.choiceLabeling = storm::parser::SparseItemLabelingParser::parseChoiceLabeling(result.transitionSystem.getRowCount(), choiceLabelingFilename); } return result; } template storm::models::sparse::Dtmc> DeterministicModelParser::parseDtmc(std::string const & transitionsFilename, std::string const & labelingFilename, std::string const& stateRewardFilename, std::string const& transitionRewardFilename, std::string const& choiceLabelingFilename) { typename DeterministicModelParser::Result parserResult(std::move(parseDeterministicModel(transitionsFilename, labelingFilename, stateRewardFilename, transitionRewardFilename, choiceLabelingFilename))); std::unordered_map> rewardModels; if (!stateRewardFilename.empty() || !transitionRewardFilename.empty()) { rewardModels.insert(std::make_pair("", storm::models::sparse::StandardRewardModel(parserResult.stateRewards, boost::optional>(), parserResult.transitionRewards))); } return storm::models::sparse::Dtmc>(std::move(parserResult.transitionSystem), std::move(parserResult.labeling), std::move(rewardModels), std::move(parserResult.choiceLabeling)); } template storm::models::sparse::Ctmc> DeterministicModelParser::parseCtmc(std::string const& transitionsFilename, std::string const& labelingFilename, std::string const& stateRewardFilename, std::string const& transitionRewardFilename, std::string const& choiceLabelingFilename) { typename DeterministicModelParser::Result parserResult(std::move(parseDeterministicModel(transitionsFilename, labelingFilename, stateRewardFilename, transitionRewardFilename, choiceLabelingFilename))); std::unordered_map> rewardModels; if (!stateRewardFilename.empty() || !transitionRewardFilename.empty()) { rewardModels.insert(std::make_pair("", storm::models::sparse::StandardRewardModel(parserResult.stateRewards, boost::optional>(), parserResult.transitionRewards))); } return storm::models::sparse::Ctmc>(std::move(parserResult.transitionSystem), std::move(parserResult.labeling), std::move(rewardModels), std::move(parserResult.choiceLabeling)); } template class DeterministicModelParser; #ifdef STORM_HAVE_CARL template class DeterministicModelParser; #endif } /* namespace parser */ } /* namespace storm */