aGrUM  0.20.3
a C++ library for (probabilistic) graphical models
gum::PartialOrderedTriangulation Class Reference

class for graph triangulations for which we enforce a given partial ordering on the nodes eliminations, that is, the set of all the nodes is divided into several subsets. More...

#include <partialOrderedTriangulation.h>

+ Inheritance diagram for gum::PartialOrderedTriangulation:
+ Collaboration diagram for gum::PartialOrderedTriangulation:

Public Member Functions

Constructors / Destructors
 PartialOrderedTriangulation (const PartialOrderedEliminationSequenceStrategy &elimSeq=DefaultPartialOrderedEliminationSequenceStrategy(), const JunctionTreeStrategy &JTStrategy=DefaultJunctionTreeStrategy(), bool minimality=false)
 default constructor More...
 
 PartialOrderedTriangulation (const UndiGraph *graph, const NodeProperty< Size > *domsizes, const List< NodeSet > *partial_order, const PartialOrderedEliminationSequenceStrategy &elimSeq=DefaultPartialOrderedEliminationSequenceStrategy(), const JunctionTreeStrategy &JTStrategy=DefaultJunctionTreeStrategy(), bool minimality=false)
 constructor with a given graph More...
 
 PartialOrderedTriangulation (const PartialOrderedTriangulation &from)
 copy constructor More...
 
 PartialOrderedTriangulation (PartialOrderedTriangulation &&from)
 move constructor More...
 
virtual PartialOrderedTriangulationnewFactory () const
 returns a fresh triangulation (over an empty graph) of the same type as the current object More...
 
virtual PartialOrderedTriangulationcopyFactory () const final
 virtual copy constructor More...
 
virtual ~PartialOrderedTriangulation ()
 destructor More...
 
Accessors / Modifiers
virtual void setGraph (const UndiGraph *graph, const NodeProperty< Size > *domsizes) final
 initialize the triangulation data structures for a new graph More...
 
virtual void setPartialOrder (const List< NodeSet > *partial_order) final
 sets the elimination sequence's partial order (only a reference is stored) More...
 
Accessors / Modifiers
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...
 
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

const List< NodeSet > * _partial_order_ {nullptr}
 the partial ordering to apply to eliminate nodes More...
 
EliminationSequenceStrategyelimination_sequence_strategy_ {nullptr}
 the elimination sequence strategy used by the triangulation More...
 
JunctionTreeStrategyjunction_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...
 

Protected Member Functions

virtual void initTriangulation_ (UndiGraph &graph) final
 the function called to initialize the triangulation process More...
 

Detailed Description

class for graph triangulations for which we enforce a given partial ordering on the nodes eliminations, that is, the set of all the nodes is divided into several subsets.

Within each subset, any ordering can be chosen. But all the nodes of the first subset must be eliminated before the nodes of the second, which must be eliminated before those of the third subset, and so on.

Definition at line 53 of file partialOrderedTriangulation.h.

Constructor & Destructor Documentation

◆ PartialOrderedTriangulation() [1/4]

gum::PartialOrderedTriangulation::PartialOrderedTriangulation ( const PartialOrderedEliminationSequenceStrategy elimSeq = DefaultPartialOrderedEliminationSequenceStrategy(),
const JunctionTreeStrategy JTStrategy = DefaultJunctionTreeStrategy(),
bool  minimality = false 
)

default constructor

Parameters
elimSeqthe elimination sequence used to triangulate the graph
JTStrategythe junction tree strategy used to create junction trees
minimalitya Boolean indicating whether we should enforce that the triangulation is minimal w.r.t. inclusion

Definition at line 36 of file partialOrderedTriangulation.cpp.

References gum::Set< Key, Alloc >::emplace().

39  :
40  StaticTriangulation(elimSeq, JTStrategy, minimality) {
41  // for debugging purposes
42  GUM_CONSTRUCTOR(PartialOrderedTriangulation);
43  }
PartialOrderedTriangulation(const PartialOrderedEliminationSequenceStrategy &elimSeq=DefaultPartialOrderedEliminationSequenceStrategy(), const JunctionTreeStrategy &JTStrategy=DefaultJunctionTreeStrategy(), bool minimality=false)
default constructor
StaticTriangulation(const EliminationSequenceStrategy &elimSeq, const JunctionTreeStrategy &JTStrategy, bool minimality=false)
default constructor: without any graph
+ Here is the call graph for this function:

◆ PartialOrderedTriangulation() [2/4]

gum::PartialOrderedTriangulation::PartialOrderedTriangulation ( const UndiGraph graph,
const NodeProperty< Size > *  domsizes,
const List< NodeSet > *  partial_order,
const PartialOrderedEliminationSequenceStrategy elimSeq = DefaultPartialOrderedEliminationSequenceStrategy(),
const JunctionTreeStrategy JTStrategy = DefaultJunctionTreeStrategy(),
bool  minimality = false 
)

constructor with a given 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
partial_orderthe list of the subsets constituting the partial ordering
elimSeqthe elimination sequence used to triangulate the graph
JTStrategythe junction tree strategy used to create junction trees
minimalitya Boolean indicating whether we should enforce that the triangulation is minimal w.r.t. inclusion
Warning
Note that we allow dom_sizes 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
note that, by aGrUM's rule, the graph, the domain sizes and the partial ordering are not copied but only referenced by the triangulation algorithm.

Definition at line 46 of file partialOrderedTriangulation.cpp.

References gum::Set< Key, Alloc >::emplace().

52  :
53  StaticTriangulation(theGraph, dom, elimSeq, JTStrategy, minimality),
54  _partial_order_(partial_order) {
55  static_cast< PartialOrderedEliminationSequenceStrategy* >(elimination_sequence_strategy_)
57 
58  // for debugging purposes
59  GUM_CONSTRUCTOR(PartialOrderedTriangulation);
60  }
EliminationSequenceStrategy * elimination_sequence_strategy_
the elimination sequence strategy used by the triangulation
PartialOrderedTriangulation(const PartialOrderedEliminationSequenceStrategy &elimSeq=DefaultPartialOrderedEliminationSequenceStrategy(), const JunctionTreeStrategy &JTStrategy=DefaultJunctionTreeStrategy(), bool minimality=false)
default constructor
virtual void setPartialOrder(const List< NodeSet > *partial_order) final
sets the elimination sequence&#39;s partial order (only a reference is stored)
const List< NodeSet > * _partial_order_
the partial ordering to apply to eliminate nodes
StaticTriangulation(const EliminationSequenceStrategy &elimSeq, const JunctionTreeStrategy &JTStrategy, bool minimality=false)
default constructor: without any graph
+ Here is the call graph for this function:

◆ PartialOrderedTriangulation() [3/4]

gum::PartialOrderedTriangulation::PartialOrderedTriangulation ( const PartialOrderedTriangulation from)

copy constructor

Definition at line 63 of file partialOrderedTriangulation.cpp.

References gum::Set< Key, Alloc >::emplace().

64  :
65  StaticTriangulation(from),
66  _partial_order_(from._partial_order_) {
67  // for debugging purposes
68  GUM_CONS_CPY(PartialOrderedTriangulation);
69  }
PartialOrderedTriangulation(const PartialOrderedEliminationSequenceStrategy &elimSeq=DefaultPartialOrderedEliminationSequenceStrategy(), const JunctionTreeStrategy &JTStrategy=DefaultJunctionTreeStrategy(), bool minimality=false)
default constructor
const List< NodeSet > * _partial_order_
the partial ordering to apply to eliminate nodes
StaticTriangulation(const EliminationSequenceStrategy &elimSeq, const JunctionTreeStrategy &JTStrategy, bool minimality=false)
default constructor: without any graph
+ Here is the call graph for this function:

◆ PartialOrderedTriangulation() [4/4]

gum::PartialOrderedTriangulation::PartialOrderedTriangulation ( PartialOrderedTriangulation &&  from)

move constructor

Definition at line 72 of file partialOrderedTriangulation.cpp.

References gum::Set< Key, Alloc >::emplace().

72  :
73  StaticTriangulation(std::move(from)), _partial_order_(from._partial_order_) {
74  // for debugging purposes
75  GUM_CONS_MOV(PartialOrderedTriangulation);
76  }
PartialOrderedTriangulation(const PartialOrderedEliminationSequenceStrategy &elimSeq=DefaultPartialOrderedEliminationSequenceStrategy(), const JunctionTreeStrategy &JTStrategy=DefaultJunctionTreeStrategy(), bool minimality=false)
default constructor
const List< NodeSet > * _partial_order_
the partial ordering to apply to eliminate nodes
StaticTriangulation(const EliminationSequenceStrategy &elimSeq, const JunctionTreeStrategy &JTStrategy, bool minimality=false)
default constructor: without any graph
+ Here is the call graph for this function:

◆ ~PartialOrderedTriangulation()

gum::PartialOrderedTriangulation::~PartialOrderedTriangulation ( )
virtual

destructor

Definition at line 92 of file partialOrderedTriangulation.cpp.

References gum::Set< Key, Alloc >::emplace().

92  {
93  // for debugging purposes
94  GUM_DESTRUCTOR(PartialOrderedTriangulation);
95  }
PartialOrderedTriangulation(const PartialOrderedEliminationSequenceStrategy &elimSeq=DefaultPartialOrderedEliminationSequenceStrategy(), const JunctionTreeStrategy &JTStrategy=DefaultJunctionTreeStrategy(), bool minimality=false)
default constructor
+ Here is the call graph for this function:

Member Function Documentation

◆ clear()

void gum::StaticTriangulation::clear ( )
virtualinherited

reinitialize the graph to be triangulated to an empty graph

Implements gum::Triangulation.

Definition at line 154 of file staticTriangulation.cpp.

References gum::Set< Key, Alloc >::emplace().

154  {
155  // clear the factories
158 
159  // remove the current graphs
160  _original_graph_ = nullptr;
161  _junction_tree_ = nullptr;
163  _elim_tree_.clear();
165  _elim_cliques_.clear();
167 
168  // remove all fill-ins and orderings
169  _fill_ins_.clear();
170  _added_fill_ins_.clear();
171  _elim_order_.clear();
172  _reverse_elim_order_.clear();
173 
174  // indicates that the junction tree, the max prime tree, etc, are updated
175  _has_triangulation_ = true;
177  _has_elimination_tree_ = true;
178  _has_junction_tree_ = true;
180  _has_fill_ins_ = true;
181  }
virtual void clear()
clears the sequence (to prepare, for instance, a new elimination sequence)
bool _has_triangulated_graph_
a boolean indicating whether we have constructed the triangulated graph
bool _has_max_prime_junction_tree_
indicates whether a maximal prime subgraph junction tree has been constructed
CliqueGraph _elim_tree_
the elimination tree computed by the algorithm
EliminationSequenceStrategy * elimination_sequence_strategy_
the elimination sequence strategy used by the triangulation
void clear() override
removes all the nodes and edges from the graph
Definition: undiGraph_inl.h:42
CliqueGraph _max_prime_junction_tree_
the maximal prime subgraph junction tree computed from the junction tree
std::vector< EdgeSet > _added_fill_ins_
a vector containing the set of fill-ins added after each node elimination (used by recursive thinning...
virtual void clear()
removes all the cliques and separators from the graph (as well as their adjacent edges) ...
NodeProperty< NodeId > _reverse_elim_order_
the elimination order (access by NodeId)
EdgeSet _fill_ins_
the fill-ins added during the whole triangulation process
UndiGraph _triangulated_graph_
the triangulated graph
bool _has_junction_tree_
a boolean indicating whether the junction tree has been constructed
virtual void clear()=0
resets the current junction tree strategy data structures
bool _has_triangulation_
a boolean indicating whether we have parformed a triangulation
bool _has_fill_ins_
indicates whether we actually computed fill-ins
NodeProperty< NodeSet > _elim_cliques_
the cliques formed by the elimination of the nodes
const CliqueGraph * _junction_tree_
the junction tree computed by the algorithm
std::vector< NodeId > _elim_order_
the order in which nodes are eliminated by the algorithm
JunctionTreeStrategy * junction_tree_strategy_
the junction tree strategy used by the triangulation
const UndiGraph * _original_graph_
a pointer to the (external) original graph (which will be triangulated)
void clear()
Removes all the elements, if any, from the set.
Definition: set_tpl.h:361
bool _has_elimination_tree_
a boolean indicating whether the elimination tree has been computed
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 (...
+ Here is the call graph for this function:

◆ copyFactory()

PartialOrderedTriangulation * gum::PartialOrderedTriangulation::copyFactory ( ) const
finalvirtual

virtual copy constructor

Implements gum::StaticTriangulation.

Definition at line 87 of file partialOrderedTriangulation.cpp.

References gum::Set< Key, Alloc >::emplace().

87  {
88  return new PartialOrderedTriangulation(*this);
89  }
PartialOrderedTriangulation(const PartialOrderedEliminationSequenceStrategy &elimSeq=DefaultPartialOrderedEliminationSequenceStrategy(), const JunctionTreeStrategy &JTStrategy=DefaultJunctionTreeStrategy(), bool minimality=false)
default constructor
+ Here is the call graph for this function:

◆ 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]

const std::vector< NodeId >& gum::StaticTriangulation::eliminationOrder ( )
virtualinherited

returns an elimination ordering compatible with the triangulated graph

Implements gum::Triangulation.

◆ 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.

◆ fillIns()

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

returns the fill-ins added by the triangulation algorithm

Implements gum::Triangulation.

Definition at line 653 of file staticTriangulation.cpp.

References gum::Set< Key, Alloc >::emplace().

653  {
654  // if we did not compute the triangulation yet, do it and commpute
655  // the fill-ins at the same time
656  if (!_has_triangulation_) {
657  bool want_fill_ins = _we_want_fill_ins_;
658  _we_want_fill_ins_ = true;
659  _triangulate_();
660  _we_want_fill_ins_ = want_fill_ins;
661  _has_fill_ins_ = true;
662  }
663 
664  // here, we already computed a triangulation and we already computed
665  // the fill-ins, so return them
666  if (_has_fill_ins_) {
669  else
670  return _fill_ins_;
671  } else {
672  // ok, here, we shall compute the fill-ins as they were not precomputed
673  if (!_original_graph_) return _fill_ins_;
674 
675  // just in case, be sure that the junction tree has been constructed
677 
678  for (const auto clik_id: _junction_tree_->nodes()) {
679  // for each clique, add the edges necessary to make it complete
680  const NodeSet& clique = _junction_tree_->clique(clik_id);
681  std::vector< NodeId > clique_nodes(clique.size());
682  unsigned int i = 0;
683 
684  for (const auto node: clique) {
685  clique_nodes[i] = node;
686  i += 1;
687  }
688 
689  for (i = 0; i < clique_nodes.size(); ++i) {
690  for (unsigned int j = i + 1; j < clique_nodes.size(); ++j) {
691  Edge edge(clique_nodes[i], clique_nodes[j]);
692 
693  if (!_original_graph_->existsEdge(edge)) {
694  try {
695  _fill_ins_.insert(edge);
696  } catch (DuplicateElement&) {}
697  }
698  }
699  }
700  }
701 
702  return _fill_ins_;
703  }
704  }
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 ...
EliminationSequenceStrategy * elimination_sequence_strategy_
the elimination sequence strategy used by the triangulation
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
void _triangulate_()
the function that performs the triangulation
bool _we_want_fill_ins_
a boolean indicating if we want fill-ins list with the standard triangulation method ...
EdgeSet _fill_ins_
the fill-ins added during the whole triangulation process
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
bool _has_triangulation_
a boolean indicating whether we have parformed a triangulation
bool _has_fill_ins_
indicates whether we actually computed fill-ins
const NodeGraphPart & nodes() const
return *this as a NodeGraphPart
const CliqueGraph * _junction_tree_
the junction tree computed by the algorithm
const NodeSet & clique(const NodeId idClique) const
returns the set of nodes included into a given clique
const UndiGraph * _original_graph_
a pointer to the (external) original graph (which will be triangulated)
void insert(const Key &k)
Inserts a new element into the set.
Definition: set_tpl.h:606
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:

◆ initTriangulation_()

void gum::PartialOrderedTriangulation::initTriangulation_ ( UndiGraph graph)
finalprotectedvirtual

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 need 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 from gum::StaticTriangulation.

Definition at line 113 of file partialOrderedTriangulation.cpp.

References gum::Set< Key, Alloc >::emplace().

113  {
114  PartialOrderedEliminationSequenceStrategy* elim
115  = static_cast< PartialOrderedEliminationSequenceStrategy* >(elimination_sequence_strategy_);
116  elim->setGraph(&graph, domain_sizes_);
117  elim->setPartialOrder(_partial_order_);
118  }
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
const List< NodeSet > * _partial_order_
the partial ordering to apply to eliminate nodes
+ 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.

◆ 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 64 of file triangulation.cpp.

References gum::Set< Key, Alloc >::emplace().

64  {
65  double res = 0.0;
66  double dSize;
67  const JunctionTree& jt = junctionTree(); // here, the fact that we get
68  // a junction tree ensures that domain_sizes_ is different from nullptr
69 
70  for (const NodeId cl: jt) {
71  dSize = 0.0;
72 
73  for (const auto node: jt.clique(cl))
74  dSize += std::log10((*domain_sizes_)[node]);
75 
76  if (res < dSize) res = dSize;
77  }
78 
79  return res;
80  }
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:300
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:

◆ 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()

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

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

virtual copy constructor

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::StaticTriangulation.

Definition at line 79 of file partialOrderedTriangulation.cpp.

References gum::Set< Key, Alloc >::emplace().

79  {
80  return new PartialOrderedTriangulation(
81  static_cast< const PartialOrderedEliminationSequenceStrategy& >(
84  }
EliminationSequenceStrategy * elimination_sequence_strategy_
the elimination sequence strategy used by the triangulation
PartialOrderedTriangulation(const PartialOrderedEliminationSequenceStrategy &elimSeq=DefaultPartialOrderedEliminationSequenceStrategy(), const JunctionTreeStrategy &JTStrategy=DefaultJunctionTreeStrategy(), bool minimality=false)
default constructor
JunctionTreeStrategy * junction_tree_strategy_
the junction tree strategy used by the triangulation
+ Here is the call graph for this function:

◆ operator=()

PartialOrderedTriangulation& gum::PartialOrderedTriangulation::operator= ( const PartialOrderedTriangulation )
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.

◆ 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::PartialOrderedTriangulation::setGraph ( const UndiGraph graph,
const NodeProperty< Size > *  domsizes 
)
finalvirtual

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
sequencethe order in which the nodes should be eliminated
Warning
note that, by aGrUM's rule, the graph and the domain sizes are not notcopied but only referenced by the triangulation algorithm.

Reimplemented from gum::StaticTriangulation.

Definition at line 98 of file partialOrderedTriangulation.cpp.

References gum::Set< Key, Alloc >::emplace().

99  {
100  StaticTriangulation::setGraph(graph, domsizes);
101  static_cast< PartialOrderedEliminationSequenceStrategy* >(elimination_sequence_strategy_)
103  }
EliminationSequenceStrategy * elimination_sequence_strategy_
the elimination sequence strategy used by the triangulation
virtual void setPartialOrder(const List< NodeSet > *partial_order) final
sets the elimination sequence&#39;s partial order (only a reference is stored)
const List< NodeSet > * _partial_order_
the partial ordering to apply to eliminate nodes
virtual void setGraph(const UndiGraph *graph, const NodeProperty< Size > *domsizes)
initialize the triangulation data structures for a new graph
+ Here is the call graph for this function:

◆ setMinimalRequirement()

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

sets/unset the minimality requirement

◆ setPartialOrder()

void gum::PartialOrderedTriangulation::setPartialOrder ( const List< NodeSet > *  partial_order)
finalvirtual

sets the elimination sequence's partial order (only a reference is stored)

sets the sequence of elimination

The elimination sequence is kept outside this class for efficiency reasons.

Definition at line 106 of file partialOrderedTriangulation.cpp.

References gum::Set< Key, Alloc >::emplace().

106  {
107  _partial_order_ = partial_order;
108  static_cast< PartialOrderedEliminationSequenceStrategy* >(elimination_sequence_strategy_)
110  }
EliminationSequenceStrategy * elimination_sequence_strategy_
the elimination sequence strategy used by the triangulation
virtual void setPartialOrder(const List< NodeSet > *partial_order) final
sets the elimination sequence&#39;s partial order (only a reference is stored)
const List< NodeSet > * _partial_order_
the partial ordering to apply to eliminate nodes
+ Here is the call graph for this function:

◆ triangulatedGraph()

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

returns the triangulated graph

Implements gum::Triangulation.

Definition at line 466 of file staticTriangulation.cpp.

References gum::Set< Key, Alloc >::emplace().

466  {
468 
469  // if we did not construct the triangulated graph during the triangulation,
470  // that is, we just constructed the junction tree, we shall construct it now
472  // just in case, be sure that the junction tree has been constructed
474 
475  // copy the original graph
477 
478  for (const auto clik_id: *_junction_tree_) {
479  // for each clique, add the edges necessary to make it complete
480  const NodeSet& clique = _junction_tree_->clique(clik_id);
481  std::vector< NodeId > clique_nodes(clique.size());
482  unsigned int i = 0;
483 
484  for (const auto node: clique) {
485  clique_nodes[i] = node;
486  i += 1;
487  }
488 
489  for (i = 0; i < clique_nodes.size(); ++i) {
490  for (unsigned int j = i + 1; j < clique_nodes.size(); ++j) {
491  try {
492  _triangulated_graph_.addEdge(clique_nodes[i], clique_nodes[j]);
493  } catch (DuplicateElement&) {}
494  }
495  }
496  }
497 
499  }
500 
501  return _triangulated_graph_;
502  }
const CliqueGraph & junctionTree()
returns a compatible junction tree
bool _has_triangulated_graph_
a boolean indicating whether we have constructed the triangulated graph
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
void _triangulate_()
the function that performs the triangulation
UndiGraph _triangulated_graph_
the triangulated graph
bool _has_junction_tree_
a boolean indicating whether the junction tree has been constructed
bool _has_triangulation_
a boolean indicating whether we have parformed a triangulation
const CliqueGraph * _junction_tree_
the junction tree computed by the algorithm
const UndiGraph * _original_graph_
a pointer to the (external) original graph (which will be triangulated)
void addEdge(NodeId first, NodeId second) override
insert a new edge into the undirected graph
Definition: undiGraph_inl.h:34
+ Here is the call graph for this function:

Member Data Documentation

◆ _partial_order_

const List< NodeSet >* gum::PartialOrderedTriangulation::_partial_order_ {nullptr}
protected

the partial ordering to apply to eliminate nodes

Definition at line 159 of file partialOrderedTriangulation.h.

◆ domain_sizes_

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

the domain sizes of the variables/nodes of the graph

Definition at line 150 of file triangulation.h.

◆ elimination_sequence_strategy_

EliminationSequenceStrategy* gum::StaticTriangulation::elimination_sequence_strategy_ {nullptr}
protectedinherited

the elimination sequence strategy used by the triangulation

Definition at line 229 of file staticTriangulation.h.

◆ junction_tree_strategy_

JunctionTreeStrategy* gum::StaticTriangulation::junction_tree_strategy_ {nullptr}
protectedinherited

the junction tree strategy used by the triangulation

Definition at line 232 of file staticTriangulation.h.


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