gtsam  3.2.1
gtsam
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PCGSolver.h
1 /*
2  * PCGSolver.h
3  *
4  * Created on: Jan 31, 2012
5  * Author: Yong-Dian Jian
6  */
7 
8 #pragma once
9 
10 #include <gtsam/linear/IterativeSolver.h>
11 #include <gtsam/linear/ConjugateGradientSolver.h>
13 #include <boost/shared_ptr.hpp>
14 
15 #include <algorithm>
16 #include <iosfwd>
17 #include <map>
18 #include <string>
19 
20 namespace gtsam {
21 
22 class GaussianFactorGraph;
23 class KeyInfo;
24 class Preconditioner;
25 struct PreconditionerParameters;
26 
27 /*****************************************************************************/
28 struct GTSAM_EXPORT PCGSolverParameters: public ConjugateGradientParameters {
29 public:
31  typedef boost::shared_ptr<PCGSolverParameters> shared_ptr;
32 
34 
35  virtual void print(std::ostream &os) const;
36 
37  /* interface to preconditioner parameters */
38  inline const PreconditionerParameters& preconditioner() const {
39  return *preconditioner_;
40  }
41 
42  boost::shared_ptr<PreconditionerParameters> preconditioner_;
43 };
44 
45 /*****************************************************************************/
46 /* A virtual base class for the preconditioned conjugate gradient solver */
47 class GTSAM_EXPORT PCGSolver: public IterativeSolver {
48 public:
49  typedef IterativeSolver Base;
50  typedef boost::shared_ptr<PCGSolver> shared_ptr;
51 
52 protected:
53 
54  PCGSolverParameters parameters_;
55  boost::shared_ptr<Preconditioner> preconditioner_;
56 
57 public:
58  /* Interface to initialize a solver without a problem */
60  virtual ~PCGSolver() {}
61 
62  using IterativeSolver::optimize;
63 
64  virtual VectorValues optimize(const GaussianFactorGraph &gfg,
65  const KeyInfo &keyInfo, const std::map<Key, Vector> &lambda,
66  const VectorValues &initial);
67 
68 };
69 
70 /*****************************************************************************/
71 class GTSAM_EXPORT GaussianFactorGraphSystem {
72 public:
73 
75  const Preconditioner &preconditioner, const KeyInfo &info,
76  const std::map<Key, Vector> &lambda);
77 
78  const GaussianFactorGraph &gfg_;
79  const Preconditioner &preconditioner_;
80  const KeyInfo &keyInfo_;
81  const std::map<Key, Vector> &lambda_;
82 
83  void residual(const Vector &x, Vector &r) const;
84  void multiply(const Vector &x, Vector& y) const;
85  void leftPrecondition(const Vector &x, Vector &y) const;
86  void rightPrecondition(const Vector &x, Vector &y) const;
87  inline void scal(const double alpha, Vector &x) const {
88  x *= alpha;
89  }
90  inline double dot(const Vector &x, const Vector &y) const {
91  return x.dot(y);
92  }
93  inline void axpy(const double alpha, const Vector &x, Vector &y) const {
94  y += alpha * x;
95  }
96 
97  void getb(Vector &b) const;
98 };
99 
100 /* utility functions */
101 /**********************************************************************************/
102 VectorValues buildVectorValues(const Vector &v, const Ordering &ordering,
103  const std::map<Key, size_t> & dimensions);
104 
105 /**********************************************************************************/
106 VectorValues buildVectorValues(const Vector &v, const KeyInfo &keyInfo);
107 
108 }
109 
Definition: PCGSolver.h:47
parameters for iterative linear solvers
Definition: IterativeSolver.h:38
double dot(const V1 &a, const V2 &b)
Dot product.
Definition: Vector.h:259
void axpy(double alpha, const V1 &x, V2 &y)
BLAS Level 1 axpy: y <- alpha*x + y.
Definition: Vector.h:282
Factor Graph Values.
Definition: PCGSolver.h:71
void print(const Matrix &A, const string &s, ostream &stream)
print a matrix
Definition: Matrix.cpp:183
Definition: Preconditioner.h:23
void scal(double alpha, Vector &x)
BLAS Level 1 scal: x <- alpha*x.
Definition: Vector.h:275
Definition: IterativeSolver.h:115
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition: triangulation.cpp:72
parameters for the conjugate gradient method
Definition: ConjugateGradientSolver.h:22
Definition: IterativeSolver.h:71
This class represents a collection of vector-valued variables associated each with a unique integer i...
Definition: VectorValues.h:89
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition: GaussianFactorGraph.h:65
Definition: Ordering.h:30
Definition: PCGSolver.h:28
Definition: Preconditioner.h:62