aGrUM  0.16.0
gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy > Class Template Reference

Class used to perform Decision Tree Operation in the FMDP Framework. More...

#include <agrum/multidim/patterns/treeOperator.h>

+ Collaboration diagram for gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >:

Public Member Functions

Constructors / Destructors
 TreeOperator (const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt1, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt2)
 Default constructor. More...
 
 TreeOperator (const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt1, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt2, const HashTable< const DiscreteVariable *, Idx > givenContext)
 Default constructor. More...
 
 ~TreeOperator ()
 Default destructor. More...
 
Main Method
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * compute ()
 Computes and builds the Function Graph that is the result of the operation. More...
 

Detailed Description

template<typename GUM_SCALAR, template< typename > class COMBINEOPERATOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
class gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >

Class used to perform Decision Tree Operation in the FMDP Framework.

Definition at line 53 of file treeOperator.h.

Constructor & Destructor Documentation

◆ TreeOperator() [1/2]

template<typename GUM_SCALAR , template< typename > class COMBINEOPERATOR, template< typename > class TerminalNodePolicy>
INLINE gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::TreeOperator ( const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *  dt1,
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *  dt2 
)

Default constructor.

Definition at line 45 of file treeOperator_tpl.h.

References gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__rd, and gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::getTreeInstance().

47  :
48  __dt1(dt1),
49  __dt2(dt2), __combine() {
50  GUM_CONSTRUCTOR(TreeOperator);
51 
52  __rd =
54  }
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __dt1
The two function graphs used for the operation.
Definition: treeOperator.h:102
const COMBINEOPERATOR< GUM_SCALAR > __combine
The function to be performed on the leaves.
Definition: treeOperator.h:109
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __rd
The resulting function graph.
Definition: treeOperator.h:106
TreeOperator(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt1, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt2)
Default constructor.
static MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * getTreeInstance()
Returns an arborescent instance.
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __dt2
Definition: treeOperator.h:103
+ Here is the call graph for this function:

◆ TreeOperator() [2/2]

template<typename GUM_SCALAR , template< typename > class COMBINEOPERATOR, template< typename > class TerminalNodePolicy>
INLINE gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::TreeOperator ( const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *  dt1,
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *  dt2,
const HashTable< const DiscreteVariable *, Idx givenContext 
)

Default constructor.

Definition at line 62 of file treeOperator_tpl.h.

References gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__rd, gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::getTreeInstance(), and gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::~TreeOperator().

65  :
66  __dt1(dt1),
67  __dt2(dt2), __combine(), __context(givenContext) {
68  GUM_CONSTRUCTOR(TreeOperator);
69 
70  __rd =
72  }
HashTable< const DiscreteVariable *, Idx > __context
Definition: treeOperator.h:111
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __dt1
The two function graphs used for the operation.
Definition: treeOperator.h:102
const COMBINEOPERATOR< GUM_SCALAR > __combine
The function to be performed on the leaves.
Definition: treeOperator.h:109
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __rd
The resulting function graph.
Definition: treeOperator.h:106
TreeOperator(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt1, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt2)
Default constructor.
static MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * getTreeInstance()
Returns an arborescent instance.
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __dt2
Definition: treeOperator.h:103
+ Here is the call graph for this function:

◆ ~TreeOperator()

template<typename GUM_SCALAR , template< typename > class COMBINEOPERATOR, template< typename > class TerminalNodePolicy>
INLINE gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::~TreeOperator ( )

Default destructor.

Definition at line 80 of file treeOperator_tpl.h.

Referenced by gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::TreeOperator().

80  {
81  GUM_DESTRUCTOR(TreeOperator);
82  }
TreeOperator(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt1, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt2)
Default constructor.
+ Here is the caller graph for this function:

Member Function Documentation

◆ __checkRedundancy()

template<typename GUM_SCALAR , template< typename > class COMBINEOPERATOR, template< typename > class TerminalNodePolicy>
INLINE NodeId gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__checkRedundancy ( const DiscreteVariable var,
NodeId sonsMap 
)
private

