AIToolbox
A library that offers tools for AI problem solving.
IO.hpp
Go to the documentation of this file.
1 #ifndef AI_TOOLBOX_POMDP_IO_HEADER_FILE
2 #define AI_TOOLBOX_POMDP_IO_HEADER_FILE
3 
4 #include <iostream>
5 #include <iomanip>
6 
7 #include <AIToolbox/Utils/IO.hpp>
8 #include <AIToolbox/MDP/IO.hpp>
9 
10 #include <AIToolbox/MDP/Model.hpp>
16 
17 #include <AIToolbox/Logging.hpp>
18 
19 namespace AIToolbox::POMDP {
30  Model<MDP::Model> parseCassandra(std::istream & input);
31 
41  template <IsModelEigen M>
42  std::ostream& operator<<(std::ostream &os, const M & model) {
43  // First print the MDP part
44  MDP::operator<<(os, model);
45 
46  write(os, model.getObservationFunction());
47  return os;
48  }
49 
61  template <MDP::IsModel M>
62  std::istream& operator>>(std::istream &is, Model<M> & m) {
63  Model<M> in(m.getO(), m.getS(), m.getA());
64 
65  if (!MDP::operator>>(is, in)) {
66  AI_LOGGER(AI_SEVERITY_ERROR, "Could not read underlying MDP for POMDP Model.");
67  return is;
68  }
69 
70  auto observations = in.getObservationFunction();
71  if (!read(is, observations)) {
72  AI_LOGGER(AI_SEVERITY_ERROR, "Could not read Model<M> observation function.");
73  return is;
74  } else {
75  try {
76  in.setObservationFunction(observations);
77  } catch (const std::invalid_argument &) {
78  AI_LOGGER(AI_SEVERITY_ERROR, "The observation function for Model<M> did not contain valid probabilities.");
79  is.setstate(std::ios::failbit);
80  return is;
81  }
82  }
83 
84  m = std::move(in);
85 
86  return is;
87  }
88 
101  template <MDP::IsModel M>
102  std::istream& operator>>(std::istream &is, SparseModel<M> & m) {
103  SparseModel<M> in(m.getO(), m.getS(), m.getA());
104 
105  if (!MDP::operator>>(is, in)) {
106  AI_LOGGER(AI_SEVERITY_ERROR, "Could not read underlying MDP for POMDP Model.");
107  return is;
108  }
109 
110  auto observations = in.getObservationFunction();
111  if (!read(is, observations)) {
112  AI_LOGGER(AI_SEVERITY_ERROR, "Could not read SparseModel<M> observation function.");
113  return is;
114  } else {
115  try {
116  in.setObservationFunction(observations);
117  } catch (const std::invalid_argument &) {
118  AI_LOGGER(AI_SEVERITY_ERROR, "The observation function for SparseModel<M> did not contain valid probabilities.");
119  is.setstate(std::ios::failbit);
120  return is;
121  }
122  }
123 
124  m = std::move(in);
125 
126  return is;
127  }
128 
137  std::ostream& operator<<(std::ostream &os, const Policy & p);
138 
153  std::istream& operator>>(std::istream &is, Policy & p);
154 }
155 
156 #endif
AIToolbox::POMDP
Definition: AMDP.hpp:14
Model.hpp
SparseModel.hpp
IO.hpp
AIToolbox::POMDP::Model::getO
size_t getO() const
This function returns the number of observations possible.
Definition: Model.hpp:350
AIToolbox::POMDP::operator<<
std::ostream & operator<<(std::ostream &os, const M &model)
This function outputs a POMDP model to a stream.
Definition: IO.hpp:42
Model.hpp
AIToolbox::POMDP::SparseModel::getO
size_t getO() const
This function returns the number of observations possible.
Definition: SparseModel.hpp:386
AIToolbox::read
std::istream & read(std::istream &is, Vector &v)
TypeTraits.hpp
AIToolbox::POMDP::SparseModel::getObservationFunction
const SparseMatrix2D & getObservationFunction(size_t a) const
This function returns the observation function for a given action.
Definition: SparseModel.hpp:381
AI_SEVERITY_ERROR
#define AI_SEVERITY_ERROR
Definition: Logging.hpp:71
AIToolbox::POMDP::SparseModel
This class represents a Partially Observable Markov Decision Process.
Definition: SparseModel.hpp:16
AIToolbox::POMDP::Model
This class represents a Partially Observable Markov Decision Process.
Definition: Model.hpp:15
IO.hpp
AIToolbox::POMDP::Model::getObservationFunction
const Matrix2D & getObservationFunction(size_t a) const
This function returns the observation function for a given action.
Definition: Model.hpp:345
Types.hpp
AIToolbox::MDP::operator<<
std::ostream & operator<<(std::ostream &os, const Model &model)
AIToolbox::POMDP::parseCassandra
Model< MDP::Model > parseCassandra(std::istream &input)
This function parses a POMDP from a Cassandra formatted stream.
AIToolbox::POMDP::Model::setObservationFunction
void setObservationFunction(const ObFun &of)
This function replaces the Model observation function with the one provided.
Definition: Model.hpp:319
Policy.hpp
AIToolbox::POMDP::SparseModel::setObservationFunction
void setObservationFunction(const ObFun &of)
This function replaces the SparseModel observation function with the one provided.
Definition: SparseModel.hpp:347
Logging.hpp
AI_LOGGER
#define AI_LOGGER(SEV, ARGS)
Definition: Logging.hpp:114
AIToolbox::write
std::ostream & write(std::ostream &os, double d)
AIToolbox::POMDP::operator>>
std::istream & operator>>(std::istream &is, Model< M > &m)
This function parses a Model from a stream.
Definition: IO.hpp:62