1 #ifndef AI_TOOLBOX_OLD_POMDP_MODEL_HEADER_FILE
2 #define AI_TOOLBOX_OLD_POMDP_MODEL_HEADER_FILE
62 template <AIToolbox::MDP::IsModel M>
77 template <
typename... Args>
127 template <
typename PM>
128 requires AIToolbox::POMDP::IsModel<PM> && std::constructible_from<M, PM>
148 template <AIToolbox::IsNaive3DMatrix ObFun>
170 std::tuple<size_t,size_t, double>
sampleSOR(
size_t s,
size_t a)
const;
188 std::tuple<size_t, double>
sampleOR(
size_t s,
size_t a,
size_t s1)
const;
223 template <AIToolbox::MDP::IsModel M>
224 template <
typename... Args>
228 for (
size_t s = 0; s < this->getS(); ++s )
229 for (
size_t a = 0; a < this->getA(); ++a )
230 observations_[s][a][0] = 1.0;
233 template <AIToolbox::MDP::IsModel M>
235 OldPOMDPModel<M>::OldPOMDPModel(
size_t o, ObFun && of, Args&&... params) : M(std::forward<Args>(params)...), O(o), observations_(boost::extents[this->getS()][this->getA()][O]),
241 template <AIToolbox::MDP::IsModel M>
242 template <
typename PM>
243 requires AIToolbox::POMDP::IsModel<PM> && std::constructible_from<M, PM>
247 for (
size_t s1 = 0; s1 < this->getS(); ++s1 )
248 for (
size_t a = 0; a < this->getA(); ++a ) {
249 for (
size_t o = 0; o < O; ++o ) {
250 observations_[s1][a][o] = model.getObservationProbability(s1, a, o);
252 if ( !
AIToolbox::isProbability(O, observations_[s1][a]) )
throw std::invalid_argument(
"Input observation matrix does not contain valid probabilities.");
256 template <AIToolbox::MDP::IsModel M>
257 template <AIToolbox::IsNaive3DMatrix ObFun>
259 for (
size_t s1 = 0; s1 < this->getS(); ++s1 )
260 for (
size_t a = 0; a < this->getA(); ++a )
261 if ( !
AIToolbox::isProbability(O, of[s1][a]) )
throw std::invalid_argument(
"Input observation matrix does not contain valid probabilities.");
263 copyDumb3D(of, observations_, this->getS(), this->getA(), O);
266 template <AIToolbox::MDP::IsModel M>
268 return observations_[s1][a][o];
271 template <AIToolbox::MDP::IsModel M>
276 template <AIToolbox::MDP::IsModel M>
278 return observations_;
281 template <AIToolbox::MDP::IsModel M>
286 std::tie(s1, r) = this->sampleSR(s, a);
289 return std::make_tuple(s1, o, r);
292 template <AIToolbox::MDP::IsModel M>
295 double r = this->getExpectedReward(s, a, s1);
296 return std::make_tuple(o, r);