aGrUM  0.14.2
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 54 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 58 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 50 of file fmdp_tpl.h.

50  {
51  GUM_CONSTRUCTOR(FMDP);
52  __onDestructionDeleteVars = onDestructionDeleteVar;
53 
54  // Default Action initialisation
55  __actionMap.insert(0, new std::string("DEFAULT"));
56  __actionTransitionTable.insert(0, new VarTransitionTable< GUM_SCALAR >());
57  __actionCostTable.insert(0, nullptr);
58  __actionRewardTable.insert(0, nullptr);
59  }
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:291
HashTable< Idx, VarTransitionTable< GUM_SCALAR > *> __actionTransitionTable
Table which give for each action a table containing variables transition cpt.
Definition: fmdp.h:278
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionCostTable
Table which give for each action cost table.
Definition: fmdp.h:282
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionRewardTable
Table which give for each action reward table.
Definition: fmdp.h:286
FMDP(bool onDestructionDeleteVar=false)
Default constructor.
Definition: fmdp_tpl.h:50
Bijection< Idx, const std::string *> __actionMap
Bijection mapping an action name to its id.
Definition: fmdp.h:274

◆ ~FMDP()

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

Default destructor.

Definition at line 65 of file fmdp_tpl.h.

65  {
66  // Action Transition Graph deletion
67  for (auto iterA = __actionTransitionTable.beginSafe();
68  iterA != __actionTransitionTable.endSafe();
69  ++iterA) {
70  if (iterA.val()) {
71  for (auto iterH = (iterA.val())->beginSafe();
72  iterH != (iterA.val())->endSafe();
73  ++iterH)
74  if (iterH.val()) delete iterH.val();
75  delete iterA.val();
76  }
77  }
78 
79  // Action cost graph deletion
80  for (auto iterA = __actionCostTable.beginSafe();
81  iterA != __actionCostTable.endSafe();
82  ++iterA)
83  if (iterA.val()) delete iterA.val();
84 
85  // Action reward graph deletion
86  for (auto iterA = __actionRewardTable.beginSafe();
87  iterA != __actionRewardTable.endSafe();
88  ++iterA)
89  if (iterA.val()) delete iterA.val();
90 
91  // Action Name deletion
92  for (auto iterId = __actionMap.beginSafe(); iterId != __actionMap.endSafe();
93  ++iterId)
94  delete iterId.second();
95 
96  // Primed Variables deletion
97  for (auto varIter = __main2primed.beginSafe();
98  varIter != __main2primed.endSafe();
99  ++varIter) {
100  delete varIter.second();
101  if (__onDestructionDeleteVars) delete varIter.first();
102  }
103 
104  GUM_DESTRUCTOR(FMDP);
105  }
bool __onDestructionDeleteVars
Boolean indicates whether or not main variables should be deleted on destruction of this instance Usu...
Definition: fmdp.h:291
HashTable< Idx, VarTransitionTable< GUM_SCALAR > *> __actionTransitionTable
Table which give for each action a table containing variables transition cpt.
Definition: fmdp.h:278
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionCostTable
Table which give for each action cost table.
Definition: fmdp.h:282
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionRewardTable
Table which give for each action reward table.
Definition: fmdp.h:286
FMDP(bool onDestructionDeleteVar=false)
Default constructor.
Definition: fmdp_tpl.h:50
Bijection< const DiscreteVariable *, const DiscreteVariable *> __main2primed
Mapping from a main variable to its associated primed version.
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:274
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 355 of file fmdp_tpl.h.

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

355  {
356  for (BijectionIterator< Idx, const std::string* > actIter =
357  __actionMap.begin();
358  actIter != __actionMap.end();
359  ++actIter)
360  if (*(actIter.second()) == action) { return actIter.first(); }
361 
362  GUM_ERROR(NotFound, " Action " << action << " has not been declared before.");
363  }
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:274
#define GUM_ERROR(type, msg)
Definition: exceptions.h:52
+ 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 344 of file fmdp_tpl.h.

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

344  {
345  if (!__actionMap.existsFirst(actionId))
346  GUM_ERROR(NotFound, "No action with " << actionId << " as identifiant.");
347 
348  return *(__actionMap.second(actionId));
349  }
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:274
#define GUM_ERROR(type, msg)
Definition: exceptions.h:52
+ 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 150 of file fmdp_tpl.h.

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

151  {
152  if (actionId == 0) GUM_ERROR(DuplicateElement, " Action Id 0 is reserved.");
153 
154  for (BijectionIteratorSafe< Idx, const std::string* > actIter =
156  actIter != __actionMap.endSafe();
157  ++actIter)
158  if (*(actIter.second()) == action)
159  GUM_ERROR(DuplicateElement,
160  " Action "
161  << action
162  << " has already been inserted in FMDP with this name.");
163 
164  if (__actionMap.existsFirst(actionId))
165  GUM_ERROR(DuplicateElement,
166  " An action with same id (" << actionId
167  << ") has already been inserted.");
168 
169  __actionMap.insert(actionId, new std::string(action));
170 
171  __actionTransitionTable.insert(actionId,
172  new VarTransitionTable< GUM_SCALAR >());
173  __actionCostTable.insert(actionId, nullptr);
174  __actionRewardTable.insert(actionId, nullptr);
175 
176  __actionSeq.insert(actionId);
177  }
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:278
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionCostTable
Table which give for each action cost table.
Definition: fmdp.h:282
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:286
Sequence< Idx > __actionSeq
Definition: fmdp.h:268
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:274
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:52
void insert(const Key &k)
Insert an element at the end of the sequence.
Definition: sequence_tpl.h:405
+ 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 198 of file fmdp.h.

