aGrUM  0.16.0
gum::FMDP< GUM_SCALAR > Class Template Reference

This class is used to implement factored decision process. More...

#include <fmdp.h>

+ Collaboration diagram for gum::FMDP< GUM_SCALAR >:

Public Member Functions

Constructors, Destructors.
 FMDP (bool onDestructionDeleteVar=false)
 Default constructor. More...
 
 ~FMDP ()
 Default destructor. More...
 
Variable Handling Methods.
void addVariable (const DiscreteVariable *var)
 Adds a variable to FMDP description. More...
 
SequenceIteratorSafe< const DiscreteVariable *> beginVariables () const
 Returns an iterator reference to he beginning of the list of variables. More...
 
SequenceIteratorSafe< const DiscreteVariable *> endVariables () const
 Returns an iterator reference to the end of the list of variables. More...
 
const DiscreteVariablemain2prime (const DiscreteVariable *mainVar) const
 Returns the primed variable associate to the given main variable. More...
 
INLINE const Bijection< const DiscreteVariable *, const DiscreteVariable *> & mapMainPrime () const
 Returns the map binding main variables and prime variables. More...
 
Action Handling Methods.
void addAction (Idx actionId, const std::string &action)
 Adds an action to FMDP description. More...
 
SequenceIteratorSafe< IdxbeginActions () const
 Returns an iterator reference to he beginning of the list of actions. More...
 
SequenceIteratorSafe< IdxendActions () const
 Returns an iterator reference to the end of the list of actions. More...
 
Transition methods.
void addTransitionForAction (Idx actionId, const DiscreteVariable *var, const MultiDimImplementation< GUM_SCALAR > *transition)
 Adds a variable transition table to specified action. More...
 
void addTransition (const DiscreteVariable *var, const MultiDimImplementation< GUM_SCALAR > *transition)
 Adds a default variable transition. More...
 
const MultiDimImplementation< GUM_SCALAR > * transition (Idx actionId, const DiscreteVariable *v) const
 Returns transition associated to given in parameter variable and the given action. More...
 
Cost methods.
void addCostForAction (Idx actionId, const MultiDimImplementation< GUM_SCALAR > *cost)
 Adds a cost table to specified action. More...
 
void addCost (const MultiDimImplementation< GUM_SCALAR > *cost)
 Adds a default variable cost. More...
 
const MultiDimImplementation< GUM_SCALAR > * cost (Idx actionId=0) const
 Returns the reward table of mdp. More...
 
Reward methods.
void addRewardForAction (Idx actionId, const MultiDimImplementation< GUM_SCALAR > *reward)
 Adds a default variable reward. More...
 
void addReward (const MultiDimImplementation< GUM_SCALAR > *reward)
 Adds a default variable reward. More...
 
const MultiDimImplementation< GUM_SCALAR > * reward (Idx actionId=0) const
 Returns the reward table of mdp. More...
 
FMPD miscelleanous methods.
const std::string & actionName (Idx actionId) const
 Returns name of action given in parameter. More...
 
Idx actionId (const std::string &) const
 Returns action id. More...
 
std::string toString () const
 Displays the FMDP in a Dot format. More...
 
Size size () const
 Returns the map binding main variables and prime variables. More...
 

Detailed Description

template<typename GUM_SCALAR>
class gum::FMDP< GUM_SCALAR >

This class is used to implement factored decision process.

This class supports a mechanism which allows user to give, for each variable ivolved in the process, a default transition probability table and to describe for specific actions a different table.

Definition at line 57 of file fmdp.h.

Member Typedef Documentation

◆ VarTransitionTable

template<typename GUM_SCALAR>
template<typename GUM_SCALAR_O >
using gum::FMDP< GUM_SCALAR >::VarTransitionTable = HashTable< const DiscreteVariable*, const MultiDimImplementation< GUM_SCALAR_O >* >
private

Definition at line 61 of file fmdp.h.

Constructor & Destructor Documentation

◆ FMDP()

template<typename GUM_SCALAR >
INLINE gum::FMDP< GUM_SCALAR >::FMDP ( bool  onDestructionDeleteVar = false)

Default constructor.

Definition at line 53 of file fmdp_tpl.h.

53  {
54  GUM_CONSTRUCTOR(FMDP);
55  __onDestructionDeleteVars = onDestructionDeleteVar;
56 
57  // Default Action initialisation
58  __actionMap.insert(0, new std::string("DEFAULT"));
59  __actionTransitionTable.insert(0, new VarTransitionTable< GUM_SCALAR >());
60  __actionCostTable.insert(0, nullptr);
61  __actionRewardTable.insert(0, nullptr);
62  }
void insert(const T1 &first, const T2 &second)
Inserts a new association in the gum::Bijection.
bool __onDestructionDeleteVars
Boolean indicates whether or not main variables should be deleted on destruction of this instance Usu...
Definition: fmdp.h:294
HashTable< Idx, VarTransitionTable< GUM_SCALAR > *> __actionTransitionTable
Table which give for each action a table containing variables transition cpt.
Definition: fmdp.h:281
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionCostTable
Table which give for each action cost table.
Definition: fmdp.h:285
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionRewardTable
Table which give for each action reward table.
Definition: fmdp.h:289
FMDP(bool onDestructionDeleteVar=false)
Default constructor.
Definition: fmdp_tpl.h:53
Bijection< Idx, const std::string *> __actionMap
Bijection mapping an action name to its id.
Definition: fmdp.h:277

◆ ~FMDP()

template<typename GUM_SCALAR >
gum::FMDP< GUM_SCALAR >::~FMDP ( )

Default destructor.

Definition at line 68 of file fmdp_tpl.h.

68  {
69  // Action Transition Graph deletion
70  for (auto iterA = __actionTransitionTable.beginSafe();
71  iterA != __actionTransitionTable.endSafe();
72  ++iterA) {
73  if (iterA.val()) {
74  for (auto iterH = (iterA.val())->beginSafe();
75  iterH != (iterA.val())->endSafe();
76  ++iterH)
77  if (iterH.val()) delete iterH.val();
78  delete iterA.val();
79  }
80  }
81 
82  // Action cost graph deletion
83  for (auto iterA = __actionCostTable.beginSafe();
84  iterA != __actionCostTable.endSafe();
85  ++iterA)
86  if (iterA.val()) delete iterA.val();
87 
88  // Action reward graph deletion
89  for (auto iterA = __actionRewardTable.beginSafe();
90  iterA != __actionRewardTable.endSafe();
91  ++iterA)
92  if (iterA.val()) delete iterA.val();
93 
94  // Action Name deletion
95  for (auto iterId = __actionMap.beginSafe(); iterId != __actionMap.endSafe();
96  ++iterId)
97  delete iterId.second();
98 
99  // Primed Variables deletion
100  for (auto varIter = __main2primed.beginSafe();
101  varIter != __main2primed.endSafe();
102  ++varIter) {
103  delete varIter.second();
104  if (__onDestructionDeleteVars) delete varIter.first();
105  }
106 
107  GUM_DESTRUCTOR(FMDP);
108  }
bool __onDestructionDeleteVars
Boolean indicates whether or not main variables should be deleted on destruction of this instance Usu...
Definition: fmdp.h:294
HashTable< Idx, VarTransitionTable< GUM_SCALAR > *> __actionTransitionTable
Table which give for each action a table containing variables transition cpt.
Definition: fmdp.h:281
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionCostTable
Table which give for each action cost table.
Definition: fmdp.h:285
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionRewardTable
Table which give for each action reward table.
Definition: fmdp.h:289
FMDP(bool onDestructionDeleteVar=false)
Default constructor.
Definition: fmdp_tpl.h:53
Bijection< const DiscreteVariable *, const DiscreteVariable *> __main2primed
Mapping from a main variable to its associated primed version.
Definition: fmdp.h:274
iterator_safe beginSafe() const
Returns the safe iterator at the beginning of the gum::Bijection.
Bijection< Idx, const std::string *> __actionMap
Bijection mapping an action name to its id.
Definition: fmdp.h:277
const iterator_safe & endSafe() const noexcept
Returns the safe iterator at the end of the gum::Bijection.

Member Function Documentation

◆ actionId()

template<typename GUM_SCALAR >
INLINE Idx gum::FMDP< GUM_SCALAR >::actionId ( const std::string &  action) const

Returns action id.

Definition at line 358 of file fmdp_tpl.h.

Referenced by gum::FMDP< double >::addReward(), and gum::FMDP< double >::mapMainPrime().

