gtsam
Loading...
Searching...
No Matches
LevenbergMarquardtParams.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
20
21#pragma once
22
26
27namespace gtsam {
28
30
36class GTSAM_EXPORT LevenbergMarquardtParams: public NonlinearOptimizerParams {
37
38public:
41 SILENT = 0, SUMMARY, TERMINATION, LAMBDA, TRYLAMBDA, TRYCONFIG, DAMPED, TRYDELTA
42 };
43
44 static VerbosityLM verbosityLMTranslator(const std::string &s);
45 static std::string verbosityLMTranslator(VerbosityLM value);
46 using OptimizerType = LevenbergMarquardtOptimizer;
47
48public:
49
51 double lambdaFactor;
56 std::string logFile;
60
61 LevenbergMarquardtParams()
62 : verbosityLM(SILENT) {
63 SetLegacyDefaults(this);
64 }
65
66 static void SetLegacyDefaults(LevenbergMarquardtParams* p) {
67 // Relevant NonlinearOptimizerParams:
68 p->maxIterations = 100;
69 p->relativeErrorTol = 1e-5;
70 p->absoluteErrorTol = 1e-5;
71 // LM-specific:
72 p->lambdaInitial = 1e-5;
73 p->lambdaFactor = 10.0;
74 p->lambdaUpperBound = 1e5;
75 p->lambdaLowerBound = 0.0;
76 p->minModelFidelity = 1e-3;
77 p->useFixedLambdaFactor = true;
80 p->dampingParams.minDiagonal = 1e-6;
81 p->dampingParams.maxDiagonal = 1e32;
82 }
83
84 // these do seem to work better for SFM
85 static void SetCeresDefaults(LevenbergMarquardtParams* p) {
86 // Relevant NonlinearOptimizerParams:
87 p->maxIterations = 50;
88 p->absoluteErrorTol = 0; // No corresponding option in CERES
89 p->relativeErrorTol = 1e-6; // This is function_tolerance
90 // LM-specific:
91 p->lambdaUpperBound = 1e32;
92 p->lambdaLowerBound = 1e-16;
93 p->lambdaInitial = 1e-04;
94 p->lambdaFactor = 2.0;
95 p->minModelFidelity = 1e-3; // options.min_relative_decrease in CERES
96 p->useFixedLambdaFactor = false; // This is important
97 p->dampingParams.diagonalDamping = true;
98 p->dampingParams.exactHessianDiagonal = false;
99 p->dampingParams.minDiagonal = 1e-6;
100 p->dampingParams.maxDiagonal = 1e32;
101 }
102
103 static LevenbergMarquardtParams LegacyDefaults() {
104 LevenbergMarquardtParams p;
105 SetLegacyDefaults(&p);
106 return p;
107 }
108
109 static LevenbergMarquardtParams CeresDefaults() {
110 LevenbergMarquardtParams p;
111 SetCeresDefaults(&p);
112 return p;
113 }
114
115 static LevenbergMarquardtParams EnsureHasOrdering(LevenbergMarquardtParams params,
116 const NonlinearFactorGraph& graph) {
117 if (!params.ordering && params.requiresOrdering())
118 params.ordering = Ordering::Create(params.orderingType, graph);
119 return params;
120 }
121
122 static LevenbergMarquardtParams ReplaceOrdering(LevenbergMarquardtParams params,
123 const Ordering& ord) {
124 params.ordering = ord;
125 return params;
126 }
127
128 ~LevenbergMarquardtParams() override {}
129 void print(const std::string& str = "") const override;
130
133 bool getDiagonalDamping() const { return dampingParams.diagonalDamping; }
134 double getlambdaFactor() const { return lambdaFactor; }
135 double getlambdaInitial() const { return lambdaInitial; }
136 double getlambdaLowerBound() const { return lambdaLowerBound; }
137 double getlambdaUpperBound() const { return lambdaUpperBound; }
138 bool getUseFixedLambdaFactor() { return useFixedLambdaFactor; }
139 std::string getLogFile() const { return logFile; }
140 std::string getVerbosityLM() const { return verbosityLMTranslator(verbosityLM);}
141
142 void setDiagonalDamping(bool flag) { dampingParams.diagonalDamping = flag; }
143 void setlambdaFactor(double value) { lambdaFactor = value; }
144 void setlambdaInitial(double value) { lambdaInitial = value; }
145 void setlambdaLowerBound(double value) { lambdaLowerBound = value; }
146 void setlambdaUpperBound(double value) { lambdaUpperBound = value; }
147 void setUseFixedLambdaFactor(bool flag) { useFixedLambdaFactor = flag;}
148 void setLogFile(const std::string& s) { logFile = s; }
149 void setVerbosityLM(const std::string& s) { verbosityLM = verbosityLMTranslator(s);}
150 // @}
153
155 std::shared_ptr<NonlinearOptimizerParams> clone() const {
156 return std::shared_ptr<NonlinearOptimizerParams>(new LevenbergMarquardtParams(*this));
157 }
158
160};
161
162}
Parameters for nonlinear optimization.
Factor Graph consisting of non-linear factors.
Parameters controlling LM-style damping for NonlinearMultifrontalSolver.
Global functions in a separate testing namespace.
Definition chartTesting.h:28
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:143
This class performs Levenberg-Marquardt nonlinear optimization.
Definition LevenbergMarquardtOptimizer.h:35
Parameters for Levenberg-Marquardt optimization.
Definition LevenbergMarquardtParams.h:36
double lambdaFactor
The amount by which to multiply or divide lambda when adjusting lambda (default: 10....
Definition LevenbergMarquardtParams.h:51
double lambdaUpperBound
The maximum lambda to try before assuming the optimization has failed (default: 1e5).
Definition LevenbergMarquardtParams.h:52
double lambdaInitial
The initial Levenberg-Marquardt damping term (default: 1e-5).
Definition LevenbergMarquardtParams.h:50
LMDampingParams dampingParams
Parameters controlling LM damping behavior (legacy and MULTIFRONTAL_SOLVER).
Definition LevenbergMarquardtParams.h:59
double minModelFidelity
Lower bound for the modelFidelity to accept the result of an LM iteration.
Definition LevenbergMarquardtParams.h:55
double lambdaLowerBound
The minimum lambda used in LM (default: 0).
Definition LevenbergMarquardtParams.h:53
std::shared_ptr< NonlinearOptimizerParams > clone() const
Definition LevenbergMarquardtParams.h:155
bool useFixedLambdaFactor
if true applies constant increase (or decrease) to lambda according to lambdaFactor
Definition LevenbergMarquardtParams.h:57
std::string logFile
an optional CSV log file, with [iteration, time, error, lambda]
Definition LevenbergMarquardtParams.h:56
VerbosityLM
See LevenbergMarquardtParams::verbosityLM.
Definition LevenbergMarquardtParams.h:40
VerbosityLM verbosityLM
The verbosity level for Levenberg-Marquardt (default: SILENT), see also NonlinearOptimizerParams::ver...
Definition LevenbergMarquardtParams.h:54
Parameters controlling LM-style damping as applied by gtsam::NonlinearMultifrontalSolver.
Definition LMDampingParams.h:31
bool exactHessianDiagonal
If true, use the exact diagonal of the linearized system Hessian diag(J^T J) (computed via GaussianFa...
Definition LMDampingParams.h:44
double minDiagonal
Clamp minimum diagonal value used for diagonal damping.
Definition LMDampingParams.h:47
bool diagonalDamping
If true, use diagonal damping (LM) instead of identity damping.
Definition LMDampingParams.h:33
double maxDiagonal
Clamp maximum diagonal value used for diagonal damping.
Definition LMDampingParams.h:50
double absoluteErrorTol
The maximum absolute error decrease to stop iterating (default 1e-5).
Definition NonlinearOptimizerParams.h:46
size_t maxIterations
The maximum iterations to stop iterating (default 100).
Definition NonlinearOptimizerParams.h:44
double relativeErrorTol
The maximum relative error decrease to stop iterating (default 1e-5).
Definition NonlinearOptimizerParams.h:45