gtsam 4.1.1
gtsam
EliminationTree.h
Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
2
3* GTSAM Copyright 2010, Georgia Tech Research Corporation,
4* Atlanta, Georgia 30332-0415
5* All Rights Reserved
6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7
8* See LICENSE for the license information
9
10* -------------------------------------------------------------------------- */
11
18#pragma once
19
20#include <utility>
21#include <boost/shared_ptr.hpp>
22
23#include <gtsam/base/Testable.h>
25
26class EliminationTreeTester; // for unit tests, see testEliminationTree
27
28namespace gtsam {
29
30 class VariableIndex;
31 class Ordering;
32
50 template<class BAYESNET, class GRAPH>
52 {
53 protected:
55 typedef boost::shared_ptr<This> shared_ptr;
56
57 public:
58 typedef GRAPH FactorGraphType;
59 typedef typename GRAPH::FactorType FactorType;
60 typedef typename boost::shared_ptr<FactorType> sharedFactor;
61 typedef BAYESNET BayesNetType;
62 typedef typename BayesNetType::ConditionalType ConditionalType;
63 typedef typename boost::shared_ptr<ConditionalType> sharedConditional;
64 typedef typename GRAPH::Eliminate Eliminate;
65
66 struct Node {
67 typedef FastVector<sharedFactor> Factors;
68 typedef FastVector<boost::shared_ptr<Node> > Children;
69
71 Factors factors;
72 Children children;
73
74 sharedFactor eliminate(const boost::shared_ptr<BayesNetType>& output,
75 const Eliminate& function, const FastVector<sharedFactor>& childrenFactors) const;
76
77 void print(const std::string& str, const KeyFormatter& keyFormatter) const;
78 };
79
80 typedef boost::shared_ptr<Node> sharedNode;
81
82 protected:
84 GTSAM_CONCEPT_TESTABLE_TYPE(FactorType)
85
86 FastVector<sharedNode> roots_;
87 FastVector<sharedFactor> remainingFactors_;
88
91
100 EliminationTree(const FactorGraphType& factorGraph,
101 const VariableIndex& structure, const Ordering& order);
102
108 EliminationTree(const FactorGraphType& factorGraph, const Ordering& order);
109
112 EliminationTree(const This& other) { *this = other; }
113
116 This& operator=(const This& other);
117
119
120 public:
123
129 std::pair<boost::shared_ptr<BayesNetType>, boost::shared_ptr<FactorGraphType> >
130 eliminate(Eliminate function) const;
131
135
137 void print(const std::string& name = "EliminationTree: ",
138 const KeyFormatter& formatter = DefaultKeyFormatter) const;
139
140 protected:
142 bool equals(const This& other, double tol = 1e-9) const;
143
145
146 public:
149
151 const FastVector<sharedNode>& roots() const { return roots_; }
152
154 const FastVector<sharedFactor>& remainingFactors() const { return remainingFactors_; }
155
157 void swap(This& other);
158
159 protected:
162
163 private:
165 friend class ::EliminationTreeTester;
166 };
167
168}
A thin wrapper around std::vector that uses a custom allocator.
Concept check for values that can be used in unit tests.
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:69
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:35
An elimination tree is a data structure used intermediately during elimination.
Definition: EliminationTree.h:52
bool equals(const This &other, double tol=1e-9) const
Test whether the tree is equal to another.
Definition: EliminationTree-inst.h:214
void print(const std::string &name="EliminationTree: ", const KeyFormatter &formatter=DefaultKeyFormatter) const
Print the tree to cout.
Definition: EliminationTree-inst.h:207
std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr< FactorGraphType > > eliminate(Eliminate function) const
Eliminate the factors to a Bayes net and remaining factor graph.
Definition: EliminationTree-inst.h:187
This & operator=(const This &other)
Assignment operator - makes a deep copy of the tree structure, but only pointers to factors are copie...
Definition: EliminationTree-inst.h:172
EliminationTree< BAYESNET, GRAPH > This
This class.
Definition: EliminationTree.h:54
FastVector< sharedNode > roots_
concept check
Definition: EliminationTree.h:86
boost::shared_ptr< FactorType > sharedFactor
Shared pointer to a factor.
Definition: EliminationTree.h:60
BAYESNET BayesNetType
The BayesNet corresponding to FACTOR.
Definition: EliminationTree.h:61
boost::shared_ptr< ConditionalType > sharedConditional
Shared pointer to a conditional.
Definition: EliminationTree.h:63
const FastVector< sharedNode > & roots() const
Return the set of roots (one for a tree, multiple for a forest)
Definition: EliminationTree.h:151
GRAPH FactorGraphType
The factor graph type.
Definition: EliminationTree.h:58
void swap(This &other)
Swap the data of this tree with another one, this operation is very fast.
Definition: EliminationTree-inst.h:283
EliminationTree()
Protected default constructor.
Definition: EliminationTree.h:161
BayesNetType::ConditionalType ConditionalType
The type of conditionals.
Definition: EliminationTree.h:62
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition: EliminationTree.h:55
GRAPH::FactorType FactorType
The type of factors.
Definition: EliminationTree.h:59
boost::shared_ptr< Node > sharedNode
Shared pointer to Node.
Definition: EliminationTree.h:80
const FastVector< sharedFactor > & remainingFactors() const
Return the remaining factors that are not pulled into elimination.
Definition: EliminationTree.h:154
Definition: EliminationTree.h:66
Key key
key associated with root
Definition: EliminationTree.h:70
Children children
sub-trees
Definition: EliminationTree.h:72
Factors factors
factors associated with root
Definition: EliminationTree.h:71
Definition: Ordering.h:34
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition: VariableIndex.h:43