358  {
359  for (BijectionIterator< Idx, const std::string* > actIter =
360  __actionMap.begin();
361  actIter != __actionMap.end();
362  ++actIter)
363  if (*(actIter.second()) == action) { return actIter.first(); }
364 
365  GUM_ERROR(NotFound, " Action " << action << " has not been declared before.");
366  }
iterator begin() const
Returns the unsafe iterator at the beginning of the gum::Bijection.
const iterator & end() const noexcept
Returns the unsafe iterator at the end of the gum::Bijection.
Bijection< Idx, const std::string *> __actionMap
Bijection mapping an action name to its id.
Definition: fmdp.h:277
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the caller graph for this function:

◆ actionName()

template<typename GUM_SCALAR >
INLINE const std::string & gum::FMDP< GUM_SCALAR >::actionName ( Idx  actionId) const

Returns name of action given in parameter.

Definition at line 347 of file fmdp_tpl.h.

Referenced by gum::FMDPSimulator::actionName(), gum::FMDP< double >::addReward(), and gum::FMDPLearner< VariableAttributeSelection, RewardAttributeSelection, LearnerSelection >::initialize().

347  {
348  if (!__actionMap.existsFirst(actionId))
349  GUM_ERROR(NotFound, "No action with " << actionId << " as identifiant.");
350 
351  return *(__actionMap.second(actionId));
352  }
const T2 & second(const T1 &first) const
Returns the second value of a pair given its first value.
bool existsFirst(const T1 &first) const
Returns true if first is the first element in a pair in the gum::Bijection.
Bijection< Idx, const std::string *> __actionMap
Bijection mapping an action name to its id.
Definition: fmdp.h:277
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the caller graph for this function:

◆ addAction()

template<typename GUM_SCALAR >
INLINE void gum::FMDP< GUM_SCALAR >::addAction ( Idx  actionId,
const std::string &  action 
)

Adds an action to FMDP description.

Exceptions
DuplicateElementif an action with same name already exists

Definition at line 153 of file fmdp_tpl.h.

Referenced by gum::SDYNA::addAction(), and gum::FMDP< double >::mapMainPrime().

154  {
155  if (actionId == 0) GUM_ERROR(DuplicateElement, " Action Id 0 is reserved.");
156 
157  for (BijectionIteratorSafe< Idx, const std::string* > actIter =
159  actIter != __actionMap.endSafe();
160  ++actIter)
161  if (*(actIter.second()) == action)
162  GUM_ERROR(DuplicateElement,
163  " Action "
164  << action
165  << " has already been inserted in FMDP with this name.");
166 
167  if (__actionMap.existsFirst(actionId))
168  GUM_ERROR(DuplicateElement,
169  " An action with same id (" << actionId
170  << ") has already been inserted.");
171 
172  __actionMap.insert(actionId, new std::string(action));
173 
174  __actionTransitionTable.insert(actionId,
175  new VarTransitionTable< GUM_SCALAR >());
176  __actionCostTable.insert(actionId, nullptr);
177  __actionRewardTable.insert(actionId, nullptr);
178 
179  __actionSeq.insert(actionId);
180  }
void insert(const T1 &first, const T2 &second)
Inserts a new association in the gum::Bijection.
HashTable< Idx, VarTransitionTable< GUM_SCALAR > *> __actionTransitionTable
Table which give for each action a table containing variables transition cpt.
Definition: fmdp.h:281
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionCostTable
Table which give for each action cost table.
Definition: fmdp.h:285
bool existsFirst(const T1 &first) const
Returns true if first is the first element in a pair in the gum::Bijection.
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionRewardTable
Table which give for each action reward table.
Definition: fmdp.h:289
Sequence< Idx > __actionSeq
Definition: fmdp.h:271
iterator_safe beginSafe() const
Returns the safe iterator at the beginning of the gum::Bijection.
Bijection< Idx, const std::string *> __actionMap
Bijection mapping an action name to its id.
Definition: fmdp.h:277
const iterator_safe & endSafe() const noexcept
Returns the safe iterator at the end of the gum::Bijection.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
void insert(const Key &k)
Insert an element at the end of the sequence.
Definition: sequence_tpl.h:408
+ Here is the caller graph for this function:

◆ addCost()

template<typename GUM_SCALAR>
void gum::FMDP< GUM_SCALAR >::addCost ( const MultiDimImplementation< GUM_SCALAR > *  cost)
inline

Adds a default variable cost.

Exceptions
DuplicateElementif a default cost exists already

Definition at line 201 of file fmdp.h.

201  {
202  this->addCostForAction(0, cost);
203  }
void addCostForAction(Idx actionId, const MultiDimImplementation< GUM_SCALAR > *cost)
Adds a cost table to specified action.
Definition: fmdp_tpl.h:257
const MultiDimImplementation< GUM_SCALAR > * cost(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:278

◆ addCostForAction()

template<typename GUM_SCALAR>
INLINE void gum::FMDP< GUM_SCALAR >::addCostForAction ( Idx  actionId,
const MultiDimImplementation< GUM_SCALAR > *  cost 
)

Adds a cost table to specified action.

Exceptions
NotFoundif action does not exists

Definition at line 257 of file fmdp_tpl.h.

Referenced by gum::FMDP< double >::addCost(), and gum::FMDP< double >::addTransition().

258  {
259  if (!__actionCostTable.exists(actionId))
260  GUM_ERROR(NotFound,
261  " Action " << actionName(actionId)
262  << " has not been declared before.");
263 
264  if (__actionCostTable[actionId] != nullptr)
265  GUM_ERROR(DuplicateElement,
266  " Action " << actionName(actionId) << " already has a cost table");
267 
269  }
Idx actionId(const std::string &) const
Returns action id.
Definition: fmdp_tpl.h:358
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionCostTable
Table which give for each action cost table.
Definition: fmdp.h:285
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:347
const MultiDimImplementation< GUM_SCALAR > * cost(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:278
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the caller graph for this function:

◆ addReward()

template<typename GUM_SCALAR>
void gum::FMDP< GUM_SCALAR >::addReward ( const MultiDimImplementation< GUM_SCALAR > *  reward)
inline

Adds a default variable reward.

Exceptions
DuplicateElementif a default reward exists already

Definition at line 228 of file fmdp.h.

Referenced by gum::FMDPLearner< VariableAttributeSelection, RewardAttributeSelection, LearnerSelection >::initialize().

228  {
229  this->addRewardForAction(0, reward);
230  }
const MultiDimImplementation< GUM_SCALAR > * reward(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:324
void addRewardForAction(Idx actionId, const MultiDimImplementation< GUM_SCALAR > *reward)
Adds a default variable reward.
Definition: fmdp_tpl.h:302
+ Here is the caller graph for this function:

◆ addRewardForAction()

template<typename GUM_SCALAR>
INLINE void gum::FMDP< GUM_SCALAR >::addRewardForAction ( Idx  actionId,
const MultiDimImplementation< GUM_SCALAR > *  reward 
)

Adds a default variable reward.

Exceptions
DuplicateElementif a default reward exists already

Definition at line 302 of file fmdp_tpl.h.

Referenced by gum::FMDP< double >::addCost(), gum::FMDP< double >::addReward(), and gum::FMDPLearner< VariableAttributeSelection, RewardAttributeSelection, LearnerSelection >::initialize().

303  {
304  if (!__actionRewardTable.exists(actionId))
305  GUM_ERROR(NotFound,
306  " Action " << actionName(actionId)
307  << " has not been declared before.");
308 
309  if (__actionRewardTable[actionId] != nullptr)
310  GUM_ERROR(DuplicateElement,
311  " Action " << actionName(actionId)
312  << " already has a reward table");
313 
315  }
Idx actionId(const std::string &) const
Returns action id.
Definition: fmdp_tpl.h:358
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:347
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionRewardTable
Table which give for each action reward table.
Definition: fmdp.h:289
const MultiDimImplementation< GUM_SCALAR > * reward(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:324
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the caller graph for this function:

◆ addTransition()

template<typename GUM_SCALAR>
void gum::FMDP< GUM_SCALAR >::addTransition ( const DiscreteVariable var,
const MultiDimImplementation< GUM_SCALAR > *  transition 
)
inline

Adds a default variable transition.

Exceptions
NotFoundif var does not exists
DuplicateElementif variable already has a default transition

Definition at line 171 of file fmdp.h.

172  {
173  this->addTransitionForAction(0, var, transition);
174  }
void addTransitionForAction(Idx actionId, const DiscreteVariable *var, const MultiDimImplementation< GUM_SCALAR > *transition)
Adds a variable transition table to specified action.
Definition: fmdp_tpl.h:198
const MultiDimImplementation< GUM_SCALAR > * transition(Idx actionId, const DiscreteVariable *v) const
Returns transition associated to given in parameter variable and the given action.
Definition: fmdp_tpl.h:227

◆ addTransitionForAction()

template<typename GUM_SCALAR>
INLINE void gum::FMDP< GUM_SCALAR >::addTransitionForAction ( Idx  actionId,
const DiscreteVariable var,
const MultiDimImplementation< GUM_SCALAR > *  transition 
)

Adds a variable transition table to specified action.

Exceptions
NotFoundif action or var does not exists
DuplicateElementif variable already has a transition for this action

Definition at line 198 of file fmdp_tpl.h.

Referenced by gum::FMDP< double >::addTransition(), gum::FMDP< double >::endActions(), and gum::FMDPLearner< VariableAttributeSelection, RewardAttributeSelection, LearnerSelection >::initialize().

201  {
202  if (!__varSeq.exists(var))
203  GUM_ERROR(NotFound,
204  " Variable " << var->name() << " has not been declared before.");
205 
206  if (!__actionTransitionTable.exists(actionId))
207  GUM_ERROR(NotFound,
208  " Action " << actionName(actionId)
209  << " has not been declared before.");
210 
211  if (__actionTransitionTable[actionId]->exists(var))
212  GUM_ERROR(DuplicateElement,
213  " Variable " << var->name()
214  << " already has a transition table in " << actionId
215  << " table.");
216 
218  }
Idx actionId(const std::string &) const
Returns action id.
Definition: fmdp_tpl.h:358
HashTable< Idx, VarTransitionTable< GUM_SCALAR > *> __actionTransitionTable
Table which give for each action a table containing variables transition cpt.
Definition: fmdp.h:281
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:347
const MultiDimImplementation< GUM_SCALAR > * transition(Idx actionId, const DiscreteVariable *v) const
Returns transition associated to given in parameter variable and the given action.
Definition: fmdp_tpl.h:227
Sequence< const DiscreteVariable *> __varSeq
Sequence de variables and its iterator.
Definition: fmdp.h:269
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the caller graph for this function:

◆ addVariable()

template<typename GUM_SCALAR >
INLINE void gum::FMDP< GUM_SCALAR >::addVariable ( const DiscreteVariable var)

Adds a variable to FMDP description.

Exceptions
DuplicateElementif a similar variable already exists

Definition at line 124 of file fmdp_tpl.h.

Referenced by gum::SDYNA::addVariable().

124  {
125  if (__varSeq.exists(var))
126  GUM_ERROR(DuplicateElement,
127  " Variable " << var->name()
128  << " has already been inserted in FMDP.");
129 
130 
131  __varSeq.insert(var);
132 
133  // Prime version creation
134  DiscreteVariable* primeVar = var->clone();
135  primeVar->setName(var->name() + "'");
136  __main2primed.insert(var, primeVar);
137  }
Bijection< const DiscreteVariable *, const DiscreteVariable *> __main2primed
Mapping from a main variable to its associated primed version.
Definition: fmdp.h:274
Sequence< const DiscreteVariable *> __varSeq
Sequence de variables and its iterator.
Definition: fmdp.h:269
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the caller graph for this function:

◆ beginActions()

template<typename GUM_SCALAR>
SequenceIteratorSafe< Idx > gum::FMDP< GUM_SCALAR >::beginActions ( ) const
inline

◆ beginVariables()

template<typename GUM_SCALAR>
SequenceIteratorSafe< const DiscreteVariable* > gum::FMDP< GUM_SCALAR >::beginVariables ( ) const
inline

Returns an iterator reference to he beginning of the list of variables.

Definition at line 95 of file fmdp.h.

Referenced by gum::AdaptiveRMaxPlaner::__makeRMaxFunctionGraphs(), gum::FMDPLearner< VariableAttributeSelection, RewardAttributeSelection, LearnerSelection >::addObservation(), gum::FMDPSimulator::beginVariables(), gum::E_GreedyDecider::initialize(), gum::FMDPLearner< VariableAttributeSelection, RewardAttributeSelection, LearnerSelection >::initialize(), gum::FMDPLearner< VariableAttributeSelection, RewardAttributeSelection, LearnerSelection >::size(), and gum::FMDPLearner< VariableAttributeSelection, RewardAttributeSelection, LearnerSelection >::updateFMDP().

95  {
96  return __varSeq.beginSafe();
97  }
Sequence< const DiscreteVariable *> __varSeq
Sequence de variables and its iterator.
Definition: fmdp.h:269
+ Here is the caller graph for this function:

◆ cost()

template<typename GUM_SCALAR >
INLINE const MultiDimImplementation< GUM_SCALAR > * gum::FMDP< GUM_SCALAR >::cost ( Idx  actionId = 0) const

Returns the reward table of mdp.

Definition at line 278 of file fmdp_tpl.h.

Referenced by gum::FMDP< double >::addCost(), and gum::FMDP< double >::addTransition().

278  {
279  if (!__actionCostTable.exists(actionId))
280  GUM_ERROR(NotFound,
281  " Action " << actionName(actionId)
282  << " has not been declared before.");
283 
284  if (__actionCostTable[actionId]) return __actionCostTable[actionId];
285  return __actionCostTable[0];
286  }
Idx actionId(const std::string &) const
Returns action id.
Definition: fmdp_tpl.h:358
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionCostTable
Table which give for each action cost table.
Definition: fmdp.h:285
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:347
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the caller graph for this function:

◆ endActions()

template<typename GUM_SCALAR>
SequenceIteratorSafe< Idx > gum::FMDP< GUM_SCALAR >::endActions ( ) const
inline

◆ endVariables()

template<typename GUM_SCALAR>
SequenceIteratorSafe< const DiscreteVariable* > gum::FMDP< GUM_SCALAR >::endVariables ( ) const
inline

Returns an iterator reference to the end of the list of variables.

Definition at line 102 of file fmdp.h.

Referenced by gum::AdaptiveRMaxPlaner::__makeRMaxFunctionGraphs(), gum::FMDPLearner< VariableAttributeSelection, RewardAttributeSelection, LearnerSelection >::addObservation(), gum::FMDPSimulator::endVariables(), gum::E_GreedyDecider::initialize(), gum::FMDPLearner< VariableAttributeSelection, RewardAttributeSelection, LearnerSelection >::initialize(), gum::FMDPLearner< VariableAttributeSelection, RewardAttributeSelection, LearnerSelection >::size(), and gum::FMDPLearner< VariableAttributeSelection, RewardAttributeSelection, LearnerSelection >::updateFMDP().

102  {
103  return __varSeq.endSafe();
104  }
Sequence< const DiscreteVariable *> __varSeq
Sequence de variables and its iterator.
Definition: fmdp.h:269
+ Here is the caller graph for this function:

◆ main2prime()

template<typename GUM_SCALAR>
const DiscreteVariable* gum::FMDP< GUM_SCALAR >::main2prime ( const DiscreteVariable mainVar) const
inline

Returns the primed variable associate to the given main variable.

Definition at line 109 of file fmdp.h.

Referenced by gum::SDYNA::feedback(), gum::FMDPLearner< VariableAttributeSelection, RewardAttributeSelection, LearnerSelection >::initialize(), gum::StructuredPlaner< double >::initialize(), and gum::FMDPSimulator::primeVar().

109  {
110  return __main2primed.second(mainVar);
111  }
Bijection< const DiscreteVariable *, const DiscreteVariable *> __main2primed
Mapping from a main variable to its associated primed version.
Definition: fmdp.h:274
+ Here is the caller graph for this function:

◆ mapMainPrime()

template<typename GUM_SCALAR>
INLINE const Bijection< const DiscreteVariable*, const DiscreteVariable* >& gum::FMDP< GUM_SCALAR >::mapMainPrime ( ) const
inline

Returns the map binding main variables and prime variables.

Definition at line 117 of file fmdp.h.

Referenced by gum::AdaptiveRMaxPlaner::_evalPolicy(), gum::MDDOperatorStrategy< GUM_SCALAR >::_shouldEleminateVar(), gum::AdaptiveRMaxPlaner::_valueIteration(), gum::TreeOperatorStrategy< GUM_SCALAR >::regress(), and gum::MDDOperatorStrategy< GUM_SCALAR >::regress().

117  {
118  return __main2primed;
119  }
Bijection< const DiscreteVariable *, const DiscreteVariable *> __main2primed
Mapping from a main variable to its associated primed version.
Definition: fmdp.h:274
+ Here is the caller graph for this function:

◆ reward()

template<typename GUM_SCALAR >
INLINE const MultiDimImplementation< GUM_SCALAR > * gum::FMDP< GUM_SCALAR >::reward ( Idx  actionId = 0) const

Returns the reward table of mdp.

Definition at line 324 of file fmdp_tpl.h.

Referenced by gum::AdaptiveRMaxPlaner::_initVFunction(), gum::FMDP< double >::addCost(), gum::FMDP< double >::addReward(), and gum::FMDPSimulator::reward().

324  {
325  if (!__actionRewardTable.exists(actionId))
326  GUM_ERROR(NotFound,
327  " Action " << actionName(actionId)
328  << " has not been declared before.");
329 
330  if (__actionRewardTable[actionId]) return __actionRewardTable[actionId];
331  return __actionRewardTable[0];
332  }
Idx actionId(const std::string &) const
Returns action id.
Definition: fmdp_tpl.h:358
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:347
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionRewardTable
Table which give for each action reward table.
Definition: fmdp.h:289
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the caller graph for this function:

◆ size()

template<typename GUM_SCALAR >
INLINE Size gum::FMDP< GUM_SCALAR >::size ( ) const

Returns the map binding main variables and prime variables.

Definition at line 392 of file fmdp_tpl.h.

Referenced by gum::FMDP< double >::addReward(), and gum::SDYNA::modelSize().

392  {
393  Size s = 0;
394  for (auto actionIter = beginActions(); actionIter != endActions();
395  ++actionIter) {
396  for (auto varIter = beginVariables(); varIter != endVariables(); ++varIter)
397  if (this->transition(*actionIter, *varIter))
398  s += this->transition(*actionIter, *varIter)->realSize();
399  if (this->reward(*actionIter)) s += this->reward(*actionIter)->realSize();
400  }
401 
402  for (auto varIter = beginVariables(); varIter != endVariables(); ++varIter)
403  if (this->transition(0, *varIter))
404  s += this->transition(0, *varIter)->realSize();
405  if (this->reward()) s += this->reward()->realSize();
406  return s;
407  }
SequenceIteratorSafe< Idx > beginActions() const
Returns an iterator reference to he beginning of the list of actions.
Definition: fmdp.h:137
SequenceIteratorSafe< const DiscreteVariable *> beginVariables() const
Returns an iterator reference to he beginning of the list of variables.
Definition: fmdp.h:95
const MultiDimImplementation< GUM_SCALAR > * transition(Idx actionId, const DiscreteVariable *v) const
Returns transition associated to given in parameter variable and the given action.
Definition: fmdp_tpl.h:227
const MultiDimImplementation< GUM_SCALAR > * reward(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:324
SequenceIteratorSafe< Idx > endActions() const
Returns an iterator reference to the end of the list of actions.
Definition: fmdp.h:144
SequenceIteratorSafe< const DiscreteVariable *> endVariables() const
Returns an iterator reference to the end of the list of variables.
Definition: fmdp.h:102
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:48
+ Here is the caller graph for this function:

◆ toString()

template<typename GUM_SCALAR >
INLINE std::string gum::FMDP< GUM_SCALAR >::toString ( ) const

Displays the FMDP in a Dot format.

Definition at line 370 of file fmdp_tpl.h.

Referenced by gum::FMDP< double >::addReward(), and gum::SDYNA::toString().

370  {
371  std::stringstream fmdpCore;
372 
373  for (auto actionIter = beginActions(); actionIter != endActions();
374  ++actionIter) {
375  for (auto varIter = beginVariables(); varIter != endVariables(); ++varIter)
376  if (this->transition(*actionIter, *varIter))
377  fmdpCore << RECAST(this->transition(*actionIter, *varIter))->toDot()
378  << std::endl;
379  if (this->reward(*actionIter))
380  fmdpCore << RECAST(this->reward(*actionIter))->toDot() << std::endl;
381  }
382 
383  for (auto varIter = beginVariables(); varIter != endVariables(); ++varIter)
384  if (this->transition(0, *varIter))
385  fmdpCore << RECAST(this->transition(0, *varIter))->toDot() << std::endl;
386  if (this->reward()) fmdpCore << RECAST(this->reward())->toDot() << std::endl;
387  return fmdpCore.str();
388  }
SequenceIteratorSafe< Idx > beginActions() const
Returns an iterator reference to he beginning of the list of actions.
Definition: fmdp.h:137
SequenceIteratorSafe< const DiscreteVariable *> beginVariables() const
Returns an iterator reference to he beginning of the list of variables.
Definition: fmdp.h:95
const MultiDimImplementation< GUM_SCALAR > * transition(Idx actionId, const DiscreteVariable *v) const
Returns transition associated to given in parameter variable and the given action.
Definition: fmdp_tpl.h:227
const MultiDimImplementation< GUM_SCALAR > * reward(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:324
#define RECAST(x)
Definition: fmdp_tpl.h:36
SequenceIteratorSafe< Idx > endActions() const
Returns an iterator reference to the end of the list of actions.
Definition: fmdp.h:144
SequenceIteratorSafe< const DiscreteVariable *> endVariables() const
Returns an iterator reference to the end of the list of variables.
Definition: fmdp.h:102
+ Here is the caller graph for this function:

◆ transition()

template<typename GUM_SCALAR >
INLINE const MultiDimImplementation< GUM_SCALAR > * gum::FMDP< GUM_SCALAR >::transition ( Idx  actionId,
const DiscreteVariable v 
) const

Returns transition associated to given in parameter variable and the given action.

Definition at line 227 of file fmdp_tpl.h.

Referenced by gum::FMDPSimulator::_transitionProbability(), gum::FMDP< double >::addTransition(), gum::FMDP< double >::endActions(), gum::TreeOperatorStrategy< GUM_SCALAR >::regress(), and gum::MDDOperatorStrategy< GUM_SCALAR >::regress().

228  {
229  if (!__actionTransitionTable.exists(actionId))
230  GUM_ERROR(NotFound,
231  " Action " << actionName(actionId)
232  << " has not been declared before.");
233 
234  if (__actionTransitionTable[actionId]->exists(v))
235  return (*__actionTransitionTable[actionId])[v];
236  else
237  return (*__actionTransitionTable[0]).exists(v)
238  ? (*__actionTransitionTable[0])[v]
239  : nullptr;
240  }
HashTable< Idx, VarTransitionTable< GUM_SCALAR > *> __actionTransitionTable
Table which give for each action a table containing variables transition cpt.
Definition: fmdp.h:281
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:347
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the caller graph for this function:

Member Data Documentation

◆ __actionCostTable

template<typename GUM_SCALAR>
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR >* > gum::FMDP< GUM_SCALAR >::__actionCostTable
private

Table which give for each action cost table.

Definition at line 285 of file fmdp.h.

◆ __actionMap

template<typename GUM_SCALAR>
Bijection< Idx, const std::string* > gum::FMDP< GUM_SCALAR >::__actionMap
private

Bijection mapping an action name to its id.

Definition at line 277 of file fmdp.h.

◆ __actionRewardTable

template<typename GUM_SCALAR>
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR >* > gum::FMDP< GUM_SCALAR >::__actionRewardTable
private

Table which give for each action reward table.

Definition at line 289 of file fmdp.h.

◆ __actionSeq

template<typename GUM_SCALAR>
Sequence< Idx > gum::FMDP< GUM_SCALAR >::__actionSeq
private

Definition at line 271 of file fmdp.h.

Referenced by gum::FMDP< double >::beginActions(), and gum::FMDP< double >::endActions().

◆ __actionTransitionTable

template<typename GUM_SCALAR>
HashTable< Idx, VarTransitionTable< GUM_SCALAR >* > gum::FMDP< GUM_SCALAR >::__actionTransitionTable
private

Table which give for each action a table containing variables transition cpt.

Definition at line 281 of file fmdp.h.

◆ __main2primed

template<typename GUM_SCALAR>
Bijection< const DiscreteVariable*, const DiscreteVariable* > gum::FMDP< GUM_SCALAR >::__main2primed
private

Mapping from a main variable to its associated primed version.

Definition at line 274 of file fmdp.h.

Referenced by gum::FMDP< double >::main2prime(), and gum::FMDP< double >::mapMainPrime().

◆ __onDestructionDeleteVars

template<typename GUM_SCALAR>
bool gum::FMDP< GUM_SCALAR >::__onDestructionDeleteVars
private

Boolean indicates whether or not main variables should be deleted on destruction of this instance Usually the case when fmdp has been initialized with the factory.

Definition at line 294 of file fmdp.h.

◆ __varSeq

template<typename GUM_SCALAR>
Sequence< const DiscreteVariable* > gum::FMDP< GUM_SCALAR >::__varSeq
private

Sequence de variables and its iterator.

Definition at line 269 of file fmdp.h.

Referenced by gum::FMDP< double >::beginVariables(), and gum::FMDP< double >::endVariables().


The documentation for this class was generated from the following files: