aGrUM  0.16.0
fmdp.h
Go to the documentation of this file.
1 
29 #ifndef GUM_FACTORED_MARKOV_DECISION_PROCESS_H
30 #define GUM_FACTORED_MARKOV_DECISION_PROCESS_H
31 //======================================================================
32 #include <string>
33 #include <vector>
34 //======================================================================
35 #include <agrum/core/bijection.h>
36 #include <agrum/core/hashTable.h>
37 #include <agrum/core/set.h>
38 //======================================================================
42 //======================================================================
43 
44 namespace gum {
56  template < typename GUM_SCALAR >
57  class FMDP {
58  template < typename GUM_SCALAR_O >
59  using VarTransitionTable =
62 
63  public:
64  // ===========================================================================
66  // ===========================================================================
68 
72  FMDP(bool onDestructionDeleteVar = false);
73 
77  ~FMDP();
78 
80 
81  // ===========================================================================
83  // ===========================================================================
85 
90  void addVariable(const DiscreteVariable* var);
91 
96  return __varSeq.beginSafe();
97  }
98 
103  return __varSeq.endSafe();
104  }
105 
109  const DiscreteVariable* main2prime(const DiscreteVariable* mainVar) const {
110  return __main2primed.second(mainVar);
111  }
112 
117  mapMainPrime() const {
118  return __main2primed;
119  }
120 
122 
123  // ===========================================================================
125  // ===========================================================================
127 
132  void addAction(Idx actionId, const std::string& action);
133 
138  return __actionSeq.beginSafe();
139  }
140 
145  return __actionSeq.endSafe();
146  }
147 
149 
150  // ===========================================================================
152  // ===========================================================================
154 
162  Idx actionId,
163  const DiscreteVariable* var,
165 
171  void addTransition(const DiscreteVariable* var,
172  const MultiDimImplementation< GUM_SCALAR >* transition) {
173  this->addTransitionForAction(0, var, transition);
174  }
175 
181  transition(Idx actionId, const DiscreteVariable* v) const;
182 
184 
185  // ===========================================================================
187  // ===========================================================================
189 
194  void addCostForAction(Idx actionId,
196 
202  this->addCostForAction(0, cost);
203  }
204 
208  const MultiDimImplementation< GUM_SCALAR >* cost(Idx actionId = 0) const;
209 
211 
212  // ===========================================================================
214  // ===========================================================================
216 
221  void addRewardForAction(Idx actionId,
223 
229  this->addRewardForAction(0, reward);
230  }
231 
235  const MultiDimImplementation< GUM_SCALAR >* reward(Idx actionId = 0) const;
236 
238 
239  // ===========================================================================
241  // ===========================================================================
243 
247  const std::string& actionName(Idx actionId) const;
248 
252  Idx actionId(const std::string&) const;
253 
257  std::string toString() const;
258 
262  Size size() const;
263 
264 
266 
267  private:
270 
272 
275 
278 
282 
286 
290 
295  };
296 
297 
298 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
299  extern template class FMDP< double >;
300 #endif
301 
302 
303 } /* namespace gum */
304 
305 
306 #include <agrum/FMDP/fmdp_tpl.h>
307 
308 #endif // GUM_FACTORED_MARKOV_DECISION_PROCESS_H
Safe iterators for Sequence.
Definition: sequence.h:1206
bool __onDestructionDeleteVars
Boolean indicates whether or not main variables should be deleted on destruction of this instance Usu...
Definition: fmdp.h:294
~FMDP()
Default destructor.
Definition: fmdp_tpl.h:68
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
const iterator_safe & endSafe() const noexcept
Returns the safe end iterator.
Definition: sequence_tpl.h:634
void addTransition(const DiscreteVariable *var, const MultiDimImplementation< GUM_SCALAR > *transition)
Adds a default variable transition.
Definition: fmdp.h:171
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
SequenceIteratorSafe< Idx > beginActions() const
Returns an iterator reference to he beginning of the list of actions.
Definition: fmdp.h:137
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
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionCostTable
Table which give for each action cost table.
Definition: fmdp.h:285
void addReward(const MultiDimImplementation< GUM_SCALAR > *reward)
Adds a default variable reward.
Definition: fmdp.h:228
The generic class for storing (ordered) sequences of objects.
Definition: sequence.h:1022
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:347
SequenceIteratorSafe< const DiscreteVariable *> beginVariables() const
Returns an iterator reference to he beginning of the list of variables.
Definition: fmdp.h:95
void addCostForAction(Idx actionId, const MultiDimImplementation< GUM_SCALAR > *cost)
Adds a cost table to specified action.
Definition: fmdp_tpl.h:257
INLINE const Bijection< const DiscreteVariable *, const DiscreteVariable *> & mapMainPrime() const
Returns the map binding main variables and prime variables.
Definition: fmdp.h:117
This class is used to implement factored decision process.
Definition: fmdp.h:57
Base class for discrete random variable.
void addCost(const MultiDimImplementation< GUM_SCALAR > *cost)
Adds a default variable cost.
Definition: fmdp.h:201
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Definition: agrum.h:25
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
The class for generic Hash Tables.
Definition: hashTable.h:679
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
iterator_safe beginSafe() const
Returns a safe begin iterator.
Definition: sequence_tpl.h:627
void addVariable(const DiscreteVariable *var)
Adds a variable to FMDP description.
Definition: fmdp_tpl.h:124
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionRewardTable
Table which give for each action reward table.
Definition: fmdp.h:289
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
Sequence< Idx > __actionSeq
Definition: fmdp.h:271
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
Size size() const
Returns the map binding main variables and prime variables.
Definition: fmdp_tpl.h:392
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
const DiscreteVariable * main2prime(const DiscreteVariable *mainVar) const
Returns the primed variable associate to the given main variable.
Definition: fmdp.h:109
Set of pairs of elements with fast search for both elements.
Definition: bijection.h:1805
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
const MultiDimImplementation< GUM_SCALAR > * cost(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:278
Bijection< Idx, const std::string *> __actionMap
Bijection mapping an action name to its id.
Definition: fmdp.h:277
SequenceIteratorSafe< Idx > endActions() const
Returns an iterator reference to the end of the list of actions.
Definition: fmdp.h:144
<agrum/multidim/multiDimImplementation.h>
Size Idx
Type for indexes.
Definition: types.h:53
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
Sequence< const DiscreteVariable *> __varSeq
Sequence de variables and its iterator.
Definition: fmdp.h:269
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
void addAction(Idx actionId, const std::string &action)
Adds an action to FMDP description.
Definition: fmdp_tpl.h:153
std::string toString() const
Displays the FMDP in a Dot format.
Definition: fmdp_tpl.h:370