198  {
199  this->addCostForAction(0, cost);
200  }
void addCostForAction(Idx actionId, const MultiDimImplementation< GUM_SCALAR > *cost)
Adds a cost table to specified action.
Definition: fmdp_tpl.h:254
const MultiDimImplementation< GUM_SCALAR > * cost(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:275

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

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

255  {
256  if (!__actionCostTable.exists(actionId))
257  GUM_ERROR(NotFound,
258  " Action " << actionName(actionId)
259  << " has not been declared before.");
260 
261  if (__actionCostTable[actionId] != nullptr)
262  GUM_ERROR(DuplicateElement,
263  " Action " << actionName(actionId) << " already has a cost table");
264 
266  }
Idx actionId(const std::string &) const
Returns action id.
Definition: fmdp_tpl.h:355
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionCostTable
Table which give for each action cost table.
Definition: fmdp.h:282
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:344
const MultiDimImplementation< GUM_SCALAR > * cost(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:275
#define GUM_ERROR(type, msg)
Definition: exceptions.h:52
+ 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 225 of file fmdp.h.

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

225  {
226  this->addRewardForAction(0, reward);
227  }
const MultiDimImplementation< GUM_SCALAR > * reward(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:321
void addRewardForAction(Idx actionId, const MultiDimImplementation< GUM_SCALAR > *reward)
Adds a default variable reward.
Definition: fmdp_tpl.h:299
+ 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 299 of file fmdp_tpl.h.

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

300  {
301  if (!__actionRewardTable.exists(actionId))
302  GUM_ERROR(NotFound,
303  " Action " << actionName(actionId)
304  << " has not been declared before.");
305 
306  if (__actionRewardTable[actionId] != nullptr)
307  GUM_ERROR(DuplicateElement,
308  " Action " << actionName(actionId)
309  << " already has a reward table");
310 
312  }
Idx actionId(const std::string &) const
Returns action id.
Definition: fmdp_tpl.h:355
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:344
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionRewardTable
Table which give for each action reward table.
Definition: fmdp.h:286
const MultiDimImplementation< GUM_SCALAR > * reward(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:321
#define GUM_ERROR(type, msg)
Definition: exceptions.h:52
+ 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 168 of file fmdp.h.

169  {
170  this->addTransitionForAction(0, var, transition);
171  }
void addTransitionForAction(Idx actionId, const DiscreteVariable *var, const MultiDimImplementation< GUM_SCALAR > *transition)
Adds a variable transition table to specified action.
Definition: fmdp_tpl.h:195
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:224

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

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

198  {
199  if (!__varSeq.exists(var))
200  GUM_ERROR(NotFound,
201  " Variable " << var->name() << " has not been declared before.");
202 
203  if (!__actionTransitionTable.exists(actionId))
204  GUM_ERROR(NotFound,
205  " Action " << actionName(actionId)
206  << " has not been declared before.");
207 
208  if (__actionTransitionTable[actionId]->exists(var))
209  GUM_ERROR(DuplicateElement,
210  " Variable " << var->name()
211  << " already has a transition table in " << actionId
212  << " table.");
213 
215  }
Idx actionId(const std::string &) const
Returns action id.
Definition: fmdp_tpl.h:355
HashTable< Idx, VarTransitionTable< GUM_SCALAR > *> __actionTransitionTable
Table which give for each action a table containing variables transition cpt.
Definition: fmdp.h:278
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:344
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:224
Sequence< const DiscreteVariable *> __varSeq
Sequence de variables and its iterator.
Definition: fmdp.h:266
#define GUM_ERROR(type, msg)
Definition: exceptions.h:52
+ 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 121 of file fmdp_tpl.h.

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

121  {
122  if (__varSeq.exists(var))
123  GUM_ERROR(DuplicateElement,
124  " Variable " << var->name()
125  << " has already been inserted in FMDP.");
126 
127 
128  __varSeq.insert(var);
129 
130  // Prime version creation
131  DiscreteVariable* primeVar = var->clone();
132  primeVar->setName(var->name() + "'");
133  __main2primed.insert(var, primeVar);
134  }
Bijection< const DiscreteVariable *, const DiscreteVariable *> __main2primed
Mapping from a main variable to its associated primed version.
Definition: fmdp.h:271
Sequence< const DiscreteVariable *> __varSeq
Sequence de variables and its iterator.
Definition: fmdp.h:266
#define GUM_ERROR(type, msg)
Definition: exceptions.h:52
+ 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 92 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().

92  {
93  return __varSeq.beginSafe();
94  }
Sequence< const DiscreteVariable *> __varSeq
Sequence de variables and its iterator.
Definition: fmdp.h:266
+ 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 275 of file fmdp_tpl.h.

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

275  {
276  if (!__actionCostTable.exists(actionId))
277  GUM_ERROR(NotFound,
278  " Action " << actionName(actionId)
279  << " has not been declared before.");
280 
281  if (__actionCostTable[actionId]) return __actionCostTable[actionId];
282  return __actionCostTable[0];
283  }
Idx actionId(const std::string &) const
Returns action id.
Definition: fmdp_tpl.h:355
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionCostTable
Table which give for each action cost table.
Definition: fmdp.h:282
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:344
#define GUM_ERROR(type, msg)
Definition: exceptions.h:52
+ 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 99 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().

99  {
100  return __varSeq.endSafe();
101  }
Sequence< const DiscreteVariable *> __varSeq
Sequence de variables and its iterator.
Definition: fmdp.h:266
+ 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 106 of file fmdp.h.

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

106  {
107  return __main2primed.second(mainVar);
108  }
Bijection< const DiscreteVariable *, const DiscreteVariable *> __main2primed
Mapping from a main variable to its associated primed version.
Definition: fmdp.h:271
+ 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 114 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().

114  {
115  return __main2primed;
116  }
Bijection< const DiscreteVariable *, const DiscreteVariable *> __main2primed
Mapping from a main variable to its associated primed version.
Definition: fmdp.h:271
+ 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 321 of file fmdp_tpl.h.

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

321  {
322  if (!__actionRewardTable.exists(actionId))
323  GUM_ERROR(NotFound,
324  " Action " << actionName(actionId)
325  << " has not been declared before.");
326 
327  if (__actionRewardTable[actionId]) return __actionRewardTable[actionId];
328  return __actionRewardTable[0];
329  }
Idx actionId(const std::string &) const
Returns action id.
Definition: fmdp_tpl.h:355
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:344
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionRewardTable
Table which give for each action reward table.
Definition: fmdp.h:286
#define GUM_ERROR(type, msg)
Definition: exceptions.h:52
+ 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 389 of file fmdp_tpl.h.

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

389  {
390  Size s = 0;
391  for (auto actionIter = beginActions(); actionIter != endActions();
392  ++actionIter) {
393  for (auto varIter = beginVariables(); varIter != endVariables(); ++varIter)
394  if (this->transition(*actionIter, *varIter))
395  s += this->transition(*actionIter, *varIter)->realSize();
396  if (this->reward(*actionIter)) s += this->reward(*actionIter)->realSize();
397  }
398 
399  for (auto varIter = beginVariables(); varIter != endVariables(); ++varIter)
400  if (this->transition(0, *varIter))
401  s += this->transition(0, *varIter)->realSize();
402  if (this->reward()) s += this->reward()->realSize();
403  return s;
404  }
SequenceIteratorSafe< Idx > beginActions() const
Returns an iterator reference to he beginning of the list of actions.
Definition: fmdp.h:134
SequenceIteratorSafe< const DiscreteVariable *> beginVariables() const
Returns an iterator reference to he beginning of the list of variables.
Definition: fmdp.h:92
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:224
const MultiDimImplementation< GUM_SCALAR > * reward(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:321
SequenceIteratorSafe< Idx > endActions() const
Returns an iterator reference to the end of the list of actions.
Definition: fmdp.h:141
SequenceIteratorSafe< const DiscreteVariable *> endVariables() const
Returns an iterator reference to the end of the list of variables.
Definition: fmdp.h:99
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:45
+ 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 367 of file fmdp_tpl.h.

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

367  {
368  std::stringstream fmdpCore;
369 
370  for (auto actionIter = beginActions(); actionIter != endActions();
371  ++actionIter) {
372  for (auto varIter = beginVariables(); varIter != endVariables(); ++varIter)
373  if (this->transition(*actionIter, *varIter))
374  fmdpCore << RECAST(this->transition(*actionIter, *varIter))->toDot()
375  << std::endl;
376  if (this->reward(*actionIter))
377  fmdpCore << RECAST(this->reward(*actionIter))->toDot() << std::endl;
378  }
379 
380  for (auto varIter = beginVariables(); varIter != endVariables(); ++varIter)
381  if (this->transition(0, *varIter))
382  fmdpCore << RECAST(this->transition(0, *varIter))->toDot() << std::endl;
383  if (this->reward()) fmdpCore << RECAST(this->reward())->toDot() << std::endl;
384  return fmdpCore.str();
385  }
SequenceIteratorSafe< Idx > beginActions() const
Returns an iterator reference to he beginning of the list of actions.
Definition: fmdp.h:134
SequenceIteratorSafe< const DiscreteVariable *> beginVariables() const
Returns an iterator reference to he beginning of the list of variables.
Definition: fmdp.h:92
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:224
const MultiDimImplementation< GUM_SCALAR > * reward(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:321
#define RECAST(x)
Definition: fmdp_tpl.h:33
SequenceIteratorSafe< Idx > endActions() const
Returns an iterator reference to the end of the list of actions.
Definition: fmdp.h:141
SequenceIteratorSafe< const DiscreteVariable *> endVariables() const
Returns an iterator reference to the end of the list of variables.
Definition: fmdp.h:99
+ 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 224 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().

225  {
226  if (!__actionTransitionTable.exists(actionId))
227  GUM_ERROR(NotFound,
228  " Action " << actionName(actionId)
229  << " has not been declared before.");
230 
231  if (__actionTransitionTable[actionId]->exists(v))
232  return (*__actionTransitionTable[actionId])[v];
233  else
234  return (*__actionTransitionTable[0]).exists(v)
235  ? (*__actionTransitionTable[0])[v]
236  : nullptr;
237  }
HashTable< Idx, VarTransitionTable< GUM_SCALAR > *> __actionTransitionTable
Table which give for each action a table containing variables transition cpt.
Definition: fmdp.h:278
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:344
#define GUM_ERROR(type, msg)
Definition: exceptions.h:52
+ 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 282 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 274 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 286 of file fmdp.h.

◆ __actionSeq

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

Definition at line 268 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 278 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 271 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 291 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 266 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: