31 #ifndef GUM_MULTI_DIM_FUNCTION_GRAPH_MANAGER_H 32 # define GUM_MULTI_DIM_FUNCTION_GRAPH_MANAGER_H 34 # include <agrum/agrum.h> 35 # include <agrum/tools/graphs/parts/nodeGraphPart.h> 36 # include <agrum/tools/multidim/implementations/multiDimFunctionGraph.h> 37 # include <agrum/tools/multidim/utils/FunctionGraphUtilities/internalNode.h> 41 template <
typename GUM_SCALAR,
template <
typename >
class TerminalNodePolicy >
76 template <
typename GUM_SCALAR,
template <
typename >
class TerminalNodePolicy >
100 MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >* master);
191 void eraseNode(NodeId id, NodeId replacingId = 0,
bool updateParents =
true);
205 void setSon(
const NodeId& node,
const Idx& modality,
const NodeId& sonNode);
218 void moveTo(
const DiscreteVariable* x, Idx desiredPos);
231 void _adjacentSwap_(
const DiscreteVariable* x,
const DiscreteVariable* y);
289 bool _isRedundant_(
const DiscreteVariable* var, NodeId* sons);
295 virtual void reduce() = 0;
335 template <
typename GUM_SCALAR,
template <
typename >
class TerminalNodePolicy >
351 MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >* master);
389 template <
typename GUM_SCALAR,
template <
typename >
class TerminalNodePolicy >
422 # include <agrum/tools/multidim/implementations/multiDimFunctionGraphManager_tpl.h> virtual void reduce()
Ensures that every isomorphic subgraphs are merged together.
NodeId _checkIsomorphism_(const DiscreteVariable *var, NodeId *sons)
Checks if a similar node does not already exists in the graph.
friend MultiDimFunctionGraphManager< GUM_SCALAR, TerminalNodePolicy > * MultiDimFunctionGraph()
This friend methods from is the only way to get an instance of a manager.
void setSon(const NodeId &node, const Idx &modality, const NodeId &sonNode)
Sets nodes son for given modality to designated son node.
void clean()
Removes var without nodes in the diagram.
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _functionGraph_
The multidimdecisiongraph supposed to be edited.
~MultiDimFunctionGraphTreeManager()
Class destructor.
void setRootNode(const NodeId &root)
Sets root node of decision diagram.
bool _isRedundant_(const DiscreteVariable *var, NodeId *sons)
Checks if node has the same child for every variable value.
HashTable< const DiscreteVariable *, LinkedList< NodeId > *> _var2NodeIdMap_
Mapping between var and node.
friend MultiDimFunctionGraphManager< GUM_SCALAR, TerminalNodePolicy > * MultiDimFunctionGraph()
This friend methods from is the only way to get an instance of a manager.
NodeId nodeRedundancyCheck_(const DiscreteVariable *var, NodeId *sonsMap)
Check for redundancy.
INLINE void emplace(Args &&... args)
void reduce_()
Ensures that every isomorphic subgraphs are merged together.
friend MultiDimFunctionGraphManager< GUM_SCALAR, TerminalNodePolicy > * MultiDimFunctionGraph()
This friend methods from is the only way to get an instance of a manager.
NodeId addInternalNode(const DiscreteVariable *var)
Inserts a new non terminal node in graph.
void moveTo(const DiscreteVariable *x, Idx desiredPos)
Changes var position in variable sequence.
void eraseNode(NodeId id, NodeId replacingId=0, bool updateParents=true)
Erases a node from the diagram.
void _adjacentSwap_(const DiscreteVariable *x, const DiscreteVariable *y)
Swap two adjacent variable.
virtual NodeId addInternalNode(const DiscreteVariable *var, NodeId *sons)
Inserts a new non terminal node in graph.
NodeId addInternalNode_(const DiscreteVariable *var, NodeId *sons)
Adds an internal node.
void migrateNode_(const NodeId &x, const NodeId &y)
Remaps all arcs going to ou going from the first given node to the second node, then delete first nod...
void minimizeSize()
Performs a sifting in search of a(local) minimal size.
MultiDimFunctionGraphManager(MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *master)
Default constructor.
virtual void reduce()
Ensures that every isomorphic subgraphs are merged together.
NodeId addInternalNode(const DiscreteVariable *var, NodeId nid)
Inserts a new non terminal node in graph.
~MultiDimFunctionGraphROManager()
MultiDimFunctionGraphROManager(MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *master)
MultiDimFunctionGraphTreeManager(MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *master)
Class constructor.
NodeId addTerminalNode(const GUM_SCALAR &value)
Adds a value to the MultiDimFunctionGraph.
virtual NodeId addInternalNode(const DiscreteVariable *var, NodeId *sons)=0
Inserts a new non terminal node in graph.
virtual void reduce()=0
Ensures that every isomorphic subgraphs are merged together.
virtual ~MultiDimFunctionGraphManager()
Class destructor.
virtual NodeId addInternalNode(const DiscreteVariable *var, NodeId *sons)
Inserts a new non terminal node in graph.