6template<
typename ValueType,
typename RewardModelType>
11 "The model has multiple initial states. This simulator assumes it starts from the initial state with the lowest index.");
14 for (
auto const& rewModPair :
model.getRewardModels()) {
15 if (rewModPair.second.hasStateRewards()) {
22template<
typename ValueType,
typename RewardModelType>
27template<
typename ValueType,
typename RewardModelType>
36template<
typename ValueType,
typename RewardModelType>
41 ValueType probability =
generator.random();
43 uint64_t row =
model.getTransitionMatrix().getRowGroupIndices()[
currentState] + action;
45 for (
auto const& rewModPair :
model.getRewardModels()) {
46 if (rewModPair.second.hasStateActionRewards()) {
47 lastRewards[i] += rewModPair.second.getStateActionReward(row);
52 for (
auto const& entry :
model.getTransitionMatrix().getRow(row)) {
53 sum += entry.getValue();
54 if (sum >= probability) {
57 for (
auto const& rewModPair :
model.getRewardModels()) {
58 if (rewModPair.second.hasStateRewards()) {
70template<
typename ValueType,
typename RewardModelType>
75template<
typename ValueType,
typename RewardModelType>
80 for (
auto const& rewModPair :
model.getRewardModels()) {
81 if (rewModPair.second.hasStateRewards()) {
89template<
typename ValueType,
typename RewardModelType>
Base class for all sparse models.
This class is a low-level interface to quickly sample from Discrete-Time Models stored explicitly as ...
uint64_t getCurrentState() const
std::vector< ValueType > const & getLastRewards() const
bool step(uint64_t action)
storm::models::sparse::Model< ValueType, RewardModelType > const & model
storm::utility::RandomProbabilityGenerator< ValueType > generator
std::vector< ValueType > lastRewards
DiscreteTimeSparseModelSimulator(storm::models::sparse::Model< ValueType, RewardModelType > const &model)
std::vector< ValueType > zeroRewards
#define STORM_LOG_ASSERT(cond, message)
#define STORM_LOG_WARN_COND(cond, message)