![]() |
aGrUM
0.16.0
|
Base class for all elimination sequence algorithm that impose a given partial ordering on the nodes elimination sequence, that is, the set of all the nodes is divided into several subsets. More...
#include <partialOrderedEliminationSequenceStrategy.h>
Public Member Functions | |
Accessors / Modifiers | |
virtual bool | setGraph (UndiGraph *graph, const NodeProperty< Size > *dom_sizes) |
sets a new graph to be triangulated More... | |
virtual bool | setPartialOrder (const List< NodeSet > *subsets) |
sets a new partial ordering constraint on the elimination sequence More... | |
virtual void | clear () |
clears the sequence (to prepare, for instance, a new elimination sequence) More... | |
const List< NodeSet > * | partialOrder () const noexcept |
returns the current partial ordering More... | |
bool | isPartialOrderNeeded () const noexcept |
indicates if a new partial ordering is needed More... | |
Accessors / Modifiers | |
virtual NodeId | nextNodeToEliminate ()=0 |
returns the new node to be eliminated within the triangulation algorithm More... | |
virtual void | askFillIns (bool do_it)=0 |
if the elimination sequence is able to compute fill-ins, we indicate whether we want this feature to be activated More... | |
virtual bool | providesFillIns () const =0 |
indicates whether the fill-ins generated by the eliminated nodes, if needed, will be computed by the elimination sequence, or need be computed by the triangulation itself. More... | |
virtual bool | providesGraphUpdate () const =0 |
indicates whether the elimination sequence updates by itself the graph after a node has been eliminated More... | |
virtual void | eliminationUpdate (const NodeId node) |
performs all the graph/fill-ins updates provided (if any) More... | |
virtual const EdgeSet & | fillIns () |
in case fill-ins are provided, this function returns the fill-ins due to all the nodes eliminated so far More... | |
UndiGraph * | graph () const noexcept |
returns the current graph More... | |
const NodeProperty< Size > * | domainSizes () const noexcept |
returns the current domain sizes More... | |
Protected Attributes | |
const List< NodeSet > * | _subsets {nullptr} |
the subsets constituting the partial ordering More... | |
List< NodeSet >::const_iterator | _subset_iter |
the iterator indicating which is the current subset on which we work More... | |
NodeSet | _nodeset |
the nodes which can be currently eliminated More... | |
bool | _partial_order_needed {true} |
indicate whether a new partial ordering is necessary for the elimination More... | |
UndiGraph * | _graph {nullptr} |
the graph to be triangulated More... | |
const NodeProperty< Size > * | _domain_sizes {nullptr} |
the domain sizes of the variables/nodes More... | |
NodeProperty< double > | _log_domain_sizes |
the log of the domain sizes of the variables/nodes More... | |
Protected Member Functions | |
bool | _isPartialOrderNeeded (const List< NodeSet > *subsets) const |
indicate whether a partial ordering is compatible with the current graph More... | |
Constructors / Destructors | |
virtual | ~PartialOrderedEliminationSequenceStrategy () |
destructor More... | |
virtual PartialOrderedEliminationSequenceStrategy * | newFactory () const =0 |
creates a new elimination sequence of the same type as the current object, but this sequence contains only an empty graph More... | |
virtual PartialOrderedEliminationSequenceStrategy * | copyFactory () const =0 |
virtual copy constructor More... | |
PartialOrderedEliminationSequenceStrategy () | |
default constructor (uses an empty graph) More... | |
PartialOrderedEliminationSequenceStrategy (UndiGraph *graph, const NodeProperty< Size > *dom_sizes, const List< NodeSet > *subsets) | |
constructor for an a priori non empty graph More... | |
PartialOrderedEliminationSequenceStrategy (const PartialOrderedEliminationSequenceStrategy &) | |
copy constructor More... | |
PartialOrderedEliminationSequenceStrategy (PartialOrderedEliminationSequenceStrategy &&) | |
move constructor More... | |
Base class for all elimination sequence algorithm that impose a given partial ordering on the nodes elimination sequence, 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 55 of file partialOrderedEliminationSequenceStrategy.h.
|
virtual |
destructor
Definition at line 89 of file partialOrderedEliminationSequenceStrategy.cpp.
Referenced by PartialOrderedEliminationSequenceStrategy().
|
protected |
default constructor (uses an empty graph)
default constructor
Definition at line 44 of file partialOrderedEliminationSequenceStrategy.cpp.
Referenced by PartialOrderedEliminationSequenceStrategy().
|
protected |
constructor for an a priori non empty graph
graph | the graph to be triangulated, i.e., the nodes of which will be eliminated |
dom_sizes | thedomain sizes of the nodes/variables |
subsets | the list of the subsets constituting the partial ordering |
Definition at line 51 of file partialOrderedEliminationSequenceStrategy.cpp.
References PartialOrderedEliminationSequenceStrategy(), setGraph(), and setPartialOrder().
|
protected |
copy constructor
Definition at line 64 of file partialOrderedEliminationSequenceStrategy.cpp.
References PartialOrderedEliminationSequenceStrategy().
|
protected |
move constructor
Definition at line 75 of file partialOrderedEliminationSequenceStrategy.cpp.
References ~PartialOrderedEliminationSequenceStrategy().
|
protected |
indicate whether a partial ordering is compatible with the current graph
The method checks whether all the nodes of the graph belong to the partial ordering.
Definition at line 105 of file partialOrderedEliminationSequenceStrategy.cpp.
References gum::EliminationSequenceStrategy::_graph, gum::NodeGraphPart::existsNode(), gum::Set< Key, Alloc >::insert(), and gum::NodeGraphPart::size().
Referenced by setPartialOrder().
|
pure virtualinherited |
if the elimination sequence is able to compute fill-ins, we indicate whether we want this feature to be activated
do_it | when true and the elimination sequence has the ability to compute fill-ins, the elimination sequence will actually compute them (for the triangulation to use them), else they will not be available. |
Implemented in gum::DefaultPartialOrderedEliminationSequenceStrategy, gum::DefaultEliminationSequenceStrategy, and gum::OrderedEliminationSequenceStrategy.
Referenced by gum::StaticTriangulation::__triangulate().
|
virtual |
clears the sequence (to prepare, for instance, a new elimination sequence)
Reimplemented from gum::EliminationSequenceStrategy.
Reimplemented in gum::DefaultPartialOrderedEliminationSequenceStrategy.
Definition at line 146 of file partialOrderedEliminationSequenceStrategy.cpp.
References _nodeset, _partial_order_needed, _subsets, gum::EliminationSequenceStrategy::clear(), and gum::Set< Key, Alloc >::clear().
Referenced by gum::DefaultPartialOrderedEliminationSequenceStrategy::clear().
|
pure virtual |
virtual copy constructor
Implements gum::EliminationSequenceStrategy.
Implemented in gum::DefaultPartialOrderedEliminationSequenceStrategy.
|
noexceptinherited |
returns the current domain sizes
Definition at line 44 of file eliminationSequenceStrategy_inl.h.
References gum::EliminationSequenceStrategy::_domain_sizes.
|
virtualinherited |
performs all the graph/fill-ins updates provided (if any)
node | the node the elimination of which requires the graph update |
Reimplemented in gum::DefaultPartialOrderedEliminationSequenceStrategy, gum::DefaultEliminationSequenceStrategy, and gum::OrderedEliminationSequenceStrategy.
Definition at line 97 of file eliminationSequenceStrategy.cpp.
Referenced by gum::StaticTriangulation::__triangulate().
|
virtualinherited |
in case fill-ins are provided, this function returns the fill-ins due to all the nodes eliminated so far
Reimplemented in gum::DefaultPartialOrderedEliminationSequenceStrategy, gum::DefaultEliminationSequenceStrategy, and gum::OrderedEliminationSequenceStrategy.
Definition at line 101 of file eliminationSequenceStrategy.cpp.
References gum::EliminationSequenceStrategy::__empty_fill_ins().
Referenced by gum::StaticTriangulation::fillIns(), gum::OrderedEliminationSequenceStrategy::fillIns(), gum::DefaultEliminationSequenceStrategy::fillIns(), and gum::DefaultPartialOrderedEliminationSequenceStrategy::fillIns().
|
noexceptinherited |
returns the current graph
Definition at line 37 of file eliminationSequenceStrategy_inl.h.
References gum::EliminationSequenceStrategy::_graph.
Referenced by gum::EliminationSequenceStrategy::setGraph().
|
noexcept |
indicates if a new partial ordering is needed
if the current partial ordering does not contain all the nodes of the graph or if the graph itself is not defined (nullptr) a new partial ordering will be needed for the next triangulation
Definition at line 46 of file partialOrderedEliminationSequenceStrategy_inl.h.
References _partial_order_needed.
|
pure virtual |
creates a new elimination sequence of the same type as the current object, but this sequence contains only an empty graph
Implements gum::EliminationSequenceStrategy.
Implemented in gum::DefaultPartialOrderedEliminationSequenceStrategy.
|
pure virtualinherited |
returns the new node to be eliminated within the triangulation algorithm
NotFound | exception is thrown if there is no more node to eliminate in the graph |
Implemented in gum::DefaultPartialOrderedEliminationSequenceStrategy, gum::DefaultEliminationSequenceStrategy, and gum::OrderedEliminationSequenceStrategy.
Referenced by gum::StaticTriangulation::__triangulate().
|
noexcept |
returns the current partial ordering
Definition at line 39 of file partialOrderedEliminationSequenceStrategy_inl.h.
References _subsets.
|
pure virtualinherited |
indicates whether the fill-ins generated by the eliminated nodes, if needed, will be computed by the elimination sequence, or need be computed by the triangulation itself.
An elimination sequence provides fill-ins to its triangulation if and only if it has the ability to compute them and it has been asked to do so (by method askFillIns)
Implemented in gum::DefaultPartialOrderedEliminationSequenceStrategy, gum::DefaultEliminationSequenceStrategy, and gum::OrderedEliminationSequenceStrategy.
Referenced by gum::StaticTriangulation::__triangulate(), and gum::StaticTriangulation::fillIns().
|
pure virtualinherited |
indicates whether the elimination sequence updates by itself the graph after a node has been eliminated
Some algorithms have more informations than the triangulation algorithm to update the graph after a node has been eliminated. They can thus exploit these informations to update the graph faster than the triangulation itself. Hence the latter should delegate this operation to the elimination sequence. This is the case, for instance, for the defaultEliminationSequenceStrategy, which uses a SimplicialSet that knows that some eliminated nodes do not require any fill-in.
Implemented in gum::DefaultPartialOrderedEliminationSequenceStrategy, gum::DefaultEliminationSequenceStrategy, and gum::OrderedEliminationSequenceStrategy.
Referenced by gum::StaticTriangulation::__triangulate().
|
virtual |
sets a new graph to be triangulated
The elimination sequence algorithms reinitializes its data to start a new triangulation with graph Graph
graph | the new graph to be triangulated |
dom_sizes | the domain sizes of the nodes/variables |
Reimplemented from gum::EliminationSequenceStrategy.
Reimplemented in gum::DefaultPartialOrderedEliminationSequenceStrategy.
Definition at line 95 of file partialOrderedEliminationSequenceStrategy.cpp.
References _subsets, gum::EliminationSequenceStrategy::setGraph(), and setPartialOrder().
Referenced by gum::PartialOrderedTriangulation::_initTriangulation(), PartialOrderedEliminationSequenceStrategy(), and gum::DefaultPartialOrderedEliminationSequenceStrategy::setGraph().
|
virtual |
sets a new partial ordering constraint on the elimination sequence
sets a new partial order
subsets | the list of the subsets constituting the partial ordering |
Definition at line 122 of file partialOrderedEliminationSequenceStrategy.cpp.
References gum::EliminationSequenceStrategy::_graph, _isPartialOrderNeeded(), _nodeset, _partial_order_needed, _subset_iter, _subsets, gum::Set< Key, Alloc >::clear(), gum::Set< Key, Alloc >::empty(), gum::NodeGraphPart::existsNode(), and gum::Set< Key, Alloc >::insert().
Referenced by gum::PartialOrderedTriangulation::_initTriangulation(), gum::DefaultPartialOrderedEliminationSequenceStrategy::DefaultPartialOrderedEliminationSequenceStrategy(), PartialOrderedEliminationSequenceStrategy(), and setGraph().
|
protectedinherited |
the domain sizes of the variables/nodes
Definition at line 159 of file eliminationSequenceStrategy.h.
Referenced by gum::EliminationSequenceStrategy::clear(), gum::EliminationSequenceStrategy::domainSizes(), and gum::EliminationSequenceStrategy::setGraph().
|
protectedinherited |
the graph to be triangulated
Definition at line 156 of file eliminationSequenceStrategy.h.
Referenced by gum::DefaultEliminationSequenceStrategy::__createSimplicialSet(), gum::DefaultPartialOrderedEliminationSequenceStrategy::__createSimplicialSet(), gum::OrderedEliminationSequenceStrategy::__isOrderNeeded(), _isPartialOrderNeeded(), gum::EliminationSequenceStrategy::clear(), gum::OrderedEliminationSequenceStrategy::eliminationUpdate(), gum::DefaultPartialOrderedEliminationSequenceStrategy::eliminationUpdate(), gum::EliminationSequenceStrategy::graph(), gum::DefaultEliminationSequenceStrategy::nextNodeToEliminate(), gum::DefaultPartialOrderedEliminationSequenceStrategy::nextNodeToEliminate(), gum::EliminationSequenceStrategy::setGraph(), gum::OrderedEliminationSequenceStrategy::setOrder(), and setPartialOrder().
|
protectedinherited |
the log of the domain sizes of the variables/nodes
Definition at line 162 of file eliminationSequenceStrategy.h.
Referenced by gum::DefaultEliminationSequenceStrategy::__createSimplicialSet(), gum::DefaultPartialOrderedEliminationSequenceStrategy::__createSimplicialSet(), gum::EliminationSequenceStrategy::clear(), and gum::EliminationSequenceStrategy::setGraph().
|
protected |
the nodes which can be currently eliminated
Definition at line 135 of file partialOrderedEliminationSequenceStrategy.h.
Referenced by gum::DefaultPartialOrderedEliminationSequenceStrategy::__nodeToEliminate(), clear(), gum::DefaultPartialOrderedEliminationSequenceStrategy::eliminationUpdate(), gum::DefaultPartialOrderedEliminationSequenceStrategy::nextNodeToEliminate(), and setPartialOrder().
|
protected |
indicate whether a new partial ordering is necessary for the elimination
Definition at line 138 of file partialOrderedEliminationSequenceStrategy.h.
Referenced by clear(), gum::DefaultPartialOrderedEliminationSequenceStrategy::eliminationUpdate(), isPartialOrderNeeded(), gum::DefaultPartialOrderedEliminationSequenceStrategy::nextNodeToEliminate(), and setPartialOrder().
|
protected |
the iterator indicating which is the current subset on which we work
Definition at line 132 of file partialOrderedEliminationSequenceStrategy.h.
Referenced by gum::DefaultPartialOrderedEliminationSequenceStrategy::eliminationUpdate(), and setPartialOrder().
the subsets constituting the partial ordering
Definition at line 129 of file partialOrderedEliminationSequenceStrategy.h.
Referenced by clear(), gum::DefaultPartialOrderedEliminationSequenceStrategy::eliminationUpdate(), partialOrder(), setGraph(), and setPartialOrder().