aGrUM  0.20.3
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 52 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 44 of file treeOperator_tpl.h.

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

46  :
47  _dt1_(dt1),
48  _dt2_(dt2), _combine_() {
49  GUM_CONSTRUCTOR(TreeOperator);
50 
52  }
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt2_
Definition: treeOperator.h:100
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _rd_
The resulting function graph.
Definition: treeOperator.h:103
const COMBINEOPERATOR< GUM_SCALAR > _combine_
The function to be performed on the leaves.
Definition: treeOperator.h:106
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt1_
The two function graphs used for the operation.
Definition: treeOperator.h:99
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.
+ 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::Set< Key, Alloc >::emplace().

62  :
63  _dt1_(dt1),
64  _dt2_(dt2), _combine_(), _context_(givenContext) {
65  GUM_CONSTRUCTOR(TreeOperator);
66 
68  }
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt2_
Definition: treeOperator.h:100
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _rd_
The resulting function graph.
Definition: treeOperator.h:103
const COMBINEOPERATOR< GUM_SCALAR > _combine_
The function to be performed on the leaves.
Definition: treeOperator.h:106
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt1_
The two function graphs used for the operation.
Definition: treeOperator.h:99
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.
HashTable< const DiscreteVariable *, Idx > _context_
Definition: treeOperator.h:108
+ 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 75 of file treeOperator_tpl.h.

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

75  {
76  GUM_DESTRUCTOR(TreeOperator);
77  }
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 156 of file treeOperator_tpl.h.

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

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

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

101  {
102  if (_dt1_->isTerminalNode(currentNodeId)) {
103  _curDT1Leaf_ = currentNodeId;
104  return _xPloreDT2_(_dt2_->root());
105  }
106 
107  const InternalNode* currentNode = _dt1_->node(currentNodeId);
108 
109  if (!_rd_->variablesSequence().exists(currentNode->nodeVar()))
110  _rd_->add(*(currentNode->nodeVar()));
111 
112  NodeId* sonsMap
113  = static_cast< NodeId* >(ALLOCATE(sizeof(NodeId) * currentNode->nodeVar()->domainSize()));
114  for (Idx moda = 0; moda < currentNode->nodeVar()->domainSize(); ++moda) {
115  _context_.insert(currentNode->nodeVar(), moda);
116  sonsMap[moda] = _xPloreDT1_(currentNode->son(moda));
117  _context_.erase(currentNode->nodeVar());
118  }
119  return _checkRedundancy_(currentNode->nodeVar(), sonsMap);
120  }
NodeId _xPloreDT2_(NodeId currentNodeId)
The main recursion function.
NodeId _xPloreDT1_(NodeId currentNodeId)
The main recursion function.
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt2_
Definition: treeOperator.h:100
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _rd_
The resulting function graph.
Definition: treeOperator.h:103
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt1_
The two function graphs used for the operation.
Definition: treeOperator.h:99
NodeId _checkRedundancy_(const DiscreteVariable *, NodeId *)
HashTable< const DiscreteVariable *, Idx > _context_
Definition: treeOperator.h:108
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 127 of file treeOperator_tpl.h.

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

128  {
129  if (_dt2_->isTerminalNode(currentNodeId))
130  return _rd_->manager()->addTerminalNode(
131  _combine_(_dt1_->nodeValue(_curDT1Leaf_), _dt2_->nodeValue(currentNodeId)));
132 
133  const InternalNode* currentNode = _dt2_->node(currentNodeId);
134 
135  if (!_rd_->variablesSequence().exists(currentNode->nodeVar()))
136  _rd_->add(*(currentNode->nodeVar()));
137 
138  if (_context_.exists(currentNode->nodeVar()))
139  return _xPloreDT2_(currentNode->son(_context_[currentNode->nodeVar()]));
140 
141  NodeId* sonsMap
142  = static_cast< NodeId* >(ALLOCATE(sizeof(NodeId) * currentNode->nodeVar()->domainSize()));
143  for (Idx moda = 0; moda < currentNode->nodeVar()->domainSize(); ++moda) {
144  _context_.insert(currentNode->nodeVar(), moda);
145  sonsMap[moda] = _xPloreDT2_(currentNode->son(moda));
146  _context_.erase(currentNode->nodeVar());
147  }
148  return _checkRedundancy_(currentNode->nodeVar(), sonsMap);
149  }
NodeId _xPloreDT2_(NodeId currentNodeId)
The main recursion function.
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt2_
Definition: treeOperator.h:100
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _rd_
The resulting function graph.
Definition: treeOperator.h:103
const COMBINEOPERATOR< GUM_SCALAR > _combine_
The function to be performed on the leaves.
Definition: treeOperator.h:106
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt1_
The two function graphs used for the operation.
Definition: treeOperator.h:99
NodeId _checkRedundancy_(const DiscreteVariable *, NodeId *)
HashTable< const DiscreteVariable *, Idx > _context_
Definition: treeOperator.h:108
Size NodeId
Type for node ids.
Definition: graphElements.h:97
#define ALLOCATE(x)
+ 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 87 of file treeOperator_tpl.h.

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

87  {
88  _rd_->manager()->setRootNode(_xPloreDT1_(_dt1_->root()));
89 
90  return _rd_;
91  }
NodeId _xPloreDT1_(NodeId currentNodeId)
The main recursion function.
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _rd_
The resulting function graph.
Definition: treeOperator.h:103
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt1_
The two function graphs used for the operation.
Definition: treeOperator.h:99
+ 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 106 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 108 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 109 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 99 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 100 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 103 of file treeOperator.h.


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