aGrUM  0.20.3
a C++ library for (probabilistic) graphical models
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 DiscreteVariablelastVar_ (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.

References gum::Set< Key, Alloc >::emplace().

65  {
66  GUM_CONSTRUCTOR(MDDOperatorStrategy);
67  }
MDDOperatorStrategy()
Default constructor.
+ Here is the call graph for this function:

◆ ~MDDOperatorStrategy()

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

Default destructor.

Definition at line 73 of file mddOperatorStrategy_tpl.h.

References gum::Set< Key, Alloc >::emplace().

73  {
74  GUM_DESTRUCTOR(MDDOperatorStrategy);
75  }
MDDOperatorStrategy()
Default constructor.
+ Here is the call graph for this function:

Member Function Documentation

◆ 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 185 of file mddOperatorStrategy_tpl.h.

References gum::Set< Key, Alloc >::emplace().

187  {
189  this->deleteFunctionGraph_(f1, f2, del);
190  return ret;
191  }
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:

◆ 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::Set< Key, Alloc >::emplace().

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

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

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

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

Referenced by gum::IOperatorStrategy< double >::deleteFunctionGraph_().

166  {
167  if (del == 1 || del == 3) delete f1;
168  if (del >= 2) delete f2;
169  }
+ Here is the caller graph for this function:

◆ getAggregatorInstance()

template<typename GUM_SCALAR >
MultiDimFunctionGraph< ActionSet, SetTerminalNodePolicy >* gum::MDDOperatorStrategy< GUM_SCALAR >::getAggregatorInstance ( )
inlinevirtual

Implements gum::IOperatorStrategy< GUM_SCALAR >.

Definition at line 83 of file mddOperatorStrategy.h.

References gum::MDDOperatorStrategy< GUM_SCALAR >::lastVar_().

83  {
84  return MultiDimFunctionGraph< ActionSet,
85  SetTerminalNodePolicy >::getReducedAndOrderedInstance();
86  }
+ Here is the call graph for this function:

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

References gum::MDDOperatorStrategy< GUM_SCALAR >::lastVar_().

79  {
80  return MultiDimFunctionGraph< ArgMaxSet< GUM_SCALAR, Idx >,
81  SetTerminalNodePolicy >::getReducedAndOrderedInstance();
82  }
+ Here is the call graph for this function:

◆ getFunctionInstance()

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

Implements gum::IOperatorStrategy< GUM_SCALAR >.

Definition at line 75 of file mddOperatorStrategy.h.

75  {
77  }
static MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * getReducedAndOrderedInstance()
Returns a reduced and ordered instance.

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

References gum::MDDOperatorStrategy< GUM_SCALAR >::lastVar_().

Referenced by gum::MDDOperatorStrategy< GUM_SCALAR >::getAggregatorInstance(), gum::MDDOperatorStrategy< GUM_SCALAR >::getArgMaxFunctionInstance(), gum::MDDOperatorStrategy< GUM_SCALAR >::lastVar_(), and gum::MDDOperatorStrategy< GUM_SCALAR >::shouldEleminateVar_().

170  {
171  return function->variablesSequence().size() == 0
172  ? nullptr
173  : function->variablesSequence().atPos(function->variablesSequence().size() - 1);
174  }
virtual const Sequence< const DiscreteVariable *> & variablesSequence() const override
Returns a const ref to the sequence of DiscreteVariable*.
+ Here is the call graph for this function:
+ Here is the caller 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 126 of file mddOperatorStrategy_tpl.h.

References gum::Set< Key, Alloc >::emplace().

128  {
129  MultiDimFunctionGraph< GUM_SCALAR >* ret = maximize2MultiDimFunctionGraphs(f1, f2);
130  this->deleteFunctionGraph_(f1, f2, del);
131  return ret;
132  }
INLINE void deleteFunctionGraph_(const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del)
+ Here is the call 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 138 of file mddOperatorStrategy_tpl.h.

References gum::Set< Key, Alloc >::emplace().

140  {
141  MultiDimFunctionGraph< GUM_SCALAR >* ret = minimize2MultiDimFunctionGraphs(f1, f2);
142  this->deleteFunctionGraph_(f1, f2, del);
143  return ret;
144  }
INLINE void deleteFunctionGraph_(const MultiDimFunctionGraph< GUM_SCALAR > *f1, const MultiDimFunctionGraph< GUM_SCALAR > *f2, Idx del)
+ Here is the call 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 150 of file mddOperatorStrategy_tpl.h.

References gum::Set< Key, Alloc >::emplace().

152  {
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:

◆ 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 95 of file mddOperatorStrategy_tpl.h.

References gum::Set< Key, Alloc >::emplace().

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(qAction,
109  pxi,
110  &elVarSeq,
111  xip,
112  (GUM_SCALAR)0);
113  MultiDimFunctionGraph< GUM_SCALAR >* temp = r.compute();
114  delete qAction;
115  qAction = temp;
116  xip = this->lastVar_(qAction);
117  }
118 
119  return qAction;
120  }
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.
virtual void copy(const MultiDimContainer< GUM_SCALAR > &src)
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.
static MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * getReducedAndOrderedInstance()
Returns a reduced and ordered instance.
+ Here is the call graph for this function:

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

References gum::MDDOperatorStrategy< GUM_SCALAR >::lastVar_().

162  {
163  return v == nullptr ? false : fmdp->mapMainPrime().existsSecond(v);
164  }
+ Here is the call 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 201 of file mddOperatorStrategy_tpl.h.

References gum::Set< Key, Alloc >::emplace().

203  {
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:

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