#include "src/abstraction/MenuGame.h" #include "src/exceptions/InvalidOperationException.h" #include "src/exceptions/InvalidArgumentException.h" #include "src/storage/dd/Bdd.h" #include "src/storage/dd/Add.h" #include "src/storage/dd/DdManager.h" #include "src/models/symbolic/StandardRewardModel.h" #include "storm-config.h" #include "src/adapters/CarlAdapter.h" namespace storm { namespace abstraction { template MenuGame::MenuGame(std::shared_ptr> manager, storm::dd::Bdd reachableStates, storm::dd::Bdd initialStates, storm::dd::Bdd deadlockStates, storm::dd::Add transitionMatrix, storm::dd::Bdd bottomStates, std::set const& rowVariables, std::set const& columnVariables, std::vector> const& rowColumnMetaVariablePairs, std::set const& player1Variables, std::set const& player2Variables, std::set const& allNondeterminismVariables, std::set const& probabilisticBranchingVariables, std::map> const& expressionToBddMap) : storm::models::symbolic::StochasticTwoPlayerGame(manager, reachableStates, initialStates, deadlockStates, transitionMatrix.sumAbstract(probabilisticBranchingVariables), rowVariables, nullptr, columnVariables, nullptr, rowColumnMetaVariablePairs, player1Variables, player2Variables, allNondeterminismVariables), extendedTransitionMatrix(transitionMatrix), probabilisticBranchingVariables(probabilisticBranchingVariables), expressionToBddMap(expressionToBddMap), bottomStates(bottomStates) { // Intentionally left empty. } template storm::dd::Bdd MenuGame::getStates(std::string const& label) const { STORM_LOG_THROW(false, storm::exceptions::InvalidOperationException, "Menu games do not provide labels."); } template storm::dd::Bdd MenuGame::getStates(storm::expressions::Expression const& expression) const { return this->getStates(expression, false); } template storm::dd::Bdd MenuGame::getStates(storm::expressions::Expression const& expression, bool negated) const { if (expression.isTrue()) { return this->getReachableStates(); } else if (expression.isFalse()) { return this->getManager().getBddZero(); } auto it = expressionToBddMap.find(expression); STORM_LOG_THROW(it != expressionToBddMap.end(), storm::exceptions::InvalidArgumentException, "The given expression was not used in the abstraction process and can therefore not be retrieved."); if (negated) { return !it->second && this->getReachableStates(); } else { return it->second && this->getReachableStates(); } } template storm::dd::Bdd MenuGame::getBottomStates() const { return bottomStates; } template storm::dd::Add const& MenuGame::getExtendedTransitionMatrix() const { return extendedTransitionMatrix; } template std::set const& MenuGame::getProbabilisticBranchingVariables() const { return probabilisticBranchingVariables; } template bool MenuGame::hasLabel(std::string const& label) const { return false; } template class MenuGame; template class MenuGame; #ifdef STORM_HAVE_CARL template class MenuGame; #endif } }