aGrUM 3.1.1
a C++ library for (probabilistic) graphical models
gum::MultiDimFunctionGraphProjector< GUM_ELEMENT, 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_ELEMENT, FUNCTOR, TerminalNodePolicy >:

Public Member Functions

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

Private Attributes

const MultiDimFunctionGraph< GUM_ELEMENT, 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_ELEMENT, TerminalNodePolicy > * _rd_
 The resulting function graph.
const FUNCTOR< GUM_ELEMENT > _function_
 The function to be performed on the leaves.
const GUM_ELEMENT _neutral_
 The function to be performed on the leaves.

Detailed Description

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

Class used to perform Function Graph projections.

Definition at line 73 of file multiDimFunctionGraphProjector.h.

Constructor & Destructor Documentation

◆ MultiDimFunctionGraphProjector()

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

Default constructor.

Definition at line 63 of file multiDimFunctionGraphProjector_tpl.h.

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

References MultiDimFunctionGraphProjector(), _delVars_, _function_, _neutral_, _rd_, _src_, and gum::MultiDimFunctionGraph< GUM_ELEMENT, 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_ELEMENT, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy>
gum::MultiDimFunctionGraphProjector< GUM_ELEMENT, FUNCTOR, TerminalNodePolicy >::~MultiDimFunctionGraphProjector ( )

Default destructor.

Definition at line 77 of file multiDimFunctionGraphProjector_tpl.h.

References MultiDimFunctionGraphProjector().

Here is the call graph for this function:

Member Function Documentation

◆ project()

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

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

Definition at line 88 of file multiDimFunctionGraphProjector_tpl.h.

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

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_ELEMENT, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
const gum::VariableSet& gum::MultiDimFunctionGraphProjector< GUM_ELEMENT, 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_ELEMENT, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
const FUNCTOR< GUM_ELEMENT > gum::MultiDimFunctionGraphProjector< GUM_ELEMENT, 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_ELEMENT, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
const GUM_ELEMENT gum::MultiDimFunctionGraphProjector< GUM_ELEMENT, 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_ELEMENT, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >* gum::MultiDimFunctionGraphProjector< GUM_ELEMENT, 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_ELEMENT, template< typename > class FUNCTOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
const MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >* gum::MultiDimFunctionGraphProjector< GUM_ELEMENT, 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: