aGrUM 2.3.2
a C++ library for (probabilistic) graphical models
gum::MultiDimFunctionGraphProjector< GUM_SCALAR, FUNCTOR, TerminalNodePolicy > Class Template Reference

Class used to perform Function Graph projections. More...

#include <agrum/base/multidim/patterns/multiDimFunctionGraphProjector.h>

Collaboration diagram for gum::MultiDimFunctionGraphProjector< GUM_SCALAR, FUNCTOR, TerminalNodePolicy >:

Public Member Functions

Constructors / Destructors
 MultiDimFunctionGraphProjector (const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *src, const gum::VariableSet &delVars, const GUM_SCALAR neutral)
 Default constructor.
 ~MultiDimFunctionGraphProjector ()
 Default destructor.
Main Method
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * project ()
 Computes and builds the Function Graph that is the result of the Projection.

Private Attributes

const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _src_
 One of the two function graphs used for the Projection.
const gum::VariableSet_delVars_
 The list of variables on which the projection is performed.
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _rd_
 The resulting function graph.
const FUNCTOR< GUM_SCALAR > _function_
 The function to be performed on the leaves.
const GUM_SCALAR _neutral_
 The function to be performed on the leaves.

Detailed Description

template<typename GUM_SCALAR, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
class gum::MultiDimFunctionGraphProjector< GUM_SCALAR, FUNCTOR, TerminalNodePolicy >

Class used to perform Function Graph projections.

Definition at line 73 of file multiDimFunctionGraphProjector.h.

Constructor & Destructor Documentation

◆ MultiDimFunctionGraphProjector()

template<typename GUM_SCALAR, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy>
gum::MultiDimFunctionGraphProjector< GUM_SCALAR, FUNCTOR, TerminalNodePolicy >::MultiDimFunctionGraphProjector ( const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * src,
const gum::VariableSet & delVars,
const GUM_SCALAR neutral )

Default constructor.

Definition at line 62 of file multiDimFunctionGraphProjector_tpl.h.

66 :
70 }
Class used to perform Function Graph projections.
MultiDimFunctionGraphProjector(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *src, const gum::VariableSet &delVars, const GUM_SCALAR neutral)
Default constructor.
const gum::VariableSet & _delVars_
The list of variables on which the projection is performed.
const FUNCTOR< GUM_SCALAR > _function_
The function to be performed on the leaves.
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _rd_
The resulting function graph.
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _src_
One of the two function graphs used for the Projection.
const GUM_SCALAR _neutral_
The function to be performed on the leaves.
static MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * getReducedAndOrderedInstance()
Returns a reduced and ordered instance.

References MultiDimFunctionGraphProjector(), _delVars_, _function_, _neutral_, _rd_, _src_, and gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::getReducedAndOrderedInstance().

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

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~MultiDimFunctionGraphProjector()

template<typename GUM_SCALAR, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy>
gum::MultiDimFunctionGraphProjector< GUM_SCALAR, FUNCTOR, TerminalNodePolicy >::~MultiDimFunctionGraphProjector ( )

Default destructor.

Definition at line 76 of file multiDimFunctionGraphProjector_tpl.h.

References MultiDimFunctionGraphProjector().

Here is the call graph for this function:

Member Function Documentation

◆ project()

template<typename GUM_SCALAR, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy>
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * gum::MultiDimFunctionGraphProjector< GUM_SCALAR, FUNCTOR, TerminalNodePolicy >::project ( )

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

Definition at line 87 of file multiDimFunctionGraphProjector_tpl.h.

87 {
88 _rd_->copy(*_src_);
89
91 varIter != _delVars_.endSafe();
92 ++varIter) {
94
95 // Tout d'abord, on déplace la variable à projeter en fin de séquence afin
96 // de simplifier la projection
97 if (_rd_->variablesSequence().exists(curVar))
98 _rd_->manager()->moveTo(curVar, _rd_->variablesSequence().size() - 1);
99
100 // 1er cas spécial : le diagramme est un un simple noeud terminal
101 if (_rd_->isTerminalNode(_rd_->root())) {
102 GUM_SCALAR newVal = _neutral_, oldVal = _rd_->nodeValue(_rd_->root());
103 for (Idx curVarModality = 0; curVarModality < curVar->domainSize(); ++curVarModality)
105
106 NodeId newSonId = _rd_->manager()->addTerminalNode(newVal);
107 _rd_->manager()->setRootNode(newSonId);
108
109 if (_rd_->variablesSequence().exists(curVar)) _rd_->erase(*curVar);
110 continue;
111 }
112
113 // 2ème cas spécial : la racine du diagramme est associée à la variable
114 // projetée
115 if (_rd_->node(_rd_->root())->nodeVar() == curVar) {
116 const InternalNode* curVarNode = _rd_->node(_rd_->root());
118 for (Idx curVarModality = 0; curVarModality < curVar->domainSize(); ++curVarModality)
120
121 NodeId newSonId = _rd_->manager()->addTerminalNode(newVal);
122
123 _rd_->manager()->eraseNode(_rd_->root(), newSonId, false);
124
125 if (_rd_->variablesSequence().exists(curVar)) _rd_->erase(*curVar);
126 continue;
127 }
128
129 // Cas général
130 HashTable< NodeId, NodeId > visitedNode(2 * _rd_->realSize(), true, false);
132 filo.push_back(_rd_->root());
133
134 while (!filo.empty()) {
135 NodeId curNodeId = filo.back();
136 filo.pop_back();
137
138 const InternalNode* curNode = _rd_->node(curNodeId);
139
140 for (Idx modality = 0; modality < curNode->nodeVar()->domainSize(); ++modality) {
142
143 if (!visitedNode.exists(oldSonId)) {
145
146 if (!_rd_->isTerminalNode(oldSonId)) {
147 if (_rd_->node(oldSonId)->nodeVar() != curVar) {
148 filo.push_back(oldSonId);
149 } else {
150 const InternalNode* curVarNode = _rd_->node(oldSonId);
152 for (Idx curVarModality = 0; curVarModality < curVar->domainSize();
155
156 newSonId = _rd_->manager()->addTerminalNode(newVal);
157
158 _rd_->manager()->eraseNode(oldSonId, newSonId, false);
159 _rd_->manager()->setSon(curNodeId, modality, newSonId);
160 }
161
162 } else {
164 for (Idx curVarModality = 0; curVarModality < curVar->domainSize(); ++curVarModality)
166
167 newSonId = _rd_->manager()->addTerminalNode(newVal);
168 _rd_->manager()->setSon(curNodeId, modality, newSonId);
169 }
170
172
173 } else {
174 if (_rd_->node(curNodeId)->son(modality) != visitedNode[oldSonId])
175 _rd_->manager()->setSon(curNodeId, modality, visitedNode[oldSonId]);
176 }
177 }
178 }
179
180 if (_rd_->variablesSequence().exists(curVar)) _rd_->erase(*curVar);
181 }
182
183 return _rd_;
184 }

References _delVars_, _function_, _neutral_, _rd_, _src_, gum::DiscreteVariable::domainSize(), gum::HashTable< Key, Val >::exists(), gum::HashTable< Key, Val >::insert(), gum::InternalNode::nodeVar(), and gum::InternalNode::son().

Here is the call graph for this function:

Member Data Documentation

◆ _delVars_

template<typename GUM_SCALAR, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
const gum::VariableSet& gum::MultiDimFunctionGraphProjector< GUM_SCALAR, FUNCTOR, TerminalNodePolicy >::_delVars_
private

The list of variables on which the projection is performed.

Definition at line 112 of file multiDimFunctionGraphProjector.h.

Referenced by MultiDimFunctionGraphProjector(), and project().

◆ _function_

template<typename GUM_SCALAR, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
const FUNCTOR< GUM_SCALAR > gum::MultiDimFunctionGraphProjector< GUM_SCALAR, FUNCTOR, TerminalNodePolicy >::_function_
private

The function to be performed on the leaves.

Definition at line 118 of file multiDimFunctionGraphProjector.h.

Referenced by MultiDimFunctionGraphProjector(), and project().

◆ _neutral_

template<typename GUM_SCALAR, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
const GUM_SCALAR gum::MultiDimFunctionGraphProjector< GUM_SCALAR, FUNCTOR, TerminalNodePolicy >::_neutral_
private

The function to be performed on the leaves.

Definition at line 121 of file multiDimFunctionGraphProjector.h.

Referenced by MultiDimFunctionGraphProjector(), and project().

◆ _rd_

template<typename GUM_SCALAR, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >* gum::MultiDimFunctionGraphProjector< GUM_SCALAR, FUNCTOR, TerminalNodePolicy >::_rd_
private

The resulting function graph.

Definition at line 115 of file multiDimFunctionGraphProjector.h.

Referenced by MultiDimFunctionGraphProjector(), and project().

◆ _src_

template<typename GUM_SCALAR, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >* gum::MultiDimFunctionGraphProjector< GUM_SCALAR, FUNCTOR, TerminalNodePolicy >::_src_
private

One of the two function graphs used for the Projection.

Definition at line 109 of file multiDimFunctionGraphProjector.h.

Referenced by MultiDimFunctionGraphProjector(), and project().


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