gtsam
Loading...
Searching...
No Matches
NonlinearOptimizerParams.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
22#pragma once
23
27
28#include <iosfwd>
29#include <string>
30#include <optional>
31
32namespace gtsam {
33
37class GTSAM_EXPORT NonlinearOptimizerParams {
38public:
40 enum Verbosity {
41 SILENT, TERMINATION, ERROR, VALUES, DELTA, LINEAR
42 };
43
44 size_t maxIterations = 100;
45 double relativeErrorTol = 1e-5;
46 double absoluteErrorTol = 1e-5;
47 double errorTol = 0.0;
50
51 size_t getMaxIterations() const { return maxIterations; }
52 double getRelativeErrorTol() const { return relativeErrorTol; }
53 double getAbsoluteErrorTol() const { return absoluteErrorTol; }
54 double getErrorTol() const { return errorTol; }
55 std::string getVerbosity() const { return verbosityTranslator(verbosity); }
56
57 void setMaxIterations(int value) { maxIterations = value; }
58 void setRelativeErrorTol(double value) { relativeErrorTol = value; }
59 void setAbsoluteErrorTol(double value) { absoluteErrorTol = value; }
60 void setErrorTol(double value) { errorTol = value; }
61 void setVerbosity(const std::string& src) {
62 verbosity = verbosityTranslator(src);
63 }
64
65 static Verbosity verbosityTranslator(const std::string &s) ;
66 static std::string verbosityTranslator(Verbosity value) ;
67
70 using IterationHook = std::function<
71 void(size_t /*iteration*/, double/*errorBefore*/, double/*errorAfter*/)>;
72
98
101 MULTIFRONTAL_SOLVER,
102 MULTIFRONTAL_CHOLESKY,
103 MULTIFRONTAL_QR,
104 SEQUENTIAL_CHOLESKY,
105 SEQUENTIAL_QR,
106 Iterative, /* Experimental Flag */
107 CHOLMOD, /* Experimental Flag */
108 };
109
110 std::optional<Ordering> ordering;
111 IterativeOptimizationParameters::shared_ptr iterativeParams;
113
115 LinearSolverType linearSolverType = MULTIFRONTAL_CHOLESKY;
116
117 MultifrontalParameters multifrontalParams;
118
119 NonlinearOptimizerParams() = default;
120 virtual ~NonlinearOptimizerParams() {
121 }
122
123 virtual void print(const std::string& str = "") const;
124
125 bool equals(const NonlinearOptimizerParams& other, double tol = 1e-9) const;
126
127 inline bool isMultifrontal() const {
128 return (linearSolverType == MULTIFRONTAL_SOLVER)
129 || (linearSolverType == MULTIFRONTAL_CHOLESKY)
130 || (linearSolverType == MULTIFRONTAL_QR);
131 }
132
133 inline bool isSequential() const {
134 return (linearSolverType == SEQUENTIAL_CHOLESKY)
135 || (linearSolverType == SEQUENTIAL_QR);
136 }
137
138 inline bool isCholmod() const {
139 return (linearSolverType == CHOLMOD);
140 }
141
142 inline bool isIterative() const {
143 return (linearSolverType == Iterative);
144 }
145
147 bool requiresOrdering() const {
148 if (!isIterative()) return true;
149 return std::dynamic_pointer_cast<SubgraphSolverParameters>(
150 iterativeParams) != nullptr;
151 }
152
153 GaussianFactorGraph::Eliminate getEliminationFunction() const {
154 switch (linearSolverType) {
155 case MULTIFRONTAL_SOLVER:
156 case MULTIFRONTAL_CHOLESKY:
157 case SEQUENTIAL_CHOLESKY:
159
160 case MULTIFRONTAL_QR:
161 case SEQUENTIAL_QR:
162 return EliminateQR;
163
164 default:
165 throw std::runtime_error(
166 "Nonlinear optimization parameter \"factorization\" is invalid");
167 }
168 }
169
170 std::string getLinearSolverType() const {
171 return linearSolverTranslator(linearSolverType);
172 }
173
176
177 void setLinearSolverType(const std::string& solver) {
178 linearSolverType = linearSolverTranslator(solver);
179 }
180
183
184 void setIterativeParams(const std::shared_ptr<IterativeOptimizationParameters> params);
185
186 void setOrdering(const Ordering& ordering) {
187 this->ordering = ordering;
188 this->orderingType = Ordering::CUSTOM;
189 }
190
191 std::string getOrderingType() const {
192 return orderingTypeTranslator(orderingType);
193 }
194
195 // Note that if you want to use a custom ordering, you must set the ordering directly, this will switch to custom type
196 void setOrderingType(const std::string& ordering){
197 orderingType = orderingTypeTranslator(ordering);
198 }
199
200private:
201 std::string linearSolverTranslator(LinearSolverType linearSolverType) const;
202 LinearSolverType linearSolverTranslator(const std::string& linearSolverType) const;
203 std::string orderingTypeTranslator(Ordering::OrderingType type) const;
204 Ordering::OrderingType orderingTypeTranslator(const std::string& type) const;
205};
206
207// For backward compatibility:
208typedef NonlinearOptimizerParams SuccessiveLinearizationParams;
209
210} /* namespace gtsam */
Subgraph Solver from IROS 2010.
Linear Factor Graph where all factors are Gaussians.
Parameters for the imperative multifrontal solver.
std::pair< std::shared_ptr< GaussianConditional >, std::shared_ptr< GaussianFactor > > EliminatePreferCholesky(const GaussianFactorGraph &factors, const Ordering &keys)
Densely partially eliminate with Cholesky factorization.
Definition HessianFactor.cpp:646
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
std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr > EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)
Multiply all factors and eliminate the given keys from the resulting factor using a QR variant that h...
Definition JacobianFactor.cpp:976
Template to create a binary predicate.
Definition Testable.h:112
std::function< EliminationResult(const FactorGraphType &, const Ordering &)> Eliminate
Definition EliminateableFactorGraph.h:91
Definition Ordering.h:33
OrderingType
Type of ordering to use.
Definition Ordering.h:40
Parameters for gtsam::MultifrontalSolver.
Definition MultifrontalParameters.h:37
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:37
double absoluteErrorTol
The maximum absolute error decrease to stop iterating (default 1e-5).
Definition NonlinearOptimizerParams.h:46
IterationHook iterationHook
Optional user-provided iteration hook to be called after each optimization iteration (Default: none).
Definition NonlinearOptimizerParams.h:97
size_t maxIterations
The maximum iterations to stop iterating (default 100).
Definition NonlinearOptimizerParams.h:44
Verbosity verbosity
The printing verbosity during optimization (default SILENT).
Definition NonlinearOptimizerParams.h:48
IterativeOptimizationParameters::shared_ptr iterativeParams
The container for iterativeOptimization parameters.
Definition NonlinearOptimizerParams.h:111
Verbosity
See NonlinearOptimizerParams::verbosity.
Definition NonlinearOptimizerParams.h:40
std::optional< Ordering > ordering
The optional variable elimination ordering, or empty to use COLAMD (default: empty).
Definition NonlinearOptimizerParams.h:110
LinearSolverType getLinearSolver() const
Return the selected linear solver as a strongly typed value.
Definition NonlinearOptimizerParams.h:175
LinearSolverType linearSolverType
Parameters for gtsam::MultifrontalSolver when using MULTIFRONTAL_SOLVER.
Definition NonlinearOptimizerParams.h:115
std::function< void(size_t, double, double)> IterationHook
Type for an optional user-provided hook to be called after each internal optimizer iteration.
Definition NonlinearOptimizerParams.h:70
bool requiresOrdering() const
Return whether this solver needs a variable-elimination ordering.
Definition NonlinearOptimizerParams.h:147
LinearSolverType
See NonlinearOptimizerParams::linearSolverType.
Definition NonlinearOptimizerParams.h:100
double relativeErrorTol
The maximum relative error decrease to stop iterating (default 1e-5).
Definition NonlinearOptimizerParams.h:45
Ordering::OrderingType orderingType
The method of ordering use during variable elimination (default COLAMD).
Definition NonlinearOptimizerParams.h:49
double errorTol
The maximum total error to stop iterating (default 0.0).
Definition NonlinearOptimizerParams.h:47
void setLinearSolver(LinearSolverType solver)
Select the linear solver using the public enum.
Definition NonlinearOptimizerParams.h:182