aGrUM  0.16.0
gum::MDDOperatorStrategy< GUM_SCALAR > Class Template Reference

<agrum/FMDP/planning/mddOperatorStrategy.h> More...

#include <mddOperatorStrategy.h>

+ Inheritance diagram for gum::MDDOperatorStrategy< GUM_SCALAR >:
+ Collaboration diagram for gum::MDDOperatorStrategy< GUM_SCALAR >:

Public Member Functions

Constructor & destructor.
 MDDOperatorStrategy ()
 Default constructor. More...
 
 ~MDDOperatorStrategy ()
 Default destructor. More...
 
MultiDimFunctionGraph< GUM_SCALAR, ExactTerminalNodePolicy > * getFunctionInstance ()
 
MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >, SetTerminalNodePolicy > * getArgMaxFunctionInstance ()
 
MultiDimFunctionGraph< ActionSet, SetTerminalNodePolicy > * getAggregatorInstance ()
 

Protected Member Functions

INLINE bool _shouldEleminateVar (const DiscreteVariable *v, const FMDP< GUM_SCALAR > *fmdp)
 Indicates if whether or not given var is to be eliminated. Called by the evalQaction. More...
 
INLINE const DiscreteVariable_lastVar (const MultiDimFunctionGraph< GUM_SCALAR > *function)
 Returns the last var in the var order for given graph function Called by the evalQaction. More...
 
INLINE void _deleteFunctionGraph (const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del)
 
INLINE void _deleteFunctionGraph (const MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >, SetTerminalNodePolicy > *f1, const MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >, SetTerminalNodePolicy > *f2, Idx del)
 
Graph Function Operations Methods
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. More...
 
virtual MultiDimFunctionGraph< GUM_SCALAR > * maximize (const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del=3)
 
virtual MultiDimFunctionGraph< GUM_SCALAR > * minimize (const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del=3)
 
virtual MultiDimFunctionGraph< GUM_SCALAR > * multiply (const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del=3)
 
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)
 
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) More...
 
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. More...
 

Detailed Description

template<typename GUM_SCALAR>
class gum::MDDOperatorStrategy< GUM_SCALAR >

<agrum/FMDP/planning/mddOperatorStrategy.h>

A class to find optimal policy for a given FMDP.

Perform a SPUDD planning on given in parameter factored markov decision process

Definition at line 50 of file mddOperatorStrategy.h.

Constructor & Destructor Documentation

◆ MDDOperatorStrategy()

template<typename GUM_SCALAR >
INLINE gum::MDDOperatorStrategy< GUM_SCALAR >::MDDOperatorStrategy ( )

Default constructor.

Definition at line 65 of file mddOperatorStrategy_tpl.h.

65  {
66  GUM_CONSTRUCTOR(MDDOperatorStrategy);
67  }
MDDOperatorStrategy()
Default constructor.

◆ ~MDDOperatorStrategy()

template<typename GUM_SCALAR >
INLINE gum::MDDOperatorStrategy< GUM_SCALAR >::~MDDOperatorStrategy ( )

Default destructor.

Definition at line 73 of file mddOperatorStrategy_tpl.h.

73  {
74  GUM_DESTRUCTOR(MDDOperatorStrategy);
75  }
MDDOperatorStrategy()
Default constructor.

Member Function Documentation

◆ _deleteFunctionGraph() [1/2]

template<typename GUM_SCALAR>
INLINE void gum::IOperatorStrategy< GUM_SCALAR >::_deleteFunctionGraph ( const MultiDimFunctionGraph< GUM_SCALAR > *  f1,
const MultiDimFunctionGraph< GUM_SCALAR > *  f2,
Idx  del 
)
inlineprotectedinherited

Definition at line 154 of file IOperatorStrategy.h.

156  {
157  if (del == 1 || del == 3) delete f1;
158  if (del >= 2) delete f2;
159  }

◆ _deleteFunctionGraph() [2/2]

