30 #ifndef GUM_MULTI_DIM_FUNCTION_GRAPH_H 31 #define GUM_MULTI_DIM_FUNCTION_GRAPH_H 33 #include <agrum/tools/core/bijection.h> 34 #include <agrum/tools/core/list.h> 35 #include <agrum/tools/core/smallobjectallocator/smallObjectAllocator.h> 36 #include <agrum/tools/core/types.h> 38 #include <agrum/FMDP/learning/core/templateStrategy.h> 40 #include <agrum/tools/graphs/graphElements.h> 42 #include <agrum/tools/multidim/implementations/multiDimFunctionGraphManager.h> 43 #include <agrum/tools/multidim/implementations/multiDimImplementation.h> 44 #include <agrum/tools/multidim/utils/FunctionGraphUtilities/internalNode.h> 45 #include <agrum/tools/multidim/utils/FunctionGraphUtilities/link.h> 46 #include <agrum/tools/multidim/utils/FunctionGraphUtilities/terminalNodePolicies/ExactTerminalNodePolicy.h> 47 #include <agrum/tools/multidim/utils/FunctionGraphUtilities/terminalNodePolicies/ITerminalNodePolicy.h> 51 template <
typename GUM_SCALAR,
template <
typename >
class TerminalNodePolicy >
54 template <
typename GUM_SCALAR,
template <
typename >
class TerminalNodePolicy >
57 template <
typename GUM_SCALAR,
template <
typename >
class TerminalNodePolicy >
78 template <
typename GUM_SCALAR,
79 template <
typename >
class TerminalNodePolicy
83 public TerminalNodePolicy< GUM_SCALAR > {
107 const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >& from);
132 virtual void set(
const Instantiation& i,
const GUM_SCALAR& value)
const;
138 virtual void fill(
const GUM_SCALAR& d)
const;
144 virtual void populate(
const std::vector< GUM_SCALAR >& v)
const;
149 virtual void populate(std::initializer_list< GUM_SCALAR > v)
const;
155 virtual void copyFrom(
const MultiDimContainer< GUM_SCALAR >& src,
162 virtual void copy(
const MultiDimContainer< GUM_SCALAR >& src);
172 virtual GUM_SCALAR
get(
const Instantiation& i)
const;
176 virtual void add(
const DiscreteVariable& v);
178 virtual void erase(
const DiscreteVariable& v);
183 const DiscreteVariable*
const var,
211 void copy(
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >& src);
227 const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >& src,
228 const Bijection<
const DiscreteVariable*,
const DiscreteVariable* >&
238 const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >& src,
298 const GUM_SCALAR&
nodeValue(NodeId n)
const;
363 virtual void replace_(
const DiscreteVariable* x,
const DiscreteVariable* y);
370 GUM_SCALAR&
get_(
const Instantiation& inst)
const;
401 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 402 # ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 406 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 407 # ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 413 #include <agrum/tools/multidim/implementations/multiDimFunctionGraph_tpl.h> std::string name__
The name of the data structure.
friend MultiDimFunctionGraphManager< GUM_SCALAR, TerminalNodePolicy > * MultiDimFunctionGraph()
This friend methods from is the only way to get an instance of a manager.
bool isInternalNode(const NodeId &node) const
Indicates if given node is terminal or not.
bool isTerminalNode(const NodeId &node) const
Indicates if given node is terminal or not.
void copy(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > &src)
Removes all variables in this MultiDimFunctionGraph and copy the content of src, variables included...
MultiDimFunctionGraphManager< GUM_SCALAR, TerminalNodePolicy > * manager__
A reference to the manager that edits this function graph.
virtual void populate(const std::vector< GUM_SCALAR > &v) const
static const GUM_SCALAR defaultValue
Only for proper initialization of a certain returned value.
void copyAndMultiplyByScalar(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > &src, GUM_SCALAR gamma)
Copies src diagrams and multiply every value by the given scalar.
virtual void setFirstNotification(const Instantiation &i)
Listen to setFirst in a given Instantiation.
virtual Size realSize() const
Returns the real number of parameters used for this table.
const InternalNode * node(NodeId n) const
Returns internalNode structure associated to that nodeId.
virtual void setChangeNotification(const Instantiation &i)
Listen to an assignment of a value in a Instantiation.
friend MultiDimFunctionGraphManager< GUM_SCALAR, TerminalNodePolicy > * MultiDimFunctionGraph()
This friend methods from is the only way to get an instance of a manager.
~MultiDimFunctionGraph()
Class destructor.
INLINE void emplace(Args &&... args)
void copyAndReassign(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > &src, const Bijection< const DiscreteVariable *, const DiscreteVariable * > &reassign)
Copies src diagrams structure into this diagrams.
MultiDimFunctionGraph(bool isReduced=true)
Default constructor.
NodeId root__
The root node of the function graph.
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > & operator=(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > &from)
Copy Operator.
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.
virtual void erase(const DiscreteVariable &v)
Removes a var from the variables of the multidimensional matrix.
virtual void setDecNotification(const Instantiation &i)
Listen to increment in each recorded Instantiation.
virtual void set(const Instantiation &i, const GUM_SCALAR &value) const
virtual void add(const DiscreteVariable &v)
Adds a new var to the variables of the multidimensional matrix.
virtual void replace_(const DiscreteVariable *x, const DiscreteVariable *y)
bool isReduced__
Wheter the MultiDimFunctionGraphManager is reduced or not.
const GUM_SCALAR & nodeValue(NodeId n) const
Returns value associated to given node.
HashTable< NodeId, InternalNode *> internalNodeMap__
Associates each non-terminal node to a variable.
const NodeId & root() const
Returns the id of the root node from the diagram.
const LinkedList< NodeId > * varNodeListe(const DiscreteVariable *var) const
Returns the list of node associated to given variable.
virtual const std::string & name() const
Returns the real name of the multiDim implementation.
virtual std::string toString(const Instantiation *i) const
Display the internal representation of i.
virtual MultiDimContainer< GUM_SCALAR > * newFactory() const
Creates an empty clone of this MultiDimContainer.
virtual void setLastNotification(const Instantiation &i)
Listen to setLast in a given Instantiation.
GUM_SCALAR & get_(const Instantiation &inst) const
NodeGraphPart model__
Indicates available nodeIds.
virtual void copyFrom(const MultiDimContainer< GUM_SCALAR > &src, Instantiation *p_i=(Instantiation *) 0) const
MultiDimFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > &from)
Copy constructor.
std::string tableName__
The name of the data structure.
static MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * getTreeInstance()
Returns an arborescent instance.
const std::string & tableName() const
Returns the name of the table represented by this structure.
virtual void changeNotification(const Instantiation &i, const DiscreteVariable *const var, Idx oldval, Idx newval)
Listen to changes in a given Instantiation.
std::string toDot(bool withBackArcs=false) const
Returns a const reference to the manager of this diagram.
MultiDimFunctionGraphManager< GUM_SCALAR, TerminalNodePolicy > * manager()
Returns a const reference to the manager of this diagram.
virtual void populate(std::initializer_list< GUM_SCALAR > v) const
void setTableName(const std::string &name)
Sets the name of the table represented by this structure.
bool isReducedAndOrdered() const
Returns true if this MultiDimFunctionGraph is reduced and Ordered.
virtual void setIncNotification(const Instantiation &i)
Listen to increment in a given Instantiation.
virtual GUM_SCALAR get(const Instantiation &i) const
Returns the value pointed by i.
const NodeGraphPart & model() const
Returns a const reference to the manager of this diagram.
static MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * getReducedAndOrderedInstance()
Returns a reduced and ordered instance.
virtual void fill(const GUM_SCALAR &d) const
void clear()
Clears the function graph.