gtsam  3.2.1
gtsam
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DoglegOptimizer.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 
19 #pragma once
20 
22 
23 namespace gtsam {
24 
25 class DoglegOptimizer;
26 
32 class GTSAM_EXPORT DoglegParams : public NonlinearOptimizerParams {
33 public:
35  enum VerbosityDL {
36  SILENT,
37  VERBOSE
38  };
39 
40  double deltaInitial;
42 
43  DoglegParams() :
44  deltaInitial(1.0), verbosityDL(SILENT) {}
45 
46  virtual ~DoglegParams() {}
47 
48  virtual void print(const std::string& str = "") const {
49  NonlinearOptimizerParams::print(str);
50  std::cout << " deltaInitial: " << deltaInitial << "\n";
51  std::cout.flush();
52  }
53 
54  double getDeltaInitial() const { return deltaInitial; }
55  std::string getVerbosityDL() const { return verbosityDLTranslator(verbosityDL); }
56 
57  void setDeltaInitial(double deltaInitial) { this->deltaInitial = deltaInitial; }
58  void setVerbosityDL(const std::string& verbosityDL) { this->verbosityDL = verbosityDLTranslator(verbosityDL); }
59 
60 private:
61  VerbosityDL verbosityDLTranslator(const std::string& verbosityDL) const;
62  std::string verbosityDLTranslator(VerbosityDL verbosityDL) const;
63 };
64 
68 class GTSAM_EXPORT DoglegState : public NonlinearOptimizerState {
69 public:
70  double Delta;
71 
72  DoglegState() {}
73 
74  virtual ~DoglegState() {}
75 
76 protected:
77  DoglegState(const NonlinearFactorGraph& graph, const Values& values, const DoglegParams& params, unsigned int iterations = 0) :
78  NonlinearOptimizerState(graph, values, iterations), Delta(params.deltaInitial) {}
79 
80  friend class DoglegOptimizer;
81 };
82 
86 class GTSAM_EXPORT DoglegOptimizer : public NonlinearOptimizer {
87 
88 protected:
89  DoglegParams params_;
90  DoglegState state_;
91 
92 public:
93  typedef boost::shared_ptr<DoglegOptimizer> shared_ptr;
94 
97 
106  DoglegOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
107  const DoglegParams& params = DoglegParams()) :
108  NonlinearOptimizer(graph), params_(ensureHasOrdering(params, graph)), state_(graph, initialValues, params_) {}
109 
117  DoglegOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues, const Ordering& ordering) :
118  NonlinearOptimizer(graph) {
119  params_.ordering = ordering;
120  state_ = DoglegState(graph, initialValues, params_); }
121 
123 
126 
128  virtual ~DoglegOptimizer() {}
129 
134  virtual void iterate();
135 
137  const DoglegParams& params() const { return params_; }
138 
140  DoglegParams& params() { return params_; }
141 
143  const DoglegState& state() const { return state_; }
144 
146  DoglegState& state() { return state_; }
147 
149  double getDelta() const { return state_.Delta; }
150 
152 
153 protected:
155  virtual const NonlinearOptimizerParams& _params() const { return params_; }
156 
158  virtual const NonlinearOptimizerState& _state() const { return state_; }
159 
161  DoglegParams ensureHasOrdering(DoglegParams params, const NonlinearFactorGraph& graph) const;
162 };
163 
164 }
DoglegOptimizer(const NonlinearFactorGraph &graph, const Values &initialValues, const Ordering &ordering)
Standard constructor, requires a nonlinear factor graph, initial variable assignments, and optimization parameters.
Definition: DoglegOptimizer.h:117
This class performs Dogleg nonlinear optimization.
Definition: DoglegOptimizer.h:86
VerbosityDL verbosityDL
The verbosity level for Dogleg (default: SILENT), see also NonlinearOptimizerParams::verbosity.
Definition: DoglegOptimizer.h:41
double deltaInitial
The initial trust region radius (default: 1.0)
Definition: DoglegOptimizer.h:40
State for DoglegOptimizer.
Definition: DoglegOptimizer.h:68
virtual ~DoglegOptimizer()
Virtual destructor.
Definition: DoglegOptimizer.h:128
The common parameters for Nonlinear optimizers.
Definition: NonlinearOptimizerParams.h:33
DoglegOptimizer(const NonlinearFactorGraph &graph, const Values &initialValues, const DoglegParams &params=DoglegParams())
Standard constructor, requires a nonlinear factor graph, initial variable assignments, and optimization parameters.
Definition: DoglegOptimizer.h:106
const DoglegParams & params() const
Read-only access the parameters.
Definition: DoglegOptimizer.h:137
A non-templated config holding any types of Manifold-group elements.
Definition: Values.h:75
void print(const Matrix &A, const string &s, ostream &stream)
print a matrix
Definition: Matrix.cpp:183
This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a...
Definition: NonlinearOptimizer.h:134
A non-linear factor graph is a graph of non-Gaussian, i.e.
Definition: NonlinearFactorGraph.h:69
double getDelta() const
Access the current trust region radius Delta.
Definition: DoglegOptimizer.h:149
Parameters for Levenberg-Marquardt optimization.
Definition: DoglegOptimizer.h:32
Base class and parameters for nonlinear optimization algorithms.
const DoglegState & state() const
Read-only access the last state.
Definition: DoglegOptimizer.h:143
virtual const NonlinearOptimizerParams & _params() const
Access the parameters (base class version)
Definition: DoglegOptimizer.h:155
Definition: Ordering.h:30
DoglegParams & params()
Read/write access the parameters.
Definition: DoglegOptimizer.h:140
VerbosityDL
See DoglegParams::dlVerbosity.
Definition: DoglegOptimizer.h:35
virtual const NonlinearOptimizerState & _state() const
Access the state (base class version)
Definition: DoglegOptimizer.h:158
DoglegState & state()
Read/write access the last state.
Definition: DoglegOptimizer.h:146
Base class for a nonlinear optimization state, including the current estimate of the variable values...
Definition: NonlinearOptimizer.h:35