aGrUM  0.14.2
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 50 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 42 of file treeOperator_tpl.h.

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

44  :
45  __dt1(dt1),
46  __dt2(dt2), __combine() {
47  GUM_CONSTRUCTOR(TreeOperator);
48 
49  __rd =
51  }
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __dt1
The two function graphs used for the operation.
Definition: treeOperator.h:99
const COMBINEOPERATOR< GUM_SCALAR > __combine
The function to be performed on the leaves.
Definition: treeOperator.h:106
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __rd
The resulting function graph.
Definition: treeOperator.h:103
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:100
+ 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 59 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().

62  :
63  __dt1(dt1),
64  __dt2(dt2), __combine(), __context(givenContext) {
65  GUM_CONSTRUCTOR(TreeOperator);
66 
67  __rd =
69  }
HashTable< const DiscreteVariable *, Idx > __context
Definition: treeOperator.h:108
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __dt1
The two function graphs used for the operation.
Definition: treeOperator.h:99
const COMBINEOPERATOR< GUM_SCALAR > __combine
The function to be performed on the leaves.
Definition: treeOperator.h:106
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __rd
The resulting function graph.
Definition: treeOperator.h:103
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:100
+ 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 77 of file treeOperator_tpl.h.

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

77  {
78  GUM_DESTRUCTOR(TreeOperator);
79  }
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 161 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().

161  {
162  bool diff = false;
163  for (Idx moda = 1; moda < var->domainSize() && !diff; ++moda)
164  if (sonsMap[0] != sonsMap[moda]) diff = true;
165 
166  if (!diff) {
167  NodeId zero = sonsMap[0];
168  DEALLOCATE(sonsMap, sizeof(NodeId) * var->domainSize());
169  return zero;
170  }
171 
172  return __rd->manager()->addInternalNode(var, sonsMap);
173  }
#define DEALLOCATE(x, y)
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __rd
The resulting function graph.
Definition: treeOperator.h:103
Size NodeId
Type for node ids.
Definition: graphElements.h:97
+ 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 103 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().

104  {
105  if (__dt1->isTerminalNode(currentNodeId)) {
106  __curDT1Leaf = currentNodeId;
107  return __xPloreDT2(__dt2->root());
108  }
109 
110  const InternalNode* currentNode = __dt1->node(currentNodeId);
111 
112  if (!__rd->variablesSequence().exists(currentNode->nodeVar()))
113  __rd->add(*(currentNode->nodeVar()));
114 
115  NodeId* sonsMap = static_cast< NodeId* >(
116  ALLOCATE(sizeof(NodeId) * currentNode->nodeVar()->domainSize()));
117  for (Idx moda = 0; moda < currentNode->nodeVar()->domainSize(); ++moda) {
118  __context.insert(currentNode->nodeVar(), moda);
119  sonsMap[moda] = __xPloreDT1(currentNode->son(moda));
120  __context.erase(currentNode->nodeVar());
121  }
122  return __checkRedundancy(currentNode->nodeVar(), sonsMap);
123  }
NodeId __checkRedundancy(const DiscreteVariable *, NodeId *)
HashTable< const DiscreteVariable *, Idx > __context
Definition: treeOperator.h:108
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:99
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __rd
The resulting function graph.
Definition: treeOperator.h:103
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __dt2
Definition: treeOperator.h:100
Size NodeId
Type for node ids.
Definition: graphElements.h:97
#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 131 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().

132  {
133  if (__dt2->isTerminalNode(currentNodeId))
134  return __rd->manager()->addTerminalNode(__combine(
135  __dt1->nodeValue(__curDT1Leaf), __dt2->nodeValue(currentNodeId)));
136 
137  const InternalNode* currentNode = __dt2->node(currentNodeId);
138 
139  if (!__rd->variablesSequence().exists(currentNode->nodeVar()))
140  __rd->add(*(currentNode->nodeVar()));
141 
142  if (__context.exists(currentNode->nodeVar()))
143  return __xPloreDT2(currentNode->son(__context[currentNode->nodeVar()]));
144 
145  NodeId* sonsMap = static_cast< NodeId* >(
146  ALLOCATE(sizeof(NodeId) * currentNode->nodeVar()->domainSize()));
147  for (Idx moda = 0; moda < currentNode->nodeVar()->domainSize(); ++moda) {
148  __context.insert(currentNode->nodeVar(), moda);
149  sonsMap[moda] = __xPloreDT2(currentNode->son(moda));
150  __context.erase(currentNode->nodeVar());
151  }
152  return __checkRedundancy(currentNode->nodeVar(), sonsMap);
153  }
NodeId __checkRedundancy(const DiscreteVariable *, NodeId *)
HashTable< const DiscreteVariable *, Idx > __context
Definition: treeOperator.h:108
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:99
const COMBINEOPERATOR< GUM_SCALAR > __combine
The function to be performed on the leaves.
Definition: treeOperator.h:106
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __rd
The resulting function graph.
Definition: treeOperator.h:103
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __dt2
Definition: treeOperator.h:100
Size NodeId
Type for node ids.
Definition: graphElements.h:97
#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 89 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().

89  {
90  __rd->manager()->setRootNode(__xPloreDT1(__dt1->root()));
91 
92  return __rd;
93  }
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:99
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __rd
The resulting function graph.
Definition: treeOperator.h:103
+ 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 106 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: