aGrUM  0.14.2
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 47 of file mddOperatorStrategy.h.

Constructor & Destructor Documentation

◆ MDDOperatorStrategy()

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

Default constructor.

Definition at line 62 of file mddOperatorStrategy_tpl.h.

62  {
63  GUM_CONSTRUCTOR(MDDOperatorStrategy);
64  }
MDDOperatorStrategy()
Default constructor.

◆ ~MDDOperatorStrategy()

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

Default destructor.

Definition at line 70 of file mddOperatorStrategy_tpl.h.

70  {
71  GUM_DESTRUCTOR(MDDOperatorStrategy);
72  }
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 151 of file IOperatorStrategy.h.

153  {
154  if (del == 1 || del == 3) delete f1;
155  if (del >= 2) delete f2;
156  }

◆ _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 158 of file IOperatorStrategy.h.

163  {
164  if (del == 1 || del == 3) delete f1;
165  if (del >= 2) delete f2;
166  }

◆ _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 176 of file mddOperatorStrategy.h.

176  {
177  return function->variablesSequence().size() == 0
178  ? nullptr
179  : function->variablesSequence().atPos(
180  function->variablesSequence().size() - 1);
181  }
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 166 of file mddOperatorStrategy.h.

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

167  {
168  return v == nullptr ? false : fmdp->mapMainPrime().existsSecond(v);
169  }
+ 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 183 of file mddOperatorStrategy_tpl.h.

References gum::add2MultiDimFunctionGraphs().

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

186  {
188  this->_deleteFunctionGraph(f1, f2, del);
189  return ret;
190  }
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 160 of file mddOperatorStrategy_tpl.h.

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

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

165  {
166  MultiDimFunctionGraphOperator< ArgMaxSet< GUM_SCALAR, Idx >,
167  ArgumentMaximisesAction,
168  SetTerminalNodePolicy >
169  argmaxope(f1, f2);
170  MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >, SetTerminalNodePolicy >*
171  ret = argmaxope.compute();
172  this->_deleteFunctionGraph(f1, f2, del);
173  return ret;
174  }
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 77 of file mddOperatorStrategy.h.

77  {
78  return MultiDimFunctionGraph<
79  ArgMaxSet< GUM_SCALAR, Idx >,
80  SetTerminalNodePolicy >::getReducedAndOrderedInstance();
81  }

◆ getFunctionInstance()

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

Implements gum::IOperatorStrategy< GUM_SCALAR >.

Definition at line 73 of file mddOperatorStrategy.h.

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

73  {
75  }
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 119 of file mddOperatorStrategy_tpl.h.

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

122  {
124  maximize2MultiDimFunctionGraphs(f1, f2);
125  this->_deleteFunctionGraph(f1, f2, del);
126  return ret;
127  }
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 132 of file mddOperatorStrategy_tpl.h.

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

135  {
137  minimize2MultiDimFunctionGraphs(f1, f2);
138  this->_deleteFunctionGraph(f1, f2, del);
139  return ret;
140  }
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 145 of file mddOperatorStrategy_tpl.h.

References gum::multiply2MultiDimFunctionGraphs().

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

148  {
151  this->_deleteFunctionGraph(f1, f2, del);
152  return ret;
153  }
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 91 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().

95  {
98  qAction->copy(*Vold);
99 
100  const DiscreteVariable* xip = this->_lastVar(qAction);
101 
102  while (this->_shouldEleminateVar(xip, fmdp)) {
104  RECAST(fmdp->transition(actionId, fmdp->mapMainPrime().first(xip)));
105  Regress< GUM_SCALAR, std::multiplies, std::plus > r(
106  qAction, pxi, &elVarSeq, xip, (GUM_SCALAR)0);
107  MultiDimFunctionGraph< GUM_SCALAR >* temp = r.compute();
108  delete qAction;
109  qAction = temp;
110  xip = this->_lastVar(qAction);
111  }
112 
113  return qAction;
114  }
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 199 of file mddOperatorStrategy_tpl.h.

References gum::subtract2MultiDimFunctionGraphs().

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

202  {
205  this->_deleteFunctionGraph(f1, f2, del);
206  return ret;
207  }
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: