gtsam
Loading...
Searching...
No Matches
GaussianFactorGraph.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
21
22#pragma once
23
24#include <cstddef>
28#include <gtsam/linear/Errors.h> // Included here instead of fw-declared so we can use Errors::iterator
33
34namespace gtsam {
35
36 // Forward declarations
38 class GaussianFactor;
40 class GaussianBayesNet;
44
45 /* ************************************************************************* */
47 {
56 static std::pair<std::shared_ptr<ConditionalType>, std::shared_ptr<FactorType> >
57 DefaultEliminate(const FactorGraphType& factors, const Ordering& keys) {
58 return EliminatePreferCholesky(factors, keys); }
59
61 const FactorGraphType& graph,
62 std::optional<std::reference_wrapper<const VariableIndex>> variableIndex) {
63 return Ordering::Colamd((*variableIndex).get());
64 }
65 };
66
67 /* ************************************************************************* */
74 class GTSAM_EXPORT GaussianFactorGraph :
75 public FactorGraph<GaussianFactor>,
76 public EliminateableFactorGraph<GaussianFactorGraph>
77 {
78 public:
79
83 typedef std::shared_ptr<This> shared_ptr;
84
87
90
96 GaussianFactorGraph(std::initializer_list<sharedFactor> factors) : Base(factors) {}
97
98
100 template<typename ITERATOR>
101 GaussianFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor) : Base(firstFactor, lastFactor) {}
102
104 template<class CONTAINER>
105 explicit GaussianFactorGraph(const CONTAINER& factors) : Base(factors) {}
106
108 template<class DERIVEDFACTOR>
110
114
115 bool equals(const This& fg, double tol = 1e-9) const;
116
118
120 friend bool operator==(const GaussianFactorGraph& lhs,
121 const GaussianFactorGraph& rhs) {
122 return lhs.isEqual(rhs);
123 }
124
126 void add(const GaussianFactor& factor) { push_back(factor.clone()); }
127
129 void add(const sharedFactor& factor) { push_back(factor); }
130
132 void add(const Vector& b) {
133 add(JacobianFactor(b)); }
134
136 void add(Key key1, const Matrix& A1,
137 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {
138 add(JacobianFactor(key1,A1,b,model)); }
139
141 void add(Key key1, const Matrix& A1,
142 Key key2, const Matrix& A2,
143 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {
144 add(JacobianFactor(key1,A1,key2,A2,b,model)); }
145
147 void add(Key key1, const Matrix& A1,
148 Key key2, const Matrix& A2,
149 Key key3, const Matrix& A3,
150 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {
151 add(JacobianFactor(key1,A1,key2,A2,key3,A3,b,model)); }
152
154 template<class TERMS>
155 void add(const TERMS& terms, const Vector &b, const SharedDiagonal& model = SharedDiagonal()) {
156 add(JacobianFactor(terms,b,model)); }
157
162 typedef KeySet Keys;
163 Keys keys() const;
164
165 /* return a map of (Key, dimension) */
166 std::map<Key, size_t> getKeyDimMap() const;
167
169 double error(const VectorValues& x) const;
170
175 double deltaError(const VectorValues& x, double* oldError = nullptr,
176 double* newError = nullptr) const;
177
179 double probPrime(const VectorValues& c) const;
180
186 virtual GaussianFactorGraph clone() const;
187
193
201
204
215 std::vector<std::tuple<int, int, double> > sparseJacobian(
216 const Ordering& ordering, size_t& nrows, size_t& ncols) const;
217
219 std::vector<std::tuple<int, int, double> > sparseJacobian() const;
220
227 Matrix sparseJacobian_() const;
228
236 Matrix augmentedJacobian(const Ordering& ordering) const;
237
245 Matrix augmentedJacobian() const;
246
254 std::pair<Matrix,Vector> jacobian(const Ordering& ordering) const;
255
263 std::pair<Matrix,Vector> jacobian() const;
264
276 Matrix augmentedHessian(const Ordering& ordering) const;
277
289 Matrix augmentedHessian() const;
290
297 std::pair<Matrix,Vector> hessian(const Ordering& ordering) const;
298
305 std::pair<Matrix,Vector> hessian() const;
306
308 virtual VectorValues hessianDiagonal() const;
309
311 virtual std::map<Key,Matrix> hessianBlockDiagonal() const;
312
318 const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;
319
324 VectorValues optimize(const Ordering& ordering,
325 const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;
326
331
341 VectorValues gradient(const VectorValues& x0) const;
342
350 virtual VectorValues gradientAtZero() const;
351
377
379 VectorValues transposeMultiply(const Errors& e) const;
380
382 void transposeMultiplyAdd(double alpha, const Errors& e, VectorValues& x) const;
383
385 Errors gaussianErrors(const VectorValues& x) const;
386
388 Errors operator*(const VectorValues& x) const;
389
391 void multiplyHessianAdd(double alpha, const VectorValues& x,
392 VectorValues& y) const;
393
395 void multiplyInPlace(const VectorValues& x, Errors& e) const;
396
398 void multiplyInPlace(const VectorValues& x, const Errors::iterator& e) const;
399
400 void printErrors(
401 const VectorValues& x,
402 const std::string& str = "GaussianFactorGraph: ",
403 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
405 printCondition = FactorErrorPredicate{
406 [](const Factor*, double, size_t) { return true; }}) const;
408
409 private:
410#if GTSAM_ENABLE_BOOST_SERIALIZATION
412 friend class boost::serialization::access;
413 template<class ARCHIVE>
414 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
415 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
416 }
417#endif
418 };
419
424 GTSAM_EXPORT bool hasConstraints(const GaussianFactorGraph& factors);
425
426 /****** Linear Algebra Operations ******/
427
429 //GTSAM_EXPORT void residual(const GaussianFactorGraph& fg, const VectorValues &x, VectorValues &r);
430 //GTSAM_EXPORT void multiply(const GaussianFactorGraph& fg, const VectorValues &x, VectorValues &r);
431
433template<>
434struct traits<GaussianFactorGraph> : public Testable<GaussianFactorGraph> {
435};
436
437} // \ namespace gtsam
Factor Graph Base Class.
Predicate used to filter factor-graph error output.
Variable elimination algorithms for factor graphs.
Contains the HessianFactor class, a general quadratic factor.
vector of errors
A factor with a quadratic error function - a Gaussian.
Factor Graph Values.
std::pair< std::shared_ptr< GaussianConditional >, std::shared_ptr< GaussianFactor > > EliminatePreferCholesky(const GaussianFactorGraph &factors, const Ordering &keys)
Densely partially eliminate with Cholesky factorization.
Definition HessianFactor.cpp:646
Global functions in a separate testing namespace.
Definition chartTesting.h:28
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition Key.cpp:30
bool hasConstraints(const GaussianFactorGraph &factors)
Evaluates whether linear factors have any constrained noise models.
Definition GaussianFactorGraph.cpp:473
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:52
std::function< bool(const Factor *, double, std::size_t)> FactorErrorPredicate
Predicate used to select factor errors for graph diagnostics.
Definition FactorErrorPredicate.h:27
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
FastList< Vector > Errors
Errors is a vector of errors.
Definition Errors.h:34
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:43
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
Template to create a binary predicate.
Definition Testable.h:112
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:152
bool isEqual(const FactorGraph &other) const
Check exact equality of the factor pointers. Useful for derived ==.
Definition FactorGraph.h:95
IsDerived< DERIVEDFACTOR > push_back(std::shared_ptr< DERIVEDFACTOR > factor)
Definition FactorGraph.h:147
FactorGraph()
Definition FactorGraph.h:103
std::shared_ptr< GaussianFactor > sharedFactor
Definition FactorGraph.h:62
Traits class for eliminateable factor graphs, specifies the types that result from elimination,...
Definition EliminateableFactorGraph.h:38
EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms.
Definition EliminateableFactorGraph.h:59
std::function< EliminationResult(const FactorGraphType &, const Ordering &)> Eliminate
Definition EliminateableFactorGraph.h:91
Definition Factor.h:71
Definition Ordering.h:33
static Ordering Colamd(const FACTOR_GRAPH &graph)
Compute a fill-reducing ordering using COLAMD from a factor graph (see details for note on performanc...
Definition Ordering.h:93
GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.
Definition GaussianBayesNet.h:36
A Bayes tree representing a Gaussian density.
Definition GaussianBayesTree.h:53
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
Definition GaussianEliminationTree.h:29
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
virtual GaussianFactor::shared_ptr clone() const =0
Clone a factor (make a deep copy).
static Ordering DefaultOrderingFunc(const FactorGraphType &graph, std::optional< std::reference_wrapper< const VariableIndex > > variableIndex)
The default ordering generation function.
Definition GaussianFactorGraph.h:60
GaussianBayesTree BayesTreeType
Type of Bayes tree.
Definition GaussianFactorGraph.h:53
GaussianConditional ConditionalType
Type of conditionals from elimination.
Definition GaussianFactorGraph.h:50
GaussianFactor FactorType
Type of factors in factor graph.
Definition GaussianFactorGraph.h:48
GaussianEliminationTree EliminationTreeType
Type of elimination tree.
Definition GaussianFactorGraph.h:52
GaussianFactorGraph FactorGraphType
Type of the factor graph (e.g. GaussianFactorGraph).
Definition GaussianFactorGraph.h:49
GaussianBayesNet BayesNetType
Type of Bayes net from sequential elimination.
Definition GaussianFactorGraph.h:51
static std::pair< std::shared_ptr< ConditionalType >, std::shared_ptr< FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering &keys)
The default dense elimination function.
Definition GaussianFactorGraph.h:57
GaussianJunctionTree JunctionTreeType
Type of Junction tree.
Definition GaussianFactorGraph.h:54
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:77
GaussianFactorGraph negate() const
Returns the negation of all factors in this graph - corresponds to antifactors.
Definition GaussianFactorGraph.cpp:137
std::pair< Matrix, Vector > jacobian(const Ordering &ordering) const
Return the dense Jacobian and right-hand-side , with the noise models baked into A and b.
Definition GaussianFactorGraph.cpp:263
EliminateableFactorGraph< This > BaseEliminateable
Typedef to base elimination class.
Definition GaussianFactorGraph.h:82
Matrix augmentedJacobian(const Ordering &ordering) const
Return a dense Jacobian matrix, augmented with b with the noise models baked into A and b.
Definition GaussianFactorGraph.cpp:248
void add(const TERMS &terms, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Add an n-ary factor.
Definition GaussianFactorGraph.h:155
std::vector< std::tuple< int, int, double > > sparseJacobian(const Ordering &ordering, size_t &nrows, size_t &ncols) const
Returns a sparse augmented Jacbian matrix as a vector of i, j, and s, where i(k) and j(k) are the bas...
Definition GaussianFactorGraph.cpp:150
GaussianFactorGraph(std::initializer_list< sharedFactor > factors)
Construct from an initializer lists of GaussianFactor shared pointers.
Definition GaussianFactorGraph.h:96
VectorValues optimizeGradientSearch() const
Optimize along the gradient direction, with a closed-form computation to perform the line search.
Definition GaussianFactorGraph.cpp:412
virtual VectorValues gradientAtZero() const
Compute the gradient of the energy function, , centered around zero.
Definition GaussianFactorGraph.cpp:400
virtual std::map< Key, Matrix > hessianBlockDiagonal() const
Return the block diagonal of the Hessian for this factor.
Definition GaussianFactorGraph.cpp:321
Matrix sparseJacobian_() const
Matrix version of sparseJacobian: generates a 3*m matrix with [i,j,s] entries such that S(i(k),...
Definition GaussianFactorGraph.cpp:230
virtual GaussianFactorGraph::shared_ptr cloneToPtr() const
CloneToPtr() performs a simple assignment to a new graph and returns it.
Definition GaussianFactorGraph.cpp:118
GaussianFactorGraph()
Default constructor.
Definition GaussianFactorGraph.h:89
double deltaError(const VectorValues &x, double *oldError=nullptr, double *newError=nullptr) const
Compute the change in error from zero to x, using a single pass over the factors.
Definition GaussianFactorGraph.cpp:83
void add(const GaussianFactor &factor)
Add a factor by value - makes a copy.
Definition GaussianFactorGraph.h:126
double probPrime(const VectorValues &c) const
Unnormalized probability.
Definition GaussianFactorGraph.cpp:112
std::pair< Matrix, Vector > hessian(const Ordering &ordering) const
Return the dense Hessian and information vector , with the noise models baked in.
Definition GaussianFactorGraph.cpp:295
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:83
VectorValues optimize(const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
Solve the factor graph by performing multifrontal variable elimination in COLAMD order using the dens...
Definition GaussianFactorGraph.cpp:340
virtual GaussianFactorGraph clone() const
Clone() performs a deep-copy of the graph, including all of the factors.
Definition GaussianFactorGraph.cpp:125
void multiplyInPlace(const VectorValues &x, const Errors::iterator &e) const
return A*x ‍/ Errors operator(const VectorValues& x) const;
Definition GaussianFactorGraph.cpp:458
void add(Key key1, const Matrix &A1, Key key2, const Matrix &A2, Key key3, const Matrix &A3, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Add a ternary factor.
Definition GaussianFactorGraph.h:147
Errors gaussianErrors(const VectorValues &x) const
return A*x-b
Definition GaussianFactorGraph.cpp:543
void add(const sharedFactor &factor)
Add a factor by pointer - stores pointer without copying the factor.
Definition GaussianFactorGraph.h:129
friend bool operator==(const GaussianFactorGraph &lhs, const GaussianFactorGraph &rhs)
Check exact equality.
Definition GaussianFactorGraph.h:120
VectorValues gradient(const VectorValues &x0) const
Compute the gradient of the energy function, , centered around .
Definition GaussianFactorGraph.cpp:388
GaussianFactorGraph This
Typedef to this class.
Definition GaussianFactorGraph.h:80
KeySet Keys
Return the set of variables involved in the factors (computes a set union).
Definition GaussianFactorGraph.h:162
virtual VectorValues hessianDiagonal() const
Return only the diagonal of the Hessian A'*A, as a VectorValues.
Definition GaussianFactorGraph.cpp:310
double error(const VectorValues &x) const
unnormalized error
Definition GaussianFactorGraph.cpp:73
void add(const Vector &b)
Add a null factor.
Definition GaussianFactorGraph.h:132
void add(Key key1, const Matrix &A1, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Add a unary factor.
Definition GaussianFactorGraph.h:136
void transposeMultiplyAdd(double alpha, const Errors &e, VectorValues &x) const
x += alpha*A'*e
Definition GaussianFactorGraph.cpp:486
void add(Key key1, const Matrix &A1, Key key2, const Matrix &A2, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Add a binary factor.
Definition GaussianFactorGraph.h:141
Matrix augmentedHessian(const Ordering &ordering) const
Return a dense Hessian matrix, augmented with the information vector .
Definition GaussianFactorGraph.cpp:278
VectorValues transposeMultiply(const Errors &e) const
x = A'*e
Definition GaussianFactorGraph.cpp:524
GaussianFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)
Construct from iterator over factors.
Definition GaussianFactorGraph.h:101
VectorValues optimizeDensely() const
Optimize using Eigen's dense Cholesky factorization.
Definition GaussianFactorGraph.cpp:354
FactorGraph< GaussianFactor > Base
Typedef to base factor graph type.
Definition GaussianFactorGraph.h:81
GaussianFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition GaussianFactorGraph.h:109
GaussianFactorGraph(const CONTAINER &factors)
Construct from container of factors (shared_ptr or plain objects).
Definition GaussianFactorGraph.h:105
A junction tree specialized to Gaussian factors, i.e., it is a cluster tree with Gaussian factors sto...
Definition GaussianJunctionTree.h:39
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:92
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:73