#pragma once #include "storm/models/sparse/Mdp.h" #include "storm/models/sparse/StandardRewardModel.h" namespace storm { namespace models { namespace sparse { /*! * This class represents a partially observable Markov decision process. */ template> class Pomdp : public Mdp { public: /*! * Constructs a model from the given data. * * @param transitionMatrix The matrix representing the transitions in the model. * @param stateLabeling The labeling of the states. * @param rewardModels A mapping of reward model names to reward models. */ Pomdp(storm::storage::SparseMatrix const &transitionMatrix, storm::models::sparse::StateLabeling const &stateLabeling, std::unordered_map const &rewardModels = std::unordered_map()); /*! * Constructs a model by moving the given data. * * @param transitionMatrix The matrix representing the transitions in the model. * @param stateLabeling The labeling of the states. * @param rewardModels A mapping of reward model names to reward models. */ Pomdp(storm::storage::SparseMatrix &&transitionMatrix, storm::models::sparse::StateLabeling &&stateLabeling, std::unordered_map &&rewardModels = std::unordered_map()); /*! * Constructs a model from the given data. * * @param components The components for this model. */ Pomdp(storm::storage::sparse::ModelComponents const &components); Pomdp(storm::storage::sparse::ModelComponents &&components); Pomdp(Pomdp const &other) = default; Pomdp &operator=(Pomdp const &other) = default; Pomdp(Pomdp &&other) = default; Pomdp &operator=(Pomdp &&other) = default; virtual void printModelInformationToStream(std::ostream& out) const override; protected: // TODO: consider a bitvector based presentation (depending on our needs). std::vector observations; uint64_t nrObservations; void computeNrObservations(); }; } } }