template<typename GUM_SCALAR>
INLINE void gum::IOperatorStrategy< GUM_SCALAR >::_deleteFunctionGraph ( const MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >, SetTerminalNodePolicy > *  f1,
const MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >, SetTerminalNodePolicy > *  f2,
Idx  del 
)
inlineprotectedinherited

Definition at line 161 of file IOperatorStrategy.h.

166  {
167  if (del == 1 || del == 3) delete f1;
168  if (del >= 2) delete f2;
169  }

◆ _lastVar()

template<typename GUM_SCALAR >
INLINE const DiscreteVariable* gum::MDDOperatorStrategy< GUM_SCALAR >::_lastVar ( const MultiDimFunctionGraph< GUM_SCALAR > *  function)
inlineprotected

Returns the last var in the var order for given graph function Called by the evalQaction.

Definition at line 179 of file mddOperatorStrategy.h.

179  {
180  return function->variablesSequence().size() == 0
181  ? nullptr
182  : function->variablesSequence().atPos(
183  function->variablesSequence().size() - 1);
184  }
virtual const Sequence< const DiscreteVariable *> & variablesSequence() const override
Returns a const ref to the sequence of DiscreteVariable*.

◆ _shouldEleminateVar()

template<typename GUM_SCALAR >
INLINE bool gum::MDDOperatorStrategy< GUM_SCALAR >::_shouldEleminateVar ( const DiscreteVariable v,
const FMDP< GUM_SCALAR > *  fmdp 
)
inlineprotected

Indicates if whether or not given var is to be eliminated. Called by the evalQaction.

Definition at line 169 of file mddOperatorStrategy.h.

References gum::FMDP< GUM_SCALAR >::mapMainPrime().

170  {
171  return v == nullptr ? false : fmdp->mapMainPrime().existsSecond(v);
172  }
+ Here is the call graph for this function:

◆ add()

template<typename GUM_SCALAR >
MultiDimFunctionGraph< GUM_SCALAR > * gum::MDDOperatorStrategy< GUM_SCALAR >::add ( const MultiDimFunctionGraph< GUM_SCALAR > *  f1,
const MultiDimFunctionGraph< GUM_SCALAR > *  f2,
Idx  del = 1 
)
protectedvirtual

Adds reward to given function( whether a qAction or vFunction)

Warning
given function is deleted, returns the new one
Parameters
reward: R(s) or R(s,a)
function: either V(s) or Q(s,a)
Warning
given function is deleted, returns the new one

Implements gum::IOperatorStrategy< GUM_SCALAR >.

Definition at line 186 of file mddOperatorStrategy_tpl.h.

References gum::add2MultiDimFunctionGraphs().

Referenced by gum::MDDOperatorStrategy< GUM_SCALAR >::getAggregatorInstance().

189  {
191  this->_deleteFunctionGraph(f1, f2, del);
192  return ret;
193  }
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...
INLINE void _deleteFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ argmaximize()

template<typename GUM_SCALAR >
MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >, SetTerminalNodePolicy > * gum::MDDOperatorStrategy< GUM_SCALAR >::argmaximize ( const MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >, SetTerminalNodePolicy > *  f1,
const MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >, SetTerminalNodePolicy > *  f2,
Idx  del = 3 
)
protectedvirtual
Warning
given vFunction and qAction are deleted, returns the new one

Implements gum::IOperatorStrategy< GUM_SCALAR >.

Definition at line 163 of file mddOperatorStrategy_tpl.h.

References gum::MultiDimFunctionGraphOperator< GUM_SCALAR, FUNCTOR, TerminalNodePolicy >::compute().

Referenced by gum::MDDOperatorStrategy< GUM_SCALAR >::getAggregatorInstance().

