aGrUM  0.14.2
gum::DefaultTriangulation Class Reference

The default triangulation algorithm used by aGrUM. More...

#include <defaultTriangulation.h>

+ Inheritance diagram for gum::DefaultTriangulation:
+ Collaboration diagram for gum::DefaultTriangulation:

Public Member Functions

Constructors / Destructors
 DefaultTriangulation (const UndiGraph *graph, const NodeProperty< Size > *dom_sizes, bool minimality=false, double theRatio=GUM_QUASI_RATIO, double theThreshold=GUM_WEIGHT_THRESHOLD)
 basic constructor. initialize the triangulation More...
 
 DefaultTriangulation (bool minimality=false, double theRatio=GUM_QUASI_RATIO, double theThreshold=GUM_WEIGHT_THRESHOLD)
 default constructor: initialize the triangulation for an empty graph More...
 
 DefaultTriangulation (const DefaultTriangulation &from)
 copy constructor More...
 
 DefaultTriangulation (DefaultTriangulation &&from)
 move constructor More...
 
 ~DefaultTriangulation ()
 destructor More...
 
virtual DefaultTriangulationnewFactory () const
 virtual clone constructor More...
 
virtual DefaultTriangulationcopyFactory () const
 virtual copy constructor More...
 
Accessors / Modifiers
double maxLog10CliqueDomainSize ()
 returns the max of log10DomainSize of the cliques in the junction tree. More...
 
const NodeProperty< Size > * domainSizes () const
 returns the domain sizes of the variables of the graph to be triangulated More...
 

Protected Attributes

EliminationSequenceStrategy_elimination_sequence_strategy {nullptr}
 the elimination sequence strategy used by the triangulation More...
 
JunctionTreeStrategy_junction_tree_strategy {nullptr}
 the junction tree strategy used by the triangulation More...
 
const NodeProperty< Size > * _domain_sizes {nullptr}
 the domain sizes of the variables/nodes of the graph More...
 

Accessors / Modifiers

virtual void setGraph (const UndiGraph *graph, const NodeProperty< Size > *domsizes)
 initialize the triangulation data structures for a new graph More...
 
const EdgeSetfillIns ()
 returns the fill-ins added by the triangulation algorithm More...
 
const std::vector< NodeId > & eliminationOrder ()
 returns an elimination ordering compatible with the triangulated graph More...
 
Idx eliminationOrder (const NodeId)
 returns the index of a given node in the elimination order (0 = first node eliminated) More...
 
const NodeProperty< NodeId > & reverseEliminationOrder ()
 returns a table indicating, for each node, at which step it was deleted by the triangulation process More...
 
const UndiGraphtriangulatedGraph ()
 returns the triangulated graph More...
 
const CliqueGrapheliminationTree ()
 returns the elimination tree of a compatible ordering More...
 
const CliqueGraphjunctionTree ()
 returns a compatible junction tree More...
 
NodeId createdJunctionTreeClique (const NodeId id)
 returns the Id of the clique of the junction tree created by the elimination of a given node during the triangulation process More...
 
const NodeProperty< NodeId > & createdJunctionTreeCliques ()
 returns the Ids of the cliques of the junction tree created by the elimination of the nodes More...
 
const CliqueGraphmaxPrimeSubgraphTree ()
 returns a junction tree of maximal prime subgraphs More...
 
NodeId createdMaxPrimeSubgraph (const NodeId id)
 returns the Id of the maximal prime subgraph created by the elimination of a given node during the triangulation process More...
 
void clear ()
 reinitialize the graph to be triangulated to an empty graph More...
 
void setMinimalRequirement (bool)
 sets/unset the minimality requirement More...
 
virtual bool isMinimalityRequired () const final
 indicates wether minimality is required More...
 
void setFillIns (bool)
 sets/unsets the record of the fill-ins in the standard triangulation procedure More...
 
const UndiGraphoriginalGraph () const
 returns the graph to be triangulated More...
 
EliminationSequenceStrategyeliminationSequenceStrategy () const
 returns the elimination sequence strategy used by the triangulation More...
 
JunctionTreeStrategyjunctionTreeStrategy () const
 returns the junction tree strategy used by the triangulation More...
 
virtual void _initTriangulation (UndiGraph &graph)
 the function called to initialize the triangulation process More...
 

Detailed Description

The default triangulation algorithm used by aGrUM.

By default, this is the very class used by aGrUM for performing triangulations. The algorithm used is the following:

the graph passed in argument is completed by fill-ins until it becomes

triangulated

then an elimination tree is computed from this triangulated graph

finally, a junction tree is derived from the elimination tree

The triangulation step first tries to remove simplicial nodes, that is, nodes that belong to only one clique. Then almost simplicial nodes of low width are removed (almost simplicial nodes are nodes such that all but one of their neighbors form a clique). Then quasi simplicial nodes are removed, that is, nodes such that the ratio of the number of fill-ins to add to form a clique by the number of edges in a clique is small. Then nodes that create cliques of small weight are removed.

The transformation from the elimination tree to the join tree is performed bottom-up. Each time a node of the elimination tree is identified to be a sub-clique, it is removed and all of its parents but one are linked to the latter. The identification of sub-cliques is very fast (comparison of 2 ints).

Definition at line 59 of file defaultTriangulation.h.

Constructor & Destructor Documentation

◆ DefaultTriangulation() [1/4]

gum::DefaultTriangulation::DefaultTriangulation ( const UndiGraph graph,
const NodeProperty< Size > *  dom_sizes,
bool  minimality = false,
double  theRatio = GUM_QUASI_RATIO,
double  theThreshold = GUM_WEIGHT_THRESHOLD 
)
explicit

basic constructor. initialize the triangulation

◆ DefaultTriangulation() [2/4]

gum::DefaultTriangulation::DefaultTriangulation ( bool  minimality = false,
double  theRatio = GUM_QUASI_RATIO,
double  theThreshold = GUM_WEIGHT_THRESHOLD 
)
explicit

default constructor: initialize the triangulation for an empty graph

◆ DefaultTriangulation() [3/4]

gum::DefaultTriangulation::DefaultTriangulation ( const DefaultTriangulation from)

copy constructor

◆ DefaultTriangulation() [4/4]

gum::DefaultTriangulation::DefaultTriangulation ( DefaultTriangulation &&  from)

move constructor

◆ ~DefaultTriangulation()

gum::DefaultTriangulation::~DefaultTriangulation ( )

destructor

Member Function Documentation

◆ _initTriangulation()

void gum::StaticTriangulation::_initTriangulation ( UndiGraph graph)
protectedvirtualinherited

the function called to initialize the triangulation process

This function is called when the triangulation process starts and is used to initialize the elimination sequence strategy. Actually, the graph that is modified by the triangulation algorithm is a copy of the original graph, and this copy needs be known by the elimination sequence strategy. _initTriangulation is used to transmit this knowledge to the elimination sequence (through method setGraph of the elimination sequence class).

Parameters
graphthe very graph that is triangulated (this is a copy of __original_graph)

Reimplemented in gum::PartialOrderedTriangulation, and gum::OrderedTriangulation.

Definition at line 730 of file staticTriangulation.cpp.

References gum::Triangulation::_domain_sizes, gum::StaticTriangulation::_elimination_sequence_strategy, and gum::EliminationSequenceStrategy::setGraph().

Referenced by gum::StaticTriangulation::__triangulate().

730  {
732  }
EliminationSequenceStrategy * _elimination_sequence_strategy
the elimination sequence strategy used by the triangulation
const NodeProperty< Size > * _domain_sizes
the domain sizes of the variables/nodes of the graph
virtual bool setGraph(UndiGraph *graph, const NodeProperty< Size > *dom_sizes)
sets a new graph to be triangulated
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ clear()

void gum::StaticTriangulation::clear ( )
virtualinherited

reinitialize the graph to be triangulated to an empty graph

Implements gum::Triangulation.

Definition at line 162 of file staticTriangulation.cpp.

References gum::StaticTriangulation::__added_fill_ins, gum::StaticTriangulation::__elim_cliques, gum::StaticTriangulation::__elim_order, gum::StaticTriangulation::__elim_tree, gum::StaticTriangulation::__fill_ins, gum::StaticTriangulation::__has_elimination_tree, gum::StaticTriangulation::__has_fill_ins, gum::StaticTriangulation::__has_junction_tree, gum::StaticTriangulation::__has_max_prime_junction_tree, gum::StaticTriangulation::__has_triangulated_graph, gum::StaticTriangulation::__has_triangulation, gum::StaticTriangulation::__junction_tree, gum::StaticTriangulation::__max_prime_junction_tree, gum::StaticTriangulation::__node_2_max_prime_clique, gum::StaticTriangulation::__original_graph, gum::StaticTriangulation::__reverse_elim_order, gum::StaticTriangulation::__triangulated_graph, gum::StaticTriangulation::_elimination_sequence_strategy, gum::StaticTriangulation::_junction_tree_strategy, gum::JunctionTreeStrategy::clear(), gum::CliqueGraph::clear(), gum::EliminationSequenceStrategy::clear(), gum::UndiGraph::clear(), and gum::Set< Key, Alloc >::clear().

Referenced by gum::StaticTriangulation::setGraph().

162  {
163  // clear the factories
166 
167  // remove the current graphs
168  __original_graph = nullptr;
169  __junction_tree = nullptr;
171  __elim_tree.clear();
173  __elim_cliques.clear();
175 
176  // remove all fill-ins and orderings
177  __fill_ins.clear();
178  __added_fill_ins.clear();
179  __elim_order.clear();
180  __reverse_elim_order.clear();
181 
182  // indicates that the junction tree, the max prime tree, etc, are updated
183  __has_triangulation = true;
185  __has_elimination_tree = true;
186  __has_junction_tree = true;
188  __has_fill_ins = true;
189  }
virtual void clear()
clears the sequence (to prepare, for instance, a new elimination sequence)
virtual void clear()
removes all the nodes and edges from the graph
Definition: undiGraph_inl.h:40
NodeProperty< NodeId > __node_2_max_prime_clique
indicates which clique of the max prime junction tree was created by the elmination of a given node (...
bool __has_max_prime_junction_tree
indicates whether a maximal prime subgraph junction tree has been constructed
EliminationSequenceStrategy * _elimination_sequence_strategy
the elimination sequence strategy used by the triangulation
const UndiGraph * __original_graph
a pointer to the (external) original graph (which will be triangulated)
bool __has_triangulated_graph
a boolean indicating whether we have constructed the triangulated graph
virtual void clear()
removes all the cliques and separators from the graph (as well as their adjacent edges) ...
JunctionTreeStrategy * _junction_tree_strategy
the junction tree strategy used by the triangulation
UndiGraph __triangulated_graph
the triangulated graph
NodeProperty< NodeId > __reverse_elim_order
the elimination order (access by NodeId)
std::vector< EdgeSet > __added_fill_ins
a vector containing the set of fill-ins added after each node elimination (used by recursive thinning...
bool __has_triangulation
a boolean indicating whether we have parformed a triangulation
virtual void clear()=0
resets the current junction tree strategy data structures
bool __has_junction_tree
a boolean indicating whether the junction tree has been constructed
CliqueGraph __max_prime_junction_tree
the maximal prime subgraph junction tree computed from the junction tree
NodeProperty< NodeSet > __elim_cliques
the cliques formed by the elimination of the nodes
bool __has_fill_ins
indicates whether we actually computed fill-ins
const CliqueGraph * __junction_tree
the junction tree computed by the algorithm
bool __has_elimination_tree
a boolean indicating whether the elimination tree has been computed
void clear()
Removes all the elements, if any, from the set.
Definition: set_tpl.h:372
EdgeSet __fill_ins
the fill-ins added during the whole triangulation process
std::vector< NodeId > __elim_order
the order in which nodes are eliminated by the algorithm
CliqueGraph __elim_tree
the elimination tree computed by the algorithm
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ copyFactory()

virtual DefaultTriangulation* gum::DefaultTriangulation::copyFactory ( ) const
virtual

virtual copy constructor

Implements gum::UnconstrainedTriangulation.

◆ createdJunctionTreeClique()

NodeId gum::StaticTriangulation::createdJunctionTreeClique ( const NodeId  id)
virtualinherited

returns the Id of the clique of the junction tree created by the elimination of a given node during the triangulation process

Implements gum::Triangulation.

◆ createdJunctionTreeCliques()

const NodeProperty< NodeId >& gum::StaticTriangulation::createdJunctionTreeCliques ( )
virtualinherited

returns the Ids of the cliques of the junction tree created by the elimination of the nodes

Implements gum::Triangulation.

◆ createdMaxPrimeSubgraph()

NodeId gum::StaticTriangulation::createdMaxPrimeSubgraph ( const NodeId  id)
virtualinherited

returns the Id of the maximal prime subgraph created by the elimination of a given node during the triangulation process

Implements gum::Triangulation.

◆ domainSizes()

const NodeProperty< Size >* gum::Triangulation::domainSizes ( ) const
inherited

returns the domain sizes of the variables of the graph to be triangulated

◆ eliminationOrder() [1/2]

◆ eliminationOrder() [2/2]

Idx gum::StaticTriangulation::eliminationOrder ( const NodeId  )
virtualinherited

returns the index of a given node in the elimination order (0 = first node eliminated)

Implements gum::Triangulation.

◆ eliminationSequenceStrategy()

EliminationSequenceStrategy& gum::StaticTriangulation::eliminationSequenceStrategy ( ) const
inherited

returns the elimination sequence strategy used by the triangulation

◆ eliminationTree()

const CliqueGraph& gum::StaticTriangulation::eliminationTree ( )
virtualinherited

returns the elimination tree of a compatible ordering

Implements gum::Triangulation.

Referenced by gum::DefaultJunctionTreeStrategy::__computeJunctionTree().

+ Here is the caller graph for this function:

◆ fillIns()

const EdgeSet & gum::StaticTriangulation::fillIns ( )
virtualinherited

returns the fill-ins added by the triangulation algorithm

Implements gum::Triangulation.

Definition at line 676 of file staticTriangulation.cpp.

References gum::StaticTriangulation::__fill_ins, gum::StaticTriangulation::__has_fill_ins, gum::StaticTriangulation::__has_junction_tree, gum::StaticTriangulation::__has_triangulation, gum::StaticTriangulation::__junction_tree, gum::StaticTriangulation::__original_graph, gum::StaticTriangulation::__triangulate(), gum::StaticTriangulation::__we_want_fill_ins, gum::StaticTriangulation::_elimination_sequence_strategy, gum::CliqueGraph::clique(), gum::EdgeGraphPart::existsEdge(), gum::EliminationSequenceStrategy::fillIns(), gum::Set< Key, Alloc >::insert(), gum::StaticTriangulation::junctionTree(), gum::NodeGraphPart::nodes(), gum::EliminationSequenceStrategy::providesFillIns(), and gum::Set< Key, Alloc >::size().

676  {
677  // if we did not compute the triangulation yet, do it and commpute
678  // the fill-ins at the same time
679  if (!__has_triangulation) {
680  bool want_fill_ins = __we_want_fill_ins;
681  __we_want_fill_ins = true;
682  __triangulate();
683  __we_want_fill_ins = want_fill_ins;
684  __has_fill_ins = true;
685  }
686 
687  // here, we already computed a triangulation and we already computed
688  // the fill-ins, so return them
689  if (__has_fill_ins) {
692  else
693  return __fill_ins;
694  } else {
695  // ok, here, we shall compute the fill-ins as they were not precomputed
696  if (!__original_graph) return __fill_ins;
697 
698  // just in case, be sure that the junction tree has been constructed
700 
701  for (const auto clik_id : __junction_tree->nodes()) {
702  // for each clique, add the edges necessary to make it complete
703  const NodeSet& clique = __junction_tree->clique(clik_id);
704  std::vector< NodeId > clique_nodes(clique.size());
705  unsigned int i = 0;
706 
707  for (const auto node : clique) {
708  clique_nodes[i] = node;
709  i += 1;
710  }
711 
712  for (i = 0; i < clique_nodes.size(); ++i) {
713  for (unsigned int j = i + 1; j < clique_nodes.size(); ++j) {
714  Edge edge(clique_nodes[i], clique_nodes[j]);
715 
716  if (!__original_graph->existsEdge(edge)) {
717  try {
718  __fill_ins.insert(edge);
719  } catch (DuplicateElement&) {}
720  }
721  }
722  }
723  }
724 
725  return __fill_ins;
726  }
727  }
const CliqueGraph & junctionTree()
returns a compatible junction tree
virtual const EdgeSet & fillIns()
in case fill-ins are provided, this function returns the fill-ins due to all the nodes eliminated so ...
void __triangulate()
the function that performs the triangulation
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
EliminationSequenceStrategy * _elimination_sequence_strategy
the elimination sequence strategy used by the triangulation
const UndiGraph * __original_graph
a pointer to the (external) original graph (which will be triangulated)
bool __has_triangulation
a boolean indicating whether we have parformed a triangulation
bool __has_junction_tree
a boolean indicating whether the junction tree has been constructed
bool existsEdge(const Edge &edge) const
indicates whether a given edge exists
const NodeGraphPart & nodes() const
return *this as a NodeGraphPart
const NodeSet & clique(const NodeId idClique) const
returns the set of nodes included into a given clique
bool __we_want_fill_ins
a boolean indicating if we want fill-ins list with the standard triangulation method ...
bool __has_fill_ins
indicates whether we actually computed fill-ins
const CliqueGraph * __junction_tree
the junction tree computed by the algorithm
EdgeSet __fill_ins
the fill-ins added during the whole triangulation process
void insert(const Key &k)
Inserts a new element into the set.
Definition: set_tpl.h:610
virtual bool providesFillIns() const =0
indicates whether the fill-ins generated by the eliminated nodes, if needed, will be computed by the ...
+ Here is the call graph for this function:

◆ isMinimalityRequired()

virtual bool gum::StaticTriangulation::isMinimalityRequired ( ) const
finalvirtualinherited

indicates wether minimality is required

◆ junctionTree()

const CliqueGraph& gum::StaticTriangulation::junctionTree ( )
virtualinherited

returns a compatible junction tree

Implements gum::Triangulation.

Referenced by gum::StaticTriangulation::__computeMaxPrimeJunctionTree(), gum::StaticTriangulation::fillIns(), and gum::StaticTriangulation::triangulatedGraph().

+ Here is the caller graph for this function:

◆ junctionTreeStrategy()

JunctionTreeStrategy& gum::StaticTriangulation::junctionTreeStrategy ( ) const
inherited

returns the junction tree strategy used by the triangulation

◆ maxLog10CliqueDomainSize()

double gum::Triangulation::maxLog10CliqueDomainSize ( )
inherited

returns the max of log10DomainSize of the cliques in the junction tree.

This is usefull for instance to estimate the complexity (both in space and in time) of the inference that will use the junction tree.

This method is not 'const' since it can be called before building any junction tree and hence it needs to build it...

Definition at line 67 of file triangulation.cpp.

References gum::Triangulation::_domain_sizes, and gum::Triangulation::junctionTree().

Referenced by gum::MaxInducedWidthMCBayesNetGenerator< GUM_SCALAR, ICPTGenerator, ICPTDisturber >::__checkConditions().

67  {
68  double res = 0.0;
69  double dSize;
70  const JunctionTree& jt = junctionTree(); // here, the fact that we get
71  // a junction tree ensures that _domain_sizes is different from nullptr
72 
73  for (const NodeId cl : jt) {
74  dSize = 0.0;
75 
76  for (const auto node : jt.clique(cl))
77  dSize += std::log10((*_domain_sizes)[node]);
78 
79  if (res < dSize) res = dSize;
80  }
81 
82  return res;
83  }
const NodeProperty< Size > * _domain_sizes
the domain sizes of the variables/nodes of the graph
CliqueGraph JunctionTree
a junction tree is a clique graph satisfying the running intersection property and such that no cliqu...
Definition: cliqueGraph.h:299
virtual const CliqueGraph & junctionTree()=0
returns a compatible junction tree
Size NodeId
Type for node ids.
Definition: graphElements.h:97
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ maxPrimeSubgraphTree()

const CliqueGraph& gum::StaticTriangulation::maxPrimeSubgraphTree ( )
virtualinherited

returns a junction tree of maximal prime subgraphs

Warning
Actually, the cliques of the junction tree are guarranteed to be maximal prime subgraph of the original graph that was triangulated only if the triangulation performed is minimal (in the sense that removing any edge in the triangulated graph results in a nontriangulated graph). This can be ensured by requiring minimality of the triangulation.

Implements gum::Triangulation.

◆ newFactory()

virtual DefaultTriangulation* gum::DefaultTriangulation::newFactory ( ) const
virtual

virtual clone constructor

returns a fresh triangulation (over an empty graph) of the same type as the current object

note that we return a pointer as it enables subclasses to return pointers to their types, not Triangulation pointers. See item 25 of the more effective C++.

Implements gum::UnconstrainedTriangulation.

◆ operator=()

DefaultTriangulation& gum::DefaultTriangulation::operator= ( const DefaultTriangulation )
private

forbid copy operator

◆ originalGraph()

const UndiGraph* gum::StaticTriangulation::originalGraph ( ) const
inherited

returns the graph to be triangulated

Warning
if we have not set yet a graph, then originalGraph () will return a nullptr.

Referenced by gum::DefaultJunctionTreeStrategy::copyFactory().

+ Here is the caller graph for this function:

◆ reverseEliminationOrder()

const NodeProperty< NodeId >& gum::StaticTriangulation::reverseEliminationOrder ( )
inherited

returns a table indicating, for each node, at which step it was deleted by the triangulation process

◆ setFillIns()

void gum::StaticTriangulation::setFillIns ( bool  )
inherited

sets/unsets the record of the fill-ins in the standard triangulation procedure

◆ setGraph()

void gum::StaticTriangulation::setGraph ( const UndiGraph graph,
const NodeProperty< Size > *  domsizes 
)
virtualinherited

initialize the triangulation data structures for a new graph

Parameters
graphthe graph to be triangulated, i.e., the nodes of which will be eliminated
domsizesthe domain sizes of the nodes to be eliminated
Warning
Note that we allow domsizes to be defined over nodes/variables that do not belong to graph. These sizes will simply be ignored. However, it is compulsory that all the nodes of graph belong to dom_sizes
the graph is not copied but only referenced by the elimination sequence algorithm.

Implements gum::Triangulation.

Reimplemented in gum::PartialOrderedTriangulation, and gum::OrderedTriangulation.

Definition at line 523 of file staticTriangulation.cpp.

References gum::StaticTriangulation::__added_fill_ins, gum::StaticTriangulation::__elim_cliques, gum::StaticTriangulation::__elim_order, gum::StaticTriangulation::__has_elimination_tree, gum::StaticTriangulation::__has_fill_ins, gum::StaticTriangulation::__has_junction_tree, gum::StaticTriangulation::__has_max_prime_junction_tree, gum::StaticTriangulation::__has_triangulated_graph, gum::StaticTriangulation::__has_triangulation, gum::StaticTriangulation::__node_2_max_prime_clique, gum::StaticTriangulation::__original_graph, gum::StaticTriangulation::__reverse_elim_order, gum::Triangulation::_domain_sizes, gum::StaticTriangulation::clear(), and gum::NodeGraphPart::size().

Referenced by gum::OrderedTriangulation::setGraph(), and gum::PartialOrderedTriangulation::setGraph().

524  {
525  // remove the old graph
526  clear();
527 
528  if (graph != nullptr) {
529  // prepare the size of the data for the new graph
530  __elim_order.resize(graph->size());
531  __reverse_elim_order.resize(graph->size());
532  __elim_cliques.resize(graph->size());
533  __added_fill_ins.resize(graph->size());
534  __node_2_max_prime_clique.resize(graph->size());
535  }
536 
537  // keep track of the variables passed in argument
538  __original_graph = graph;
539  _domain_sizes = domsizes;
540 
541  // indicate that no triangulation was performed for this graph
542  __has_triangulation = false;
543  __has_triangulated_graph = false;
544  __has_elimination_tree = false;
545  __has_junction_tree = false;
547  __has_fill_ins = false;
548  }
void clear()
reinitialize the graph to be triangulated to an empty graph
NodeProperty< NodeId > __node_2_max_prime_clique
indicates which clique of the max prime junction tree was created by the elmination of a given node (...
bool __has_max_prime_junction_tree
indicates whether a maximal prime subgraph junction tree has been constructed
const UndiGraph * __original_graph
a pointer to the (external) original graph (which will be triangulated)
bool __has_triangulated_graph
a boolean indicating whether we have constructed the triangulated graph
NodeProperty< NodeId > __reverse_elim_order
the elimination order (access by NodeId)
std::vector< EdgeSet > __added_fill_ins
a vector containing the set of fill-ins added after each node elimination (used by recursive thinning...
const NodeProperty< Size > * _domain_sizes
the domain sizes of the variables/nodes of the graph
bool __has_triangulation
a boolean indicating whether we have parformed a triangulation
bool __has_junction_tree
a boolean indicating whether the junction tree has been constructed
NodeProperty< NodeSet > __elim_cliques
the cliques formed by the elimination of the nodes
bool __has_fill_ins
indicates whether we actually computed fill-ins
bool __has_elimination_tree
a boolean indicating whether the elimination tree has been computed
std::vector< NodeId > __elim_order
the order in which nodes are eliminated by the algorithm
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setMinimalRequirement()

void gum::StaticTriangulation::setMinimalRequirement ( bool  )
inherited

sets/unset the minimality requirement

◆ triangulatedGraph()

const UndiGraph & gum::StaticTriangulation::triangulatedGraph ( )
virtualinherited

returns the triangulated graph

Implements gum::Triangulation.

Definition at line 484 of file staticTriangulation.cpp.

References gum::StaticTriangulation::__has_junction_tree, gum::StaticTriangulation::__has_triangulated_graph, gum::StaticTriangulation::__has_triangulation, gum::StaticTriangulation::__junction_tree, gum::StaticTriangulation::__original_graph, gum::StaticTriangulation::__triangulate(), gum::StaticTriangulation::__triangulated_graph, gum::UndiGraph::addEdge(), gum::StaticTriangulation::junctionTree(), and gum::Set< Key, Alloc >::size().

484  {
486 
487  // if we did not construct the triangulated graph during the triangulation,
488  // that is, we just constructed the junction tree, we shall construct it now
490  // just in case, be sure that the junction tree has been constructed
492 
493  // copy the original graph
495 
496  for (const auto clik_id : *__junction_tree) {
497  // for each clique, add the edges necessary to make it complete
498  const NodeSet& clique = __junction_tree->clique(clik_id);
499  std::vector< NodeId > clique_nodes(clique.size());
500  unsigned int i = 0;
501 
502  for (const auto node : clique) {
503  clique_nodes[i] = node;
504  i += 1;
505  }
506 
507  for (i = 0; i < clique_nodes.size(); ++i) {
508  for (unsigned int j = i + 1; j < clique_nodes.size(); ++j) {
509  try {
510  __triangulated_graph.addEdge(clique_nodes[i], clique_nodes[j]);
511  } catch (DuplicateElement&) {}
512  }
513  }
514  }
515 
517  }
518 
519  return __triangulated_graph;
520  }
const CliqueGraph & junctionTree()
returns a compatible junction tree
void __triangulate()
the function that performs the triangulation
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
const UndiGraph * __original_graph
a pointer to the (external) original graph (which will be triangulated)
virtual void addEdge(const NodeId first, const NodeId second)
insert a new edge into the undirected graph
Definition: undiGraph_inl.h:32
bool __has_triangulated_graph
a boolean indicating whether we have constructed the triangulated graph
UndiGraph __triangulated_graph
the triangulated graph
bool __has_triangulation
a boolean indicating whether we have parformed a triangulation
bool __has_junction_tree
a boolean indicating whether the junction tree has been constructed
const CliqueGraph * __junction_tree
the junction tree computed by the algorithm
+ Here is the call graph for this function:

Member Data Documentation

◆ __quasi_ratio

double gum::DefaultTriangulation::__quasi_ratio
private

the ratio above which we consider nodes to be quasi simplicial

Definition at line 104 of file defaultTriangulation.h.

◆ __threshold

double gum::DefaultTriangulation::__threshold
private

threshold under which almost and quasi simplicial nodes can be chosen to be eliminated

Definition at line 108 of file defaultTriangulation.h.

◆ _domain_sizes

const NodeProperty< Size >* gum::Triangulation::_domain_sizes {nullptr}
protectedinherited

◆ _elimination_sequence_strategy

◆ _junction_tree_strategy


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