aGrUM  0.20.2
a C++ library for (probabilistic) graphical models
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.
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> actionRewardTable__
Table which give for each action reward table.
Definition: fmdp.h:289
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
Bijection< Idx, const std::string *> actionMap__
Bijection mapping an action name to its id.
Definition: fmdp.h:277
FMDP(bool onDestructionDeleteVar=false)
Default constructor.
Definition: fmdp_tpl.h:53
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> actionCostTable__
Table which give for each action cost table.
Definition: fmdp.h:285

◆ ~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  }
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> actionRewardTable__
Table which give for each action reward table.
Definition: fmdp.h:289
bool onDestructionDeleteVars__
Boolean indicates whether or not main variables should be deleted on destruction of this instance Usu...
Definition: fmdp.h:294
Bijection< const DiscreteVariable *, const DiscreteVariable *> main2primed__
Mapping from a main variable to its associated primed version.
Definition: fmdp.h:274
HashTable< Idx, VarTransitionTable< GUM_SCALAR > *> actionTransitionTable__
Table which give for each action a table containing variables transition cpt.
Definition: fmdp.h:281
Bijection< Idx, const std::string *> actionMap__
Bijection mapping an action name to its id.
Definition: fmdp.h:277
FMDP(bool onDestructionDeleteVar=false)
Default constructor.
Definition: fmdp_tpl.h:53
iterator_safe beginSafe() const
Returns the safe iterator at the beginning of the gum::Bijection.
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> actionCostTable__
Table which give for each action cost table.
Definition: fmdp.h:285
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 360 of file fmdp_tpl.h.

360  {
361  for (BijectionIterator< Idx, const std::string* > actIter
362  = actionMap__.begin();
363  actIter != actionMap__.end();
364  ++actIter)
365  if (*(actIter.second()) == action) { return actIter.first(); }
366 
367  GUM_ERROR(NotFound, " Action " << action << " has not been declared before.");
368  }
iterator begin() const
Returns the unsafe 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 & end() const noexcept
Returns the unsafe iterator at the end of the gum::Bijection.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ 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 349 of file fmdp_tpl.h.

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

◆ 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::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, const MultiDimImplementation< GUM_SCALAR > *> actionRewardTable__
Table which give for each action reward table.
Definition: fmdp.h:289
HashTable< Idx, VarTransitionTable< GUM_SCALAR > *> actionTransitionTable__
Table which give for each action a table containing variables transition cpt.
Definition: fmdp.h:281
Bijection< Idx, const std::string *> actionMap__
Bijection mapping an action name to its id.
Definition: fmdp.h:277
bool existsFirst(const T1 &first) const
Returns true if first is the first element in a pair in the gum::Bijection.
iterator_safe beginSafe() const
Returns the safe iterator at the beginning of the gum::Bijection.
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> actionCostTable__
Table which give for each action cost table.
Definition: fmdp.h:285
const iterator_safe & endSafe() const noexcept
Returns the safe iterator at the end of the gum::Bijection.
Sequence< Idx > actionSeq__
Definition: fmdp.h:271
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54
void insert(const Key &k)
Insert an element at the end of the sequence.
Definition: sequence_tpl.h:409
+ 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:279

◆ 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.

259  {
260  if (!actionCostTable__.exists(actionId))
261  GUM_ERROR(NotFound,
262  " Action " << actionName(actionId)
263  << " has not been declared before.");
264 
265  if (actionCostTable__[actionId] != nullptr)
266  GUM_ERROR(DuplicateElement,
267  " Action " << actionName(actionId) << " already has a cost table");
268 
270  }
Idx actionId(const std::string &) const
Returns action id.
Definition: fmdp_tpl.h:360
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:349
const MultiDimImplementation< GUM_SCALAR > * cost(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:279
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> actionCostTable__
Table which give for each action cost table.
Definition: fmdp.h:285
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ 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.

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:326
void addRewardForAction(Idx actionId, const MultiDimImplementation< GUM_SCALAR > *reward)
Adds a default variable reward.
Definition: fmdp_tpl.h:303

◆ 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 303 of file fmdp_tpl.h.

305  {
306  if (!actionRewardTable__.exists(actionId))
307  GUM_ERROR(NotFound,
308  " Action " << actionName(actionId)
309  << " has not been declared before.");
310 
311  if (actionRewardTable__[actionId] != nullptr)
312  GUM_ERROR(DuplicateElement,
313  " Action " << actionName(actionId)
314  << " already has a reward table");
315 
317  }
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> actionRewardTable__
Table which give for each action reward table.
Definition: fmdp.h:289
Idx actionId(const std::string &) const
Returns action id.
Definition: fmdp_tpl.h:360
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:349
const MultiDimImplementation< GUM_SCALAR > * reward(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:326
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ 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.

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:360
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:349
HashTable< Idx, VarTransitionTable< GUM_SCALAR > *> actionTransitionTable__
Table which give for each action a table containing variables transition cpt.
Definition: fmdp.h:281
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
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54
Sequence< const DiscreteVariable *> varSeq__
Sequence de variables and its iterator.
Definition: fmdp.h:269

◆ 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.

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
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54
Sequence< const DiscreteVariable *> varSeq__
Sequence de variables and its iterator.
Definition: fmdp.h:269

◆ beginActions()

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

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

Definition at line 137 of file fmdp.h.

137  {
138  return actionSeq__.beginSafe();
139  }
iterator_safe beginSafe() const
Returns a safe begin iterator.
Definition: sequence_tpl.h:628
Sequence< Idx > actionSeq__
Definition: fmdp.h:271

◆ 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.

95  {
96  return varSeq__.beginSafe();
97  }
Sequence< const DiscreteVariable *> varSeq__
Sequence de variables and its iterator.
Definition: fmdp.h:269

◆ 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 279 of file fmdp_tpl.h.

279  {
280  if (!actionCostTable__.exists(actionId))
281  GUM_ERROR(NotFound,
282  " Action " << actionName(actionId)
283  << " has not been declared before.");
284 
285  if (actionCostTable__[actionId]) return actionCostTable__[actionId];
286  return actionCostTable__[0];
287  }
Idx actionId(const std::string &) const
Returns action id.
Definition: fmdp_tpl.h:360
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:349
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> actionCostTable__
Table which give for each action cost table.
Definition: fmdp.h:285
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ endActions()

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

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

Definition at line 144 of file fmdp.h.

144  {
145  return actionSeq__.endSafe();
146  }
const iterator_safe & endSafe() const noexcept
Returns the safe end iterator.
Definition: sequence_tpl.h:635
Sequence< Idx > actionSeq__
Definition: fmdp.h:271

◆ 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.

102  {
103  return varSeq__.endSafe();
104  }
Sequence< const DiscreteVariable *> varSeq__
Sequence de variables and its iterator.
Definition: fmdp.h:269

◆ 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.

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

◆ 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.

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

◆ 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 326 of file fmdp_tpl.h.

326  {
327  if (!actionRewardTable__.exists(actionId))
328  GUM_ERROR(NotFound,
329  " Action " << actionName(actionId)
330  << " has not been declared before.");
331 
332  if (actionRewardTable__[actionId]) return actionRewardTable__[actionId];
333  return actionRewardTable__[0];
334  }
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> actionRewardTable__
Table which give for each action reward table.
Definition: fmdp.h:289
Idx actionId(const std::string &) const
Returns action id.
Definition: fmdp_tpl.h:360
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:349
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

◆ 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 394 of file fmdp_tpl.h.

394  {
395  Size s = 0;
396  for (auto actionIter = beginActions(); actionIter != endActions();
397  ++actionIter) {
398  for (auto varIter = beginVariables(); varIter != endVariables(); ++varIter)
399  if (this->transition(*actionIter, *varIter))
400  s += this->transition(*actionIter, *varIter)->realSize();
401  if (this->reward(*actionIter)) s += this->reward(*actionIter)->realSize();
402  }
403 
404  for (auto varIter = beginVariables(); varIter != endVariables(); ++varIter)
405  if (this->transition(0, *varIter))
406  s += this->transition(0, *varIter)->realSize();
407  if (this->reward()) s += this->reward()->realSize();
408  return s;
409  }
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:326
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:47

◆ toString()

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

Displays the FMDP in a Dot format.

Definition at line 372 of file fmdp_tpl.h.

372  {
373  std::stringstream fmdpCore;
374 
375  for (auto actionIter = beginActions(); actionIter != endActions();
376  ++actionIter) {
377  for (auto varIter = beginVariables(); varIter != endVariables(); ++varIter)
378  if (this->transition(*actionIter, *varIter))
379  fmdpCore << RECAST(this->transition(*actionIter, *varIter))->toDot()
380  << std::endl;
381  if (this->reward(*actionIter))
382  fmdpCore << RECAST(this->reward(*actionIter))->toDot() << std::endl;
383  }
384 
385  for (auto varIter = beginVariables(); varIter != endVariables(); ++varIter)
386  if (this->transition(0, *varIter))
387  fmdpCore << RECAST(this->transition(0, *varIter))->toDot() << std::endl;
388  if (this->reward()) fmdpCore << RECAST(this->reward())->toDot() << std::endl;
389  return fmdpCore.str();
390  }
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:326
#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

◆ 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.

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  }
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:349
HashTable< Idx, VarTransitionTable< GUM_SCALAR > *> actionTransitionTable__
Table which give for each action a table containing variables transition cpt.
Definition: fmdp.h:281
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54

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.

◆ 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.

◆ 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.


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