gtsam  3.2.1
gtsam
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SubgraphSolver.h
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 
12 #pragma once
13 
14 
15 #include <gtsam/linear/ConjugateGradientSolver.h>
17 #include <boost/tuple/tuple.hpp>
18 #include <iosfwd>
19 
20 namespace gtsam {
21 
22  // Forward declarations
23  class GaussianFactorGraph;
24  class GaussianBayesNet;
25  class SubgraphPreconditioner;
26 
28 public:
31  void print() const { Base::print(); }
32  virtual void print(std::ostream &os) const { Base::print(os); }
33 };
34 
57 class GTSAM_EXPORT SubgraphSolver : public IterativeSolver {
58 
59 public:
61 
62 protected:
63  Parameters parameters_;
64  Ordering ordering_;
65  boost::shared_ptr<SubgraphPreconditioner> pc_;
66 
67 public:
68  /* Given a gaussian factor graph, split it into a spanning tree (A1) + others (A2) for SPCG */
69  SubgraphSolver(const GaussianFactorGraph &A, const Parameters &parameters, const Ordering& ordering);
70  SubgraphSolver(const boost::shared_ptr<GaussianFactorGraph> &A, const Parameters &parameters, const Ordering& ordering);
71 
72  /* The user specify the subgraph part and the constraint part, may throw exception if A1 is underdetermined */
73  SubgraphSolver(const GaussianFactorGraph &Ab1, const GaussianFactorGraph &Ab2, const Parameters &parameters, const Ordering& ordering);
74  SubgraphSolver(const boost::shared_ptr<GaussianFactorGraph> &Ab1, const boost::shared_ptr<GaussianFactorGraph> &Ab2, const Parameters &parameters, const Ordering& ordering);
75 
76  /* The same as above, but the A1 is solved before */
77  SubgraphSolver(const boost::shared_ptr<GaussianBayesNet> &Rc1, const GaussianFactorGraph &Ab2, const Parameters &parameters, const Ordering& ordering);
78  SubgraphSolver(const boost::shared_ptr<GaussianBayesNet> &Rc1, const boost::shared_ptr<GaussianFactorGraph> &Ab2, const Parameters &parameters, const Ordering& ordering);
79 
80  virtual ~SubgraphSolver() {}
81 
83  VectorValues optimize (const VectorValues &initial) ;
84 
85  /* interface to the nonlinear optimizer that the subclasses have to implement */
86  virtual VectorValues optimize (
87  const GaussianFactorGraph &gfg,
88  const KeyInfo &keyInfo,
89  const std::map<Key, Vector> &lambda,
90  const VectorValues &initial
91  ) ;
92 
93 protected:
94 
95  void initialize(const GaussianFactorGraph &jfg);
96  void initialize(const boost::shared_ptr<GaussianBayesNet> &Rc1, const boost::shared_ptr<GaussianFactorGraph> &Ab2);
97 
98  boost::tuple<boost::shared_ptr<GaussianFactorGraph>, boost::shared_ptr<GaussianFactorGraph> >
99  splitGraph(const GaussianFactorGraph &gfg) ;
100 };
101 
102 } // namespace gtsam
parameters for iterative linear solvers
Definition: IterativeSolver.h:38
This class implements the SPCG solver presented in Dellaert et al in IROS'10.
Definition: SubgraphSolver.h:57
boost::shared_ptr< SubgraphPreconditioner > pc_
preconditioner object
Definition: SubgraphSolver.h:65
Definition: SubgraphSolver.h:27
void print(const Matrix &A, const string &s, ostream &stream)
print a matrix
Definition: Matrix.cpp:183
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