aGrUM  0.16.0
mddOperatorStrategy_tpl.h
Go to the documentation of this file.
1 
30 // =========================================================================
31 #include <algorithm>
32 #include <queue>
33 #include <thread>
34 #include <utility>
35 #include <vector>
36 // =========================================================================
37 #include <agrum/core/math/math.h>
38 #include <agrum/core/functors.h>
39 // =========================================================================
43 // =========================================================================
45 // =========================================================================
46 
48 #define RECAST(x) reinterpret_cast< const MultiDimFunctionGraph< GUM_SCALAR >* >(x)
49 
50 namespace gum {
51 
52 
53  /* **************************************************************************************************
54  * **/
55  /* ** **/
56  /* ** Constructors / Destructors **/
57  /* ** **/
58  /* **************************************************************************************************
59  * **/
60 
61  // ===========================================================================
62  // Default constructor
63  // ===========================================================================
64  template < typename GUM_SCALAR >
66  GUM_CONSTRUCTOR(MDDOperatorStrategy);
67  }
68 
69  // ===========================================================================
70  // Default destructor
71  // ===========================================================================
72  template < typename GUM_SCALAR >
74  GUM_DESTRUCTOR(MDDOperatorStrategy);
75  }
76 
77 
78  /* **************************************************************************************************
79  * **/
80  /* ** **/
81  /* ** Graph Function Operations Methods **/
82  /* ** **/
83  /* **************************************************************************************************
84  * **/
85 
86  // ==========================================================================
92  // ==========================================================================
93  template < typename GUM_SCALAR >
96  Idx actionId,
97  const FMDP< GUM_SCALAR >* fmdp,
98  const Set< const DiscreteVariable* >& elVarSeq) {
101  qAction->copy(*Vold);
102 
103  const DiscreteVariable* xip = this->_lastVar(qAction);
104 
105  while (this->_shouldEleminateVar(xip, fmdp)) {
107  RECAST(fmdp->transition(actionId, fmdp->mapMainPrime().first(xip)));
109  qAction, pxi, &elVarSeq, xip, (GUM_SCALAR)0);
111  delete qAction;
112  qAction = temp;
113  xip = this->_lastVar(qAction);
114  }
115 
116  return qAction;
117  }
118 
119  // ==========================================================================
120  // ==========================================================================
121  template < typename GUM_SCALAR >
125  Idx del) {
127  maximize2MultiDimFunctionGraphs(f1, f2);
128  this->_deleteFunctionGraph(f1, f2, del);
129  return ret;
130  }
131 
132  // ==========================================================================
133  // ==========================================================================
134  template < typename GUM_SCALAR >
138  Idx del) {
140  minimize2MultiDimFunctionGraphs(f1, f2);
141  this->_deleteFunctionGraph(f1, f2, del);
142  return ret;
143  }
144 
145  // ==========================================================================
146  // ==========================================================================
147  template < typename GUM_SCALAR >
151  Idx del) {
154  this->_deleteFunctionGraph(f1, f2, del);
155  return ret;
156  }
157 
158 
159  // ==========================================================================
160  // ==========================================================================
161  template < typename GUM_SCALAR >
165  SetTerminalNodePolicy >* f1,
167  SetTerminalNodePolicy >* f2,
168  Idx del) {
172  argmaxope(f1, f2);
174  ret = argmaxope.compute();
175  this->_deleteFunctionGraph(f1, f2, del);
176  return ret;
177  }
178 
179  // ==========================================================================
184  // ==========================================================================
185  template < typename GUM_SCALAR >
189  Idx del) {
191  this->_deleteFunctionGraph(f1, f2, del);
192  return ret;
193  }
194 
195  // ==========================================================================
200  // ==========================================================================
201  template < typename GUM_SCALAR >
205  Idx del) {
208  this->_deleteFunctionGraph(f1, f2, del);
209  return ret;
210  }
211 
212 
213 } // end of namespace gum
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
virtual MultiDimFunctionGraph< GUM_SCALAR > * subtract(const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del=0)
Subtract current VFunction from old VFunction to see if threshold is reached or not.
MultiDimFunctionGraph< GUM_SCALAR > * regress(const MultiDimFunctionGraph< GUM_SCALAR > *Vold, Idx actionId, const FMDP< GUM_SCALAR > *fmdp, const Set< const DiscreteVariable * > &elVarSeq)
Computes Qaction for given actionid.
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * compute()
Computes and builds the Function Graph that is the result of the operation.
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * compute()
Computes and builds the Function Graph that is the result of the operation.
Definition: regress_tpl.h:104
MDDOperatorStrategy()
Default constructor.
INLINE const Bijection< const DiscreteVariable *, const DiscreteVariable *> & mapMainPrime() const
Returns the map binding main variables and prime variables.
Definition: fmdp.h:117
MultiDimFunctionGraph< T > * subtract2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T > *t1, const MultiDimFunctionGraph< T > *t2)
a specialized function for subtracting two multiDimArraysThe function produces a tensorial subtractio...
This class is used to implement factored decision process.
Definition: fmdp.h:57
Base class for discrete random variable.
~MDDOperatorStrategy()
Default destructor.
<agrum/FMDP/planning/mddOperatorStrategy.h>
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.
Class to handle efficiently argMaxSet.
Definition: argMaxSet.h:57
Representation of a setA Set is a structure that contains arbitrary elements.
Definition: set.h:165
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
#define RECAST(x)
For shorter line and hence more comprehensive code only.
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
MultiDimFunctionGraph< T > * multiply2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T > *t1, const MultiDimFunctionGraph< T > *t2)
a specialized function for multiplying two multiDimArraysThe function produces a tensorial product of...
virtual MultiDimFunctionGraph< GUM_SCALAR > * multiply(const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del=3)
virtual MultiDimFunctionGraph< GUM_SCALAR > * maximize(const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del=3)
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
virtual void copy(const MultiDimContainer< GUM_SCALAR > &src)
Class used to perform Function Graph Operations.
Implementation of a Terminal Node Policy that maps nodeid to a set of value.
Class used to perform Function Graph Operations in the FMDP Framework.
Definition: regress.h:54
MultiDimFunctionGraph< T > * add2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T > *t1, const MultiDimFunctionGraph< T > *t2)
a specialized function for summing two multiDimArraysThe function produces a tensorial addition of t1...
virtual MultiDimFunctionGraph< GUM_SCALAR > * add(const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del=1)
Adds reward to given function( whether a qAction or vFunction)
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
virtual MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >, SetTerminalNodePolicy > * argmaximize(const MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >, SetTerminalNodePolicy > *f1, const MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >, SetTerminalNodePolicy > *f2, Idx del=3)
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Size Idx
Type for indexes.
Definition: types.h:53
virtual MultiDimFunctionGraph< GUM_SCALAR > * minimize(const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del=3)
<agrum/FMDP/planning/actionSet.h>
Definition: actionSet.h:58
static MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * getReducedAndOrderedInstance()
Returns a reduced and ordered instance.