aGrUM 2.3.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/base/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.
 TreeOperator (const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt1, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt2, const HashTable< const DiscreteVariable *, Idx > givenContext)
 Default constructor.
 ~TreeOperator ()
 Default destructor.
Main Method
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * compute ()
 Computes and builds the Function Graph that is the result of the operation.

Private Member Functions

NodeId _xPloreDT1_ (NodeId currentNodeId)
 The main recursion function.
NodeId _xPloreDT2_ (NodeId currentNodeId)
 The main recursion function.
NodeId _checkRedundancy_ (const DiscreteVariable *, NodeId *)

Private Attributes

const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt1_
 The two function graphs used for the operation.
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt2_
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _rd_
 The resulting function graph.
const COMBINEOPERATOR< GUM_SCALAR > _combine_
 The function to be performed on the leaves.
HashTable< const DiscreteVariable *, Idx_context_
NodeId _curDT1Leaf_

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 70 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 63 of file treeOperator_tpl.h.

65 :
68
70 }
static MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * getTreeInstance()
Returns an arborescent instance.
Class used to perform Decision Tree Operation in the FMDP Framework.
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt1_
The two function graphs used for the operation.
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _rd_
The resulting function graph.
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt2_
TreeOperator(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt1, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt2)
Default constructor.
const COMBINEOPERATOR< GUM_SCALAR > _combine_
The function to be performed on the leaves.

References TreeOperator(), _combine_, _dt1_, _dt2_, _rd_, and gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::getTreeInstance().

Referenced by TreeOperator(), TreeOperator(), and ~TreeOperator().

Here is the call graph for this function:
Here is the caller 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 75 of file treeOperator_tpl.h.

References TreeOperator(), _combine_, _context_, _dt1_, _dt2_, _rd_, and gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::getTreeInstance().

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 88 of file treeOperator_tpl.h.

88 {
90 }

References TreeOperator().

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 161 of file treeOperator_tpl.h.

163 {
164 bool diff = false;
165 for (Idx moda = 1; moda < var->domainSize() && !diff; ++moda)
166 if (sonsMap[0] != sonsMap[moda]) diff = true;
167
168 if (!diff) {
169 NodeId zero = sonsMap[0];
170 DEALLOCATE(sonsMap, sizeof(NodeId) * var->domainSize());
171 return zero;
172 }
173
174 return _rd_->manager()->addInternalNode(var, sonsMap);
175 }
#define DEALLOCATE(x, y)

References _rd_, DEALLOCATE, and gum::DiscreteVariable::domainSize().

Referenced by _xPloreDT1_(), and _xPloreDT2_().

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 109 of file treeOperator_tpl.h.

110 {
111 if (_dt1_->isTerminalNode(currentNodeId)) {
113 return _xPloreDT2_(_dt2_->root());
114 }
115
117
118 if (!_rd_->variablesSequence().exists(currentNode->nodeVar()))
119 _rd_->add(*(currentNode->nodeVar()));
120
122 = static_cast< NodeId* >(ALLOCATE(sizeof(NodeId) * currentNode->nodeVar()->domainSize()));
123 for (Idx moda = 0; moda < currentNode->nodeVar()->domainSize(); ++moda) {
124 _context_.insert(currentNode->nodeVar(), moda);
126 _context_.erase(currentNode->nodeVar());
127 }
128 return _checkRedundancy_(currentNode->nodeVar(), sonsMap);
129 }
NodeId _xPloreDT2_(NodeId currentNodeId)
The main recursion function.
NodeId _checkRedundancy_(const DiscreteVariable *, NodeId *)
NodeId _xPloreDT1_(NodeId currentNodeId)
The main recursion function.
#define ALLOCATE(x)

References _checkRedundancy_(), _context_, _curDT1Leaf_, _dt1_, _dt2_, _rd_, _xPloreDT1_(), _xPloreDT2_(), ALLOCATE, gum::DiscreteVariable::domainSize(), gum::InternalNode::nodeVar(), and gum::InternalNode::son().

Referenced by _xPloreDT1_(), and compute().

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.

135 {
136 if (_dt2_->isTerminalNode(currentNodeId))
137 return _rd_->manager()->addTerminalNode(
138 _combine_(_dt1_->nodeValue(_curDT1Leaf_), _dt2_->nodeValue(currentNodeId)));
139
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
149 = static_cast< NodeId* >(ALLOCATE(sizeof(NodeId) * currentNode->nodeVar()->domainSize()));
150 for (Idx moda = 0; moda < currentNode->nodeVar()->domainSize(); ++moda) {
151 _context_.insert(currentNode->nodeVar(), moda);
153 _context_.erase(currentNode->nodeVar());
154 }
155 return _checkRedundancy_(currentNode->nodeVar(), sonsMap);
156 }

References _checkRedundancy_(), _combine_, _context_, _curDT1Leaf_, _dt1_, _dt2_, _rd_, _xPloreDT2_(), ALLOCATE, gum::DiscreteVariable::domainSize(), gum::InternalNode::nodeVar(), and gum::InternalNode::son().

Referenced by _xPloreDT1_(), and _xPloreDT2_().

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 98 of file treeOperator_tpl.h.

98 {
99 _rd_->manager()->setRootNode(_xPloreDT1_(_dt1_->root()));
100
101 return _rd_;
102 }

References _dt1_, _rd_, and _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().

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 124 of file treeOperator.h.

Referenced by TreeOperator(), TreeOperator(), and _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

Definition at line 126 of file treeOperator.h.

Referenced by TreeOperator(), _xPloreDT1_(), and _xPloreDT2_().

◆ _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 127 of file treeOperator.h.

Referenced by _xPloreDT1_(), and _xPloreDT2_().

◆ _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 117 of file treeOperator.h.

Referenced by TreeOperator(), TreeOperator(), _xPloreDT1_(), _xPloreDT2_(), and compute().

◆ _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 118 of file treeOperator.h.

Referenced by TreeOperator(), TreeOperator(), _xPloreDT1_(), and _xPloreDT2_().

◆ _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 121 of file treeOperator.h.

Referenced by TreeOperator(), TreeOperator(), _checkRedundancy_(), _xPloreDT1_(), _xPloreDT2_(), and compute().


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