168  {
169  MultiDimFunctionGraphOperator< ArgMaxSet< GUM_SCALAR, Idx >,
170  ArgumentMaximisesAction,
171  SetTerminalNodePolicy >
172  argmaxope(f1, f2);
173  MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >, SetTerminalNodePolicy >*
174  ret = argmaxope.compute();
175  this->_deleteFunctionGraph(f1, f2, del);
176  return ret;
177  }
INLINE void _deleteFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getAggregatorInstance()

◆ getArgMaxFunctionInstance()

template<typename GUM_SCALAR >
MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >, SetTerminalNodePolicy >* gum::MDDOperatorStrategy< GUM_SCALAR >::getArgMaxFunctionInstance ( )
inlinevirtual

Implements gum::IOperatorStrategy< GUM_SCALAR >.

Definition at line 80 of file mddOperatorStrategy.h.

80  {
81  return MultiDimFunctionGraph<
82  ArgMaxSet< GUM_SCALAR, Idx >,
83  SetTerminalNodePolicy >::getReducedAndOrderedInstance();
84  }

◆ getFunctionInstance()

template<typename GUM_SCALAR >
MultiDimFunctionGraph< GUM_SCALAR, ExactTerminalNodePolicy >* gum::MDDOperatorStrategy< GUM_SCALAR >::getFunctionInstance ( )
inlinevirtual

Implements gum::IOperatorStrategy< GUM_SCALAR >.

Definition at line 76 of file mddOperatorStrategy.h.

References gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::getReducedAndOrderedInstance().

76  {
78  }
static MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * getReducedAndOrderedInstance()
Returns a reduced and ordered instance.
+ Here is the call graph for this function:

◆ maximize()

template<typename GUM_SCALAR >
MultiDimFunctionGraph< GUM_SCALAR > * gum::MDDOperatorStrategy< GUM_SCALAR >::maximize ( const MultiDimFunctionGraph< GUM_SCALAR > *  f1,
const MultiDimFunctionGraph< GUM_SCALAR > *  f2,
Idx  del = 3 
)
protectedvirtual
Warning
given vFunction and qAction are deleted, returns the new one

Implements gum::IOperatorStrategy< GUM_SCALAR >.

Definition at line 122 of file mddOperatorStrategy_tpl.h.

Referenced by gum::MDDOperatorStrategy< GUM_SCALAR >::getAggregatorInstance().

125  {
127  maximize2MultiDimFunctionGraphs(f1, f2);
128  this->_deleteFunctionGraph(f1, f2, del);
129  return ret;
130  }
INLINE void _deleteFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del)
+ Here is the caller graph for this function:

◆ minimize()

template<typename GUM_SCALAR >
MultiDimFunctionGraph< GUM_SCALAR > * gum::MDDOperatorStrategy< GUM_SCALAR >::minimize ( const MultiDimFunctionGraph< GUM_SCALAR > *  f1,
const MultiDimFunctionGraph< GUM_SCALAR > *  f2,
Idx  del = 3 
)
protectedvirtual
Warning
Minimze the two given functions

Implements gum::IOperatorStrategy< GUM_SCALAR >.

Definition at line 135 of file mddOperatorStrategy_tpl.h.

Referenced by gum::MDDOperatorStrategy< GUM_SCALAR >::getAggregatorInstance().

138  {
140  minimize2MultiDimFunctionGraphs(f1, f2);
141  this->_deleteFunctionGraph(f1, f2, del);
142  return ret;
143  }
INLINE void _deleteFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del)
+ Here is the caller graph for this function:

◆ multiply()

template<typename GUM_SCALAR >
MultiDimFunctionGraph< GUM_SCALAR > * gum::MDDOperatorStrategy< GUM_SCALAR >::multiply ( const MultiDimFunctionGraph< GUM_SCALAR > *  f1,
const MultiDimFunctionGraph< GUM_SCALAR > *  f2,
Idx  del = 3 
)
protectedvirtual
Warning
given f1 and f2 are deleted, returns the new one

Implements gum::IOperatorStrategy< GUM_SCALAR >.

Definition at line 148 of file mddOperatorStrategy_tpl.h.

References gum::multiply2MultiDimFunctionGraphs().

Referenced by gum::MDDOperatorStrategy< GUM_SCALAR >::getAggregatorInstance().

151  {
154  this->_deleteFunctionGraph(f1, f2, del);
155  return ret;
156  }
MultiDimFunctionGraph< T > * multiply2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T > *t1, const MultiDimFunctionGraph< T > *t2)
a specialized function for multiplying two multiDimArraysThe function produces a tensorial product of...
INLINE void _deleteFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ regress()

template<typename GUM_SCALAR >
MultiDimFunctionGraph< GUM_SCALAR > * gum::MDDOperatorStrategy< GUM_SCALAR >::regress ( const MultiDimFunctionGraph< GUM_SCALAR > *  Vold,
Idx  actionId,
const FMDP< GUM_SCALAR > *  fmdp,
const Set< const DiscreteVariable * > &  elVarSeq 
)
protectedvirtual

Computes Qaction for given actionid.

Performs a multiplication/projection on given qAction.

Parameters
qAction: the computed Q(s,a)
pxip: the transition probabilities for the xip variable
xip: the variable we eliminate on the projection
Warning
given qAction is deleted, return the new one

Implements gum::IOperatorStrategy< GUM_SCALAR >.

Definition at line 94 of file mddOperatorStrategy_tpl.h.

References gum::Regress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::compute(), gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::copy(), gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::getReducedAndOrderedInstance(), gum::FMDP< GUM_SCALAR >::mapMainPrime(), RECAST, and gum::FMDP< GUM_SCALAR >::transition().

Referenced by gum::MDDOperatorStrategy< GUM_SCALAR >::getAggregatorInstance().

98  {
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)));
108  Regress< GUM_SCALAR, std::multiplies, std::plus > r(
109  qAction, pxi, &elVarSeq, xip, (GUM_SCALAR)0);
110  MultiDimFunctionGraph< GUM_SCALAR >* temp = r.compute();
111  delete qAction;
112  qAction = temp;
113  xip = this->_lastVar(qAction);
114  }
115 
116  return qAction;
117  }
INLINE bool _shouldEleminateVar(const DiscreteVariable *v, const FMDP< GUM_SCALAR > *fmdp)
Indicates if whether or not given var is to be eliminated. Called by the evalQaction.
#define RECAST(x)
For shorter line and hence more comprehensive code only.
INLINE const DiscreteVariable * _lastVar(const MultiDimFunctionGraph< GUM_SCALAR > *function)
Returns the last var in the var order for given graph function Called by the evalQaction.
virtual void copy(const MultiDimContainer< GUM_SCALAR > &src)
static MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * getReducedAndOrderedInstance()
Returns a reduced and ordered instance.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ subtract()

template<typename GUM_SCALAR >
MultiDimFunctionGraph< GUM_SCALAR > * gum::MDDOperatorStrategy< GUM_SCALAR >::subtract ( const MultiDimFunctionGraph< GUM_SCALAR > *  f1,
const MultiDimFunctionGraph< GUM_SCALAR > *  f2,
Idx  del = 0 
)
protectedvirtual

Subtract current VFunction from old VFunction to see if threshold is reached or not.

Warning
this time, nothing is deleted
Parameters
oldand new VFuntion
Warning
this time, nothing is deleted

Implements gum::IOperatorStrategy< GUM_SCALAR >.

Definition at line 202 of file mddOperatorStrategy_tpl.h.

References gum::subtract2MultiDimFunctionGraphs().

Referenced by gum::MDDOperatorStrategy< GUM_SCALAR >::getAggregatorInstance().

205  {
208  this->_deleteFunctionGraph(f1, f2, del);
209  return ret;
210  }
MultiDimFunctionGraph< T > * subtract2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T > *t1, const MultiDimFunctionGraph< T > *t2)
a specialized function for subtracting two multiDimArraysThe function produces a tensorial subtractio...
INLINE void _deleteFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

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