aGrUM  0.14.2
fmdp.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2005 by Christophe GONZALES and Pierre-Henri WUILLEMIN *
3  * {prenom.nom}_at_lip6.fr *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19  ***************************************************************************/
26 #ifndef GUM_FACTORED_MARKOV_DECISION_PROCESS_H
27 #define GUM_FACTORED_MARKOV_DECISION_PROCESS_H
28 //======================================================================
29 #include <string>
30 #include <vector>
31 //======================================================================
32 #include <agrum/core/bijection.h>
33 #include <agrum/core/hashTable.h>
34 #include <agrum/core/set.h>
35 //======================================================================
39 //======================================================================
40 
41 namespace gum {
53  template < typename GUM_SCALAR >
54  class FMDP {
55  template < typename GUM_SCALAR_O >
56  using VarTransitionTable =
59 
60  public:
61  // ===========================================================================
63  // ===========================================================================
65 
69  FMDP(bool onDestructionDeleteVar = false);
70 
74  ~FMDP();
75 
77 
78  // ===========================================================================
80  // ===========================================================================
82 
87  void addVariable(const DiscreteVariable* var);
88 
93  return __varSeq.beginSafe();
94  }
95 
100  return __varSeq.endSafe();
101  }
102 
106  const DiscreteVariable* main2prime(const DiscreteVariable* mainVar) const {
107  return __main2primed.second(mainVar);
108  }
109 
114  mapMainPrime() const {
115  return __main2primed;
116  }
117 
119 
120  // ===========================================================================
122  // ===========================================================================
124 
129  void addAction(Idx actionId, const std::string& action);
130 
135  return __actionSeq.beginSafe();
136  }
137 
142  return __actionSeq.endSafe();
143  }
144 
146 
147  // ===========================================================================
149  // ===========================================================================
151 
159  Idx actionId,
160  const DiscreteVariable* var,
162 
168  void addTransition(const DiscreteVariable* var,
169  const MultiDimImplementation< GUM_SCALAR >* transition) {
170  this->addTransitionForAction(0, var, transition);
171  }
172 
178  transition(Idx actionId, const DiscreteVariable* v) const;
179 
181 
182  // ===========================================================================
184  // ===========================================================================
186 
191  void addCostForAction(Idx actionId,
193 
199  this->addCostForAction(0, cost);
200  }
201 
205  const MultiDimImplementation< GUM_SCALAR >* cost(Idx actionId = 0) const;
206 
208 
209  // ===========================================================================
211  // ===========================================================================
213 
218  void addRewardForAction(Idx actionId,
220 
226  this->addRewardForAction(0, reward);
227  }
228 
232  const MultiDimImplementation< GUM_SCALAR >* reward(Idx actionId = 0) const;
233 
235 
236  // ===========================================================================
238  // ===========================================================================
240 
244  const std::string& actionName(Idx actionId) const;
245 
249  Idx actionId(const std::string&) const;
250 
254  std::string toString() const;
255 
259  Size size() const;
260 
261 
263 
264  private:
267 
269 
272 
275 
279 
283 
287 
292  };
293 
294 
295 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
296  extern template class FMDP< double >;
297 #endif
298 
299 
300 } /* namespace gum */
301 
302 
303 #include <agrum/FMDP/fmdp_tpl.h>
304 
305 #endif // GUM_FACTORED_MARKOV_DECISION_PROCESS_H
Safe iterators for Sequence.
Definition: sequence.h:1203
bool __onDestructionDeleteVars
Boolean indicates whether or not main variables should be deleted on destruction of this instance Usu...
Definition: fmdp.h:291
~FMDP()
Default destructor.
Definition: fmdp_tpl.h:65
Base class for discrete random variable.
const iterator_safe & endSafe() const noexcept
Returns the safe end iterator.
Definition: sequence_tpl.h:631
void addTransition(const DiscreteVariable *var, const MultiDimImplementation< GUM_SCALAR > *transition)
Adds a default variable transition.
Definition: fmdp.h:168
Sets of elements (i.e.
SequenceIteratorSafe< Idx > beginActions() const
Returns an iterator reference to he beginning of the list of actions.
Definition: fmdp.h:134
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
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionCostTable
Table which give for each action cost table.
Definition: fmdp.h:282
void addReward(const MultiDimImplementation< GUM_SCALAR > *reward)
Adds a default variable reward.
Definition: fmdp.h:225
The generic class for storing (ordered) sequences of objects.
Definition: sequence.h:1019
const std::string & actionName(Idx actionId) const
Returns name of action given in parameter.
Definition: fmdp_tpl.h:344
SequenceIteratorSafe< const DiscreteVariable *> beginVariables() const
Returns an iterator reference to he beginning of the list of variables.
Definition: fmdp.h:92
void addCostForAction(Idx actionId, const MultiDimImplementation< GUM_SCALAR > *cost)
Adds a cost table to specified action.
Definition: fmdp_tpl.h:254
INLINE const Bijection< const DiscreteVariable *, const DiscreteVariable *> & mapMainPrime() const
Returns the map binding main variables and prime variables.
Definition: fmdp.h:114
This class is used to implement factored decision process.
Definition: fmdp.h:54
Base class for discrete random variable.
void addCost(const MultiDimImplementation< GUM_SCALAR > *cost)
Adds a default variable cost.
Definition: fmdp.h:198
gum is the global namespace for all aGrUM entities
Definition: agrum.h:25
Headers of gum::MultiDimImplementation.
The class for generic Hash Tables.
Definition: hashTable.h:676
Template implementation of FMDP/FMDP.h classes.
iterator_safe beginSafe() const
Returns a safe begin iterator.
Definition: sequence_tpl.h:624
void addVariable(const DiscreteVariable *var)
Adds a variable to FMDP description.
Definition: fmdp_tpl.h:121
HashTable< Idx, const MultiDimImplementation< GUM_SCALAR > *> __actionRewardTable
Table which give for each action reward table.
Definition: fmdp.h:286
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
Sequence< Idx > __actionSeq
Definition: fmdp.h:268
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
Size size() const
Returns the map binding main variables and prime variables.
Definition: fmdp_tpl.h:389
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
const DiscreteVariable * main2prime(const DiscreteVariable *mainVar) const
Returns the primed variable associate to the given main variable.
Definition: fmdp.h:106
Set of pairs of elements with fast search for both elements.
Definition: bijection.h:1803
Headers of MultiDimFunctionGraph.
const MultiDimImplementation< GUM_SCALAR > * cost(Idx actionId=0) const
Returns the reward table of mdp.
Definition: fmdp_tpl.h:275
Bijection< Idx, const std::string *> __actionMap
Bijection mapping an action name to its id.
Definition: fmdp.h:274
SequenceIteratorSafe< Idx > endActions() const
Returns an iterator reference to the end of the list of actions.
Definition: fmdp.h:141
<agrum/multidim/multiDimImplementation.h>
Size Idx
Type for indexes.
Definition: types.h:50
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
Sequence< const DiscreteVariable *> __varSeq
Sequence de variables and its iterator.
Definition: fmdp.h:266
Class hash tables iterators.
Set of pairs of elements with fast search for both elements.
void addAction(Idx actionId, const std::string &action)
Adds an action to FMDP description.
Definition: fmdp_tpl.h:150
std::string toString() const
Displays the FMDP in a Dot format.
Definition: fmdp_tpl.h:367