dehnert
9 years ago
10 changed files with 172 additions and 29 deletions
-
6src/models/symbolic/Model.h
-
2src/storage/expressions/Expression.cpp
-
16src/storage/expressions/Expression.h
-
8src/storage/prism/menu_games/AbstractProgram.cpp
-
9src/storage/prism/menu_games/AbstractProgram.h
-
1src/storage/prism/menu_games/AbstractionDdInformation.cpp
-
4src/storage/prism/menu_games/AbstractionDdInformation.h
-
53src/storage/prism/menu_games/MenuGame.cpp
-
78src/storage/prism/menu_games/MenuGame.h
-
24test/functional/abstraction/PrismMenuGameTest.cpp
@ -0,0 +1,53 @@ |
|||
#include "src/storage/prism/menu_games/MenuGame.h"
|
|||
|
|||
#include "src/exceptions/InvalidOperationException.h"
|
|||
#include "src/exceptions/InvalidArgumentException.h"
|
|||
|
|||
#include "src/storage/dd/CuddBdd.h"
|
|||
#include "src/storage/dd/CuddAdd.h"
|
|||
|
|||
#include "src/models/symbolic/StandardRewardModel.h"
|
|||
|
|||
namespace storm { |
|||
namespace prism { |
|||
namespace menu_games { |
|||
|
|||
template<storm::dd::DdType Type> |
|||
MenuGame<Type>::MenuGame(std::shared_ptr<storm::dd::DdManager<Type>> manager, |
|||
storm::dd::Bdd<Type> reachableStates, |
|||
storm::dd::Bdd<Type> initialStates, |
|||
storm::dd::Add<Type> transitionMatrix, |
|||
std::set<storm::expressions::Variable> const& rowVariables, |
|||
std::set<storm::expressions::Variable> const& columnVariables, |
|||
std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs, |
|||
std::set<storm::expressions::Variable> const& player1Variables, |
|||
std::set<storm::expressions::Variable> const& player2Variables, |
|||
std::set<storm::expressions::Variable> const& allNondeterminismVariables, |
|||
storm::expressions::Variable const& updateVariable, |
|||
std::map<storm::expressions::Expression, storm::dd::Bdd<Type>> const& expressionToBddMap) : storm::models::symbolic::StochasticTwoPlayerGame<Type>(manager, reachableStates, initialStates, transitionMatrix, rowVariables, nullptr, columnVariables, nullptr, rowColumnMetaVariablePairs, player1Variables, player2Variables, allNondeterminismVariables), updateVariable(updateVariable), expressionToBddMap(expressionToBddMap) { |
|||
// Intentionally left empty.
|
|||
} |
|||
|
|||
template<storm::dd::DdType Type> |
|||
storm::dd::Bdd<Type> MenuGame<Type>::getStates(std::string const& label) const { |
|||
STORM_LOG_THROW(false, storm::exceptions::InvalidOperationException, "Menu games do not provide labels."); |
|||
} |
|||
|
|||
template<storm::dd::DdType Type> |
|||
storm::dd::Bdd<Type> MenuGame<Type>::getStates(storm::expressions::Expression const& expression) const { |
|||
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."); |
|||
return it->second && this->getReachableStates(); |
|||
} |
|||
|
|||
template<storm::dd::DdType Type> |
|||
bool MenuGame<Type>::hasLabel(std::string const& label) const { |
|||
return false; |
|||
} |
|||
|
|||
template class MenuGame<storm::dd::DdType::CUDD>; |
|||
|
|||
} // namespace menu_games
|
|||
} // namespace prism
|
|||
} // namespace storm
|
|||
|
@ -0,0 +1,78 @@ |
|||
#ifndef STORM_PRISM_MENU_GAMES_MENUGAME_H_ |
|||
#define STORM_PRISM_MENU_GAMES_MENUGAME_H_ |
|||
|
|||
#include <map> |
|||
|
|||
#include "src/models/symbolic/StochasticTwoPlayerGame.h" |
|||
|
|||
#include "src/utility/OsDetection.h" |
|||
|
|||
namespace storm { |
|||
namespace prism { |
|||
namespace menu_games { |
|||
|
|||
/*! |
|||
* This class represents a discrete-time stochastic two-player game. |
|||
*/ |
|||
template<storm::dd::DdType Type> |
|||
class MenuGame : public storm::models::symbolic::StochasticTwoPlayerGame<Type> { |
|||
public: |
|||
typedef typename storm::models::symbolic::StochasticTwoPlayerGame<Type>::RewardModelType RewardModelType; |
|||
|
|||
MenuGame(MenuGame<Type> const& other) = default; |
|||
MenuGame& operator=(MenuGame<Type> const& other) = default; |
|||
|
|||
#ifndef WINDOWS |
|||
MenuGame(MenuGame<Type>&& other) = default; |
|||
MenuGame& operator=(MenuGame<Type>&& other) = default; |
|||
#endif |
|||
|
|||
/*! |
|||
* Constructs a model from the given data. |
|||
* |
|||
* @param manager The manager responsible for the decision diagrams. |
|||
* @param reachableStates A DD representing the reachable states. |
|||
* @param initialStates A DD representing the initial states of the model. |
|||
* @param transitionMatrix The matrix representing the transitions in the model. |
|||
* @param rowVariables The set of row meta variables used in the DDs. |
|||
* @param columVariables The set of column meta variables used in the DDs. |
|||
* @param rowColumnMetaVariablePairs All pairs of row/column meta variables. |
|||
* @param player1Variables The meta variables used to encode the nondeterministic choices of player 1. |
|||
* @param player2Variables The meta variables used to encode the nondeterministic choices of player 2. |
|||
* @param allNondeterminismVariables The meta variables used to encode the nondeterminism in the model. |
|||
* @param updateVariable The variable used to encode the different updates of the probabilistic program. |
|||
* @param expressionToBddMap A mapping from expressions (used) in the abstraction to the BDDs encoding |
|||
* them. |
|||
*/ |
|||
MenuGame(std::shared_ptr<storm::dd::DdManager<Type>> manager, |
|||
storm::dd::Bdd<Type> reachableStates, |
|||
storm::dd::Bdd<Type> initialStates, |
|||
storm::dd::Add<Type> transitionMatrix, |
|||
std::set<storm::expressions::Variable> const& rowVariables, |
|||
std::set<storm::expressions::Variable> const& columnVariables, |
|||
std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs, |
|||
std::set<storm::expressions::Variable> const& player1Variables, |
|||
std::set<storm::expressions::Variable> const& player2Variables, |
|||
std::set<storm::expressions::Variable> const& allNondeterminismVariables, |
|||
storm::expressions::Variable const& updateVariable, |
|||
std::map<storm::expressions::Expression, storm::dd::Bdd<Type>> const& expressionToBddMap); |
|||
|
|||
virtual storm::dd::Bdd<Type> getStates(std::string const& label) const override; |
|||
|
|||
virtual storm::dd::Bdd<Type> getStates(storm::expressions::Expression const& expression) const override; |
|||
|
|||
virtual bool hasLabel(std::string const& label) const override; |
|||
|
|||
private: |
|||
// The meta variable used to encode the updates. |
|||
storm::expressions::Variable updateVariable; |
|||
|
|||
// A mapping from expressions that were used in the abstraction process to the the BDDs representing them. |
|||
std::map<storm::expressions::Expression, storm::dd::Bdd<Type>> expressionToBddMap; |
|||
}; |
|||
|
|||
} // namespace menu_games |
|||
} // namespace prism |
|||
} // namespace storm |
|||
|
|||
#endif /* STORM_PRISM_MENU_GAMES_MENUGAME_H_ */ |
Write
Preview
Loading…
Cancel
Save
Reference in new issue