gtsam  4.0.0
gtsam
LevenbergMarquardtOptimizer.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 #pragma once
22 
26 
27 class NonlinearOptimizerMoreOptimizationTest;
28 
29 namespace gtsam {
30 
34 class GTSAM_EXPORT LevenbergMarquardtOptimizer: public NonlinearOptimizer {
35 
36 protected:
38  boost::posix_time::ptime startTime_;
39 
40  void initTime();
41 
42 public:
43  typedef boost::shared_ptr<LevenbergMarquardtOptimizer> shared_ptr;
44 
47 
56  LevenbergMarquardtOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
58 
66  LevenbergMarquardtOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
67  const Ordering& ordering,
69 
72  }
73 
75 
78 
80  double lambda() const;
81 
83  int getInnerIterations() const;
84 
86  void print(const std::string& str = "") const {
87  std::cout << str << "LevenbergMarquardtOptimizer" << std::endl;
88  this->params_.print(" parameters:\n");
89  }
90 
92 
95 
100  GaussianFactorGraph::shared_ptr iterate() override;
101 
104  return params_;
105  }
106 
107  void writeLogFile(double currentError);
108 
110  virtual GaussianFactorGraph::shared_ptr linearize() const;
111 
113  GaussianFactorGraph buildDampedSystem(const GaussianFactorGraph& linear,
114  const VectorValues& sqrtHessianDiagonal) const;
115 
117  bool tryLambda(const GaussianFactorGraph& linear, const VectorValues& sqrtHessianDiagonal);
118 
120 
121 protected:
122 
124  const NonlinearOptimizerParams& _params() const override {
125  return params_;
126  }
127 };
128 
129 }
const LevenbergMarquardtParams params_
LM parameters.
Definition: LevenbergMarquardtOptimizer.h:37
const LevenbergMarquardtParams & params() const
Read-only access the parameters.
Definition: LevenbergMarquardtOptimizer.h:103
This class performs Levenberg-Marquardt nonlinear optimization.
Definition: LevenbergMarquardtOptimizer.h:34
virtual ~LevenbergMarquardtOptimizer()
Virtual destructor.
Definition: LevenbergMarquardtOptimizer.h:71
This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a...
Definition: NonlinearOptimizer.h:75
Parameters for Levenberg-Marquardt trust-region scheme.
A non-templated config holding any types of Manifold-group elements.
Definition: Values.h:70
const NonlinearOptimizerParams & _params() const override
Access the parameters (base class version)
Definition: LevenbergMarquardtOptimizer.h:124
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: GaussianFactorGraph.h:74
This class represents a collection of vector-valued variables associated each with a unique integer i...
Definition: VectorValues.h:90
Definition: Ordering.h:33
Factor Graph Values.
Base class and parameters for nonlinear optimization algorithms.
A non-linear factor graph is a graph of non-Gaussian, i.e.
Definition: NonlinearFactorGraph.h:77
The common parameters for Nonlinear optimizers.
Definition: NonlinearOptimizerParams.h:34
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition: GaussianFactorGraph.h:65
Parameters for Levenberg-Marquardt optimization.
Definition: LevenbergMarquardtParams.h:33
void print(const std::string &str="") const
print
Definition: LevenbergMarquardtOptimizer.h:86
Global functions in a separate testing namespace.
Definition: chartTesting.h:28