aGrUM  0.20.2
a C++ library for (probabilistic) graphical models
gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy > Class Template Reference

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

#include <agrum/tools/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::Set< Key, Alloc >::emplace().

47  :
48  dt1__(dt1),
49  dt2__(dt2), combine__() {
50  GUM_CONSTRUCTOR(TreeOperator);
51 
52  rd__ = MultiDimFunctionGraph< GUM_SCALAR,
53  TerminalNodePolicy >::getTreeInstance();
54  }
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * rd__
The resulting function graph.
Definition: treeOperator.h:106
const COMBINEOPERATOR< GUM_SCALAR > combine__
The function to be performed on the leaves.
Definition: treeOperator.h:109
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * dt2__
Definition: treeOperator.h:103
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * dt1__
The two function graphs used for the operation.
Definition: treeOperator.h:102
TreeOperator(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt1, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt2)
Default constructor.
+ 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::Set< Key, Alloc >::emplace().

65  :
66  dt1__(dt1),
67  dt2__(dt2), combine__(), context__(givenContext) {
68  GUM_CONSTRUCTOR(TreeOperator);
69 
70  rd__ = MultiDimFunctionGraph< GUM_SCALAR,
71  TerminalNodePolicy >::getTreeInstance();
72  }
HashTable< const DiscreteVariable *, Idx > context__
Definition: treeOperator.h:111
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * rd__
The resulting function graph.
Definition: treeOperator.h:106
const COMBINEOPERATOR< GUM_SCALAR > combine__
The function to be performed on the leaves.
Definition: treeOperator.h:109
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * dt2__
Definition: treeOperator.h:103
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * dt1__
The two function graphs used for the operation.
Definition: treeOperator.h:102
TreeOperator(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt1, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt2)
Default constructor.
+ 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.

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

80  {
81  GUM_DESTRUCTOR(TreeOperator);
82  }
TreeOperator(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt1, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt2)
Default constructor.
+ Here is the call 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 165 of file treeOperator_tpl.h.

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

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

92  {
93  rd__->manager()->setRootNode(xPloreDT1__(dt1__->root()));
94 
95  return rd__;
96  }
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * rd__
The resulting function graph.
Definition: treeOperator.h:106
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * dt1__
The two function graphs used for the operation.
Definition: treeOperator.h:102
NodeId xPloreDT1__(NodeId currentNodeId)
The main recursion function.
+ Here is the call 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::Set< Key, Alloc >::emplace().

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  }
HashTable< const DiscreteVariable *, Idx > context__
Definition: treeOperator.h:111
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * rd__
The resulting function graph.
Definition: treeOperator.h:106
NodeId checkRedundancy__(const DiscreteVariable *, NodeId *)
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * dt2__
Definition: treeOperator.h:103
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * dt1__
The two function graphs used for the operation.
Definition: treeOperator.h:102
NodeId xPloreDT2__(NodeId currentNodeId)
The main recursion function.
NodeId xPloreDT1__(NodeId currentNodeId)
The main recursion function.
Size NodeId
Type for node ids.
Definition: graphElements.h:97
#define ALLOCATE(x)
+ Here is the call 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::Set< Key, Alloc >::emplace().

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

◆ 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

Definition at line 111 of file treeOperator.h.

◆ curDT1Leaf__

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

Definition at line 112 of file treeOperator.h.

◆ 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

The two function graphs used for the operation.

Definition at line 102 of file treeOperator.h.

◆ 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

Definition at line 103 of file treeOperator.h.

◆ 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 resulting function graph.

Definition at line 106 of file treeOperator.h.


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