27struct GTSAM_EXPORT PreconditionerParameters {
29 typedef std::shared_ptr<PreconditionerParameters> shared_ptr;
42 PreconditionerParameters(): kernel_(GTSAM), verbosity_(SILENT) {}
43 PreconditionerParameters(
const PreconditionerParameters &p) : kernel_(p.kernel_), verbosity_(p.verbosity_) {}
44 virtual ~PreconditionerParameters() {}
47 inline Kernel kernel()
const {
return kernel_; }
48 inline Verbosity verbosity()
const {
return verbosity_; }
52 virtual void print(std::ostream &os)
const;
54 static Kernel kernelTranslator(
const std::string &s);
55 static Verbosity verbosityTranslator(
const std::string &s);
56 static std::string kernelTranslator(Kernel k);
57 static std::string verbosityTranslator(Verbosity v);
60 friend std::ostream& operator<<(std::ostream &os,
const PreconditionerParameters &p);
67class GTSAM_EXPORT Preconditioner {
69 typedef std::shared_ptr<Preconditioner> shared_ptr;
70 typedef std::vector<size_t> Dimensions;
74 virtual ~Preconditioner() {}
84 virtual void solve(
const Vector& y, Vector &x)
const = 0;
93 const std::map<Key,Vector> &lambda
98struct GTSAM_EXPORT DummyPreconditionerParameters :
public PreconditionerParameters {
99 typedef PreconditionerParameters Base;
100 typedef std::shared_ptr<DummyPreconditionerParameters> shared_ptr;
101 DummyPreconditionerParameters() : Base() {}
102 ~DummyPreconditionerParameters()
override {}
106class GTSAM_EXPORT DummyPreconditioner :
public Preconditioner {
108 typedef Preconditioner Base;
109 typedef std::shared_ptr<DummyPreconditioner> shared_ptr;
113 DummyPreconditioner() : Base() {}
114 ~DummyPreconditioner()
override {}
117 void solve(
const Vector& y, Vector &x)
const override { x = y; }
122 const std::map<Key,Vector> &lambda
127struct GTSAM_EXPORT BlockJacobiPreconditionerParameters :
public PreconditionerParameters {
128 typedef PreconditionerParameters Base;
129 BlockJacobiPreconditionerParameters() : Base() {}
130 ~BlockJacobiPreconditionerParameters()
override {}
134class GTSAM_EXPORT BlockJacobiPreconditioner :
public Preconditioner {
135 friend class GaussianFactorGraphSystem;
138 typedef Preconditioner Base;
139 BlockJacobiPreconditioner() ;
140 ~BlockJacobiPreconditioner()
override ;
143 void solve(
const Vector& y, Vector &x)
const override;
148 const std::map<Key,Vector> &lambda
161 void build(
const std::vector<Matrix>& blocks,
const KeyInfo& info);
169 bool transpose)
const;
171 std::vector<size_t> dims_;
172 std::vector<size_t> scalarOffsets_;
173 std::vector<size_t> bufferOffsets_;
181std::shared_ptr<Preconditioner> createPreconditioner(
const std::shared_ptr<PreconditionerParameters> parameters);
typedef and functions to augment Eigen's MatrixXd
typedef and functions to augment Eigen's VectorXd
Global functions in a separate testing namespace.
Definition chartTesting.h:28
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:77
Ordered key dimensions and offsets in one flattened variable vector.
Definition KeyInfo.h:51
Compiled flat-vector system used by preconditioned conjugate gradients.
Definition PCGSolver.h:145
virtual void solve(const Vector &y, Vector &x) const =0
implement x = L^{-1} y
virtual void build(const GaussianFactorGraph &gfg, const KeyInfo &info, const std::map< Key, Vector > &lambda)=0
build/factorize the preconditioner
virtual void transposeSolve(const Vector &y, Vector &x) const =0
implement x = L^{-T} y
void build(const GaussianFactorGraph &gfg, const KeyInfo &info, const std::map< Key, Vector > &lambda) override
build/factorize the preconditioner
Definition Preconditioner.h:119
void solve(const Vector &y, Vector &x) const override
implement x = L^{-1} y
Definition Preconditioner.h:117
void transposeSolve(const Vector &y, Vector &x) const override
implement x = L^{-T} y
Definition Preconditioner.h:118
void transposeSolve(const Vector &y, Vector &x) const override
implement x = L^{-T} y
Definition Preconditioner.cpp:120
void solve(const Vector &y, Vector &x) const override
implement x = L^{-1} y
Definition Preconditioner.cpp:114
void build(const GaussianFactorGraph &gfg, const KeyInfo &info, const std::map< Key, Vector > &lambda) override
build/factorize the preconditioner
Definition Preconditioner.cpp:126
void solveInPlaceRange(Vector &x, size_t begin, size_t end, bool transpose) const
Apply a triangular solve to a contiguous range of independent blocks.
Definition Preconditioner.cpp:90
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:73