Definition at line 164 of file treeOperator_tpl.h.

References gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__rd, DEALLOCATE, and gum::DiscreteVariable::domainSize().

Referenced by gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__xPloreDT1(), and gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__xPloreDT2().

164  {
165  bool diff = false;
166  for (Idx moda = 1; moda < var->domainSize() && !diff; ++moda)
167  if (sonsMap[0] != sonsMap[moda]) diff = true;
168 
169  if (!diff) {
170  NodeId zero = sonsMap[0];
171  DEALLOCATE(sonsMap, sizeof(NodeId) * var->domainSize());
172  return zero;
173  }
174 
175  return __rd->manager()->addInternalNode(var, sonsMap);
176  }
#define DEALLOCATE(x, y)
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __rd
The resulting function graph.
Definition: treeOperator.h:106
Size NodeId
Type for node ids.
Definition: graphElements.h:98
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ __xPloreDT1()

template<typename GUM_SCALAR , template< typename > class COMBINEOPERATOR, template< typename > class TerminalNodePolicy>
INLINE NodeId gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__xPloreDT1 ( NodeId  currentNodeId)
private

The main recursion function.

Definition at line 106 of file treeOperator_tpl.h.

References gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__checkRedundancy(), gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__context, gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__curDT1Leaf, gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__dt1, gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__dt2, gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__rd, gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__xPloreDT2(), and ALLOCATE.

Referenced by gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::compute().

107  {
108  if (__dt1->isTerminalNode(currentNodeId)) {
109  __curDT1Leaf = currentNodeId;
110  return __xPloreDT2(__dt2->root());
111  }
112 
113  const InternalNode* currentNode = __dt1->node(currentNodeId);
114 
115  if (!__rd->variablesSequence().exists(currentNode->nodeVar()))
116  __rd->add(*(currentNode->nodeVar()));
117 
118  NodeId* sonsMap = static_cast< NodeId* >(
119  ALLOCATE(sizeof(NodeId) * currentNode->nodeVar()->domainSize()));
120  for (Idx moda = 0; moda < currentNode->nodeVar()->domainSize(); ++moda) {
121  __context.insert(currentNode->nodeVar(), moda);
122  sonsMap[moda] = __xPloreDT1(currentNode->son(moda));
123  __context.erase(currentNode->nodeVar());
124  }
125  return __checkRedundancy(currentNode->nodeVar(), sonsMap);
126  }
NodeId __checkRedundancy(const DiscreteVariable *, NodeId *)
HashTable< const DiscreteVariable *, Idx > __context
Definition: treeOperator.h:111
NodeId __xPloreDT2(NodeId currentNodeId)
The main recursion function.
NodeId __xPloreDT1(NodeId currentNodeId)
The main recursion function.
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __dt1
The two function graphs used for the operation.
Definition: treeOperator.h:102
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __rd
The resulting function graph.
Definition: treeOperator.h:106
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __dt2
Definition: treeOperator.h:103
Size NodeId
Type for node ids.
Definition: graphElements.h:98
#define ALLOCATE(x)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ __xPloreDT2()

template<typename GUM_SCALAR , template< typename > class COMBINEOPERATOR, template< typename > class TerminalNodePolicy>
INLINE NodeId gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__xPloreDT2 ( NodeId  currentNodeId)
private

The main recursion function.

Definition at line 134 of file treeOperator_tpl.h.

References gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__checkRedundancy(), gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__combine, gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__context, gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__curDT1Leaf, gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__dt1, gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__dt2, gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__rd, ALLOCATE, gum::DiscreteVariable::domainSize(), gum::InternalNode::nodeVar(), and gum::InternalNode::son().

Referenced by gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__xPloreDT1().

135  {
136  if (__dt2->isTerminalNode(currentNodeId))
137  return __rd->manager()->addTerminalNode(__combine(
138  __dt1->nodeValue(__curDT1Leaf), __dt2->nodeValue(currentNodeId)));
139 
140  const InternalNode* currentNode = __dt2->node(currentNodeId);
141 
142  if (!__rd->variablesSequence().exists(currentNode->nodeVar()))
143  __rd->add(*(currentNode->nodeVar()));
144 
145  if (__context.exists(currentNode->nodeVar()))
146  return __xPloreDT2(currentNode->son(__context[currentNode->nodeVar()]));
147 
148  NodeId* sonsMap = static_cast< NodeId* >(
149  ALLOCATE(sizeof(NodeId) * currentNode->nodeVar()->domainSize()));
150  for (Idx moda = 0; moda < currentNode->nodeVar()->domainSize(); ++moda) {
151  __context.insert(currentNode->nodeVar(), moda);
152  sonsMap[moda] = __xPloreDT2(currentNode->son(moda));
153  __context.erase(currentNode->nodeVar());
154  }
155  return __checkRedundancy(currentNode->nodeVar(), sonsMap);
156  }
NodeId __checkRedundancy(const DiscreteVariable *, NodeId *)
HashTable< const DiscreteVariable *, Idx > __context
Definition: treeOperator.h:111
NodeId __xPloreDT2(NodeId currentNodeId)
The main recursion function.
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __dt1
The two function graphs used for the operation.
Definition: treeOperator.h:102
const COMBINEOPERATOR< GUM_SCALAR > __combine
The function to be performed on the leaves.
Definition: treeOperator.h:109
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __rd
The resulting function graph.
Definition: treeOperator.h:106
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __dt2
Definition: treeOperator.h:103
Size NodeId
Type for node ids.
Definition: graphElements.h:98
#define ALLOCATE(x)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ compute()

template<typename GUM_SCALAR , template< typename > class COMBINEOPERATOR, template< typename > class TerminalNodePolicy>
INLINE MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::compute ( )

Computes and builds the Function Graph that is the result of the operation.

Definition at line 92 of file treeOperator_tpl.h.

References gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__dt1, gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__rd, and gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__xPloreDT1().

Referenced by gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::__xPloreVFunc(), gum::TreeOperatorStrategy< GUM_SCALAR >::add(), gum::TreeOperatorStrategy< GUM_SCALAR >::argmaximize(), gum::TreeOperatorStrategy< GUM_SCALAR >::maximize(), gum::TreeOperatorStrategy< GUM_SCALAR >::minimize(), gum::TreeOperatorStrategy< GUM_SCALAR >::multiply(), and gum::TreeOperatorStrategy< GUM_SCALAR >::subtract().

92  {
93  __rd->manager()->setRootNode(__xPloreDT1(__dt1->root()));
94 
95  return __rd;
96  }
NodeId __xPloreDT1(NodeId currentNodeId)
The main recursion function.
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __dt1
The two function graphs used for the operation.
Definition: treeOperator.h:102
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __rd
The resulting function graph.
Definition: treeOperator.h:106
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ __combine

template<typename GUM_SCALAR, template< typename > class COMBINEOPERATOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
const COMBINEOPERATOR< GUM_SCALAR > gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__combine
private

The function to be performed on the leaves.

Definition at line 109 of file treeOperator.h.

Referenced by gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__xPloreDT2().

◆ __context

template<typename GUM_SCALAR, template< typename > class COMBINEOPERATOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
HashTable< const DiscreteVariable*, Idx > gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__context
private

◆ __curDT1Leaf

template<typename GUM_SCALAR, template< typename > class COMBINEOPERATOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
NodeId gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__curDT1Leaf
private

◆ __dt1

template<typename GUM_SCALAR, template< typename > class COMBINEOPERATOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >* gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__dt1
private

◆ __dt2

template<typename GUM_SCALAR, template< typename > class COMBINEOPERATOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >* gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__dt2
private

◆ __rd

template<typename GUM_SCALAR, template< typename > class COMBINEOPERATOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >* gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::__rd
private

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