gtsam 4.2.0
gtsam
SubgraphPreconditioner.h
Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
2
3 * GTSAM Copyright 2010-2019, 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
21#include <gtsam/linear/Errors.h>
25#include <gtsam/linear/Preconditioner.h>
27#include <gtsam/dllexport.h>
28
29#include <boost/shared_ptr.hpp>
30
31#include <map>
32
33namespace gtsam {
34
35 // Forward declarations
36 class GaussianBayesNet;
37 class GaussianFactorGraph;
38 class VectorValues;
39
41 typedef boost::shared_ptr<SubgraphPreconditionerParameters> shared_ptr;
43 : builderParams(p) {}
44 SubgraphBuilderParameters builderParams;
45 };
46
54 class GTSAM_EXPORT SubgraphPreconditioner : public Preconditioner {
55
56 public:
57 typedef boost::shared_ptr<SubgraphPreconditioner> shared_ptr;
58
59 private:
62 VectorValues xbar_;
63 Errors b2bar_;
64
65 KeyInfo keyInfo_;
67
68 public:
69
71
80
81 ~SubgraphPreconditioner() override {}
82
84 void print(const std::string& s = "SubgraphPreconditioner") const;
85
87 const GaussianFactorGraph& Ab2() const { return Ab2_; }
88
90 const GaussianBayesNet& Rc1() const { return Rc1_; }
91
93 const Errors b2bar() const { return b2bar_; }
94
100 /* x = xbar + inv(R1)*y */
101 VectorValues x(const VectorValues& y) const;
102
103 /* A zero VectorValues with the structure of xbar */
104 VectorValues zero() const {
105 return VectorValues::Zero(xbar_);
106 }
107
113 void transposeMultiplyAdd2(double alpha, Errors::const_iterator begin,
114 Errors::const_iterator end, VectorValues& y) const;
115
116 /* error, given y */
117 double error(const VectorValues& y) const;
118
120 VectorValues gradient(const VectorValues& y) const;
121
123 Errors operator*(const VectorValues& y) const;
124
126 void multiplyInPlace(const VectorValues& y, Errors& e) const;
127
129 VectorValues operator^(const Errors& e) const;
130
135 void transposeMultiplyAdd(double alpha, const Errors& e, VectorValues& y) const;
136
137 /*****************************************************************************/
138 /* implement virtual functions of Preconditioner */
139
141 void solve(const Vector& y, Vector &x) const override;
142
144 void transposeSolve(const Vector& y, Vector& x) const override;
145
147 void build(
148 const GaussianFactorGraph &gfg,
149 const KeyInfo &info,
150 const std::map<Key,Vector> &lambda
151 ) override;
152 /*****************************************************************************/
153 };
154
155} // namespace gtsam
Linear Factor Graph where all factors are Gaussians.
vector of errors
Factor Graph Values.
Chordal Bayes Net, the result of eliminating a factor graph.
Some support classes for iterative solvers.
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
Vector operator^(const Matrix &A, const Vector &v)
overload ^ for trans(A)*v We transpose the vectors for speed.
Definition: Matrix.cpp:131
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition: Matrix.cpp:156
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition: Point2.h:47
FastList< Vector > Errors
Errors is a vector of errors.
Definition: Errors.h:34
GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.
Definition: GaussianBayesNet.h:36
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition: GaussianFactorGraph.h:75
Handy data structure for iterative solvers.
Definition: IterativeSolver.h:126
Definition: Preconditioner.h:24
Definition: Preconditioner.h:64
Definition: SubgraphBuilder.h:96
Definition: SubgraphPreconditioner.h:40
Subgraph conditioner class, as explained in the RSS 2010 submission.
Definition: SubgraphPreconditioner.h:54
const GaussianFactorGraph & Ab2() const
Access Ab2.
Definition: SubgraphPreconditioner.h:87
const Errors b2bar() const
Access b2bar.
Definition: SubgraphPreconditioner.h:93
const GaussianBayesNet & Rc1() const
Access Rc1.
Definition: SubgraphPreconditioner.h:90
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition: VectorValues.h:74
static VectorValues Zero(const VectorValues &other)
Create a VectorValues with the same structure as other, but filled with zeros.
Definition: VectorValues.cpp:78
The Factor::error simply extracts the.