gtsam
Loading...
Searching...
No Matches
NonlinearOptimizer.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
18
19#pragma once
20
23
24#include <memory>
25
26namespace gtsam {
27
28namespace internal {
29class CholmodSolver;
30struct NonlinearOptimizerState;
31}
33
83class GTSAM_EXPORT NonlinearOptimizer {
84 protected:
85 std::shared_ptr<const NonlinearFactorGraph>
87
88 std::unique_ptr<internal::NonlinearOptimizerState> state_;
89
91 mutable std::unique_ptr<NonlinearMultifrontalSolver>
93
95 mutable std::unique_ptr<internal::CholmodSolver> cholmodSolver_;
96
97 private:
99 struct IndexedJunctionTreeCache;
100 mutable std::unique_ptr<IndexedJunctionTreeCache> indexedJunctionTreeCache_;
101
102 public:
104 using shared_ptr = std::shared_ptr<const NonlinearOptimizer>;
105
108
118 virtual const Values& optimize() {
120 return values();
121 }
122
129 const Values& optimizeSafely();
130
132 double error() const;
133
135 size_t iterations() const;
136
138 const Values& values() const;
139
141 const NonlinearFactorGraph& graph() const { return *graph_; }
142
144
147
149 virtual ~NonlinearOptimizer();
150
153 virtual VectorValues solve(const GaussianFactorGraph& gfg,
154 const NonlinearOptimizerParams& params) const;
155
161
163
164 protected:
168 void defaultOptimize();
169
170 virtual const NonlinearOptimizerParams& _params() const = 0;
171
183 virtual bool ensureMultifrontalSolver(
184 const NonlinearOptimizerParams& params, const Values& values) const;
185
189 std::unique_ptr<internal::NonlinearOptimizerState> state);
190};
191
197GTSAM_EXPORT bool checkConvergence(
198 double relativeErrorThreshold, double absoluteErrorThreshold,
199 double errorThreshold, double currentError, double newError,
201 NonlinearOptimizerParams::SILENT);
202
203GTSAM_EXPORT bool checkConvergence(const NonlinearOptimizerParams& params,
204 double currentError, double newError);
205
206} // namespace gtsam
Parameters for nonlinear optimization.
Factor Graph consisting of non-linear factors.
Global functions in a separate testing namespace.
Definition chartTesting.h:28
bool checkConvergence(double relativeErrorThreshold, double absoluteErrorThreshold, double errorThreshold, double currentError, double newError, NonlinearOptimizerParams::Verbosity verbosity)
Check whether the relative error decrease is less than relativeErrorThreshold, the absolute error dec...
Definition NonlinearOptimizer.cpp:236
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:77
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:83
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:73
Definition NonlinearFactorGraph.h:57
Multifrontal solver for nonlinear factor graphs.
Definition NonlinearMultifrontalSolver.h:37
This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a...
Definition NonlinearOptimizer.h:83
std::unique_ptr< internal::CholmodSolver > cholmodSolver_
Optional reusable CHOLMOD numerical and symbolic session.
Definition NonlinearOptimizer.h:95
const NonlinearFactorGraph & graph() const
return the graph with nonlinear factors
Definition NonlinearOptimizer.h:141
std::shared_ptr< const NonlinearFactorGraph > graph_
The graph with nonlinear factors.
Definition NonlinearOptimizer.h:86
virtual const Values & optimize()
Optimize for the maximum-likelihood estimate, returning a the optimized variable assignments.
Definition NonlinearOptimizer.h:118
std::unique_ptr< NonlinearMultifrontalSolver > nonlinearMultifrontalSolver_
Solver for multifrontal Cholesky, lazily created.
Definition NonlinearOptimizer.h:92
std::unique_ptr< internal::NonlinearOptimizerState > state_
PIMPL'd state.
Definition NonlinearOptimizer.h:88
std::shared_ptr< const NonlinearOptimizer > shared_ptr
A shared pointer to this class.
Definition NonlinearOptimizer.h:104
virtual GaussianFactorGraph::shared_ptr iterate()=0
Perform a single iteration, returning GaussianFactorGraph corresponding to the linearized factor grap...
NonlinearOptimizer(const NonlinearFactorGraph &graph, std::unique_ptr< internal::NonlinearOptimizerState > state)
Constructor for initial construction of base classes.
Definition NonlinearOptimizer.cpp:79
const Values & values() const
return values in current optimizer state
Definition NonlinearOptimizer.cpp:95
void defaultOptimize()
A default implementation of the optimization loop, which calls iterate() until checkConvergence retur...
Definition NonlinearOptimizer.cpp:100
virtual bool ensureMultifrontalSolver(const NonlinearOptimizerParams &params, const Values &values) const
Ensure that the nonlinearMultifrontalSolver_ is populated if (and only if) the params request the mul...
Definition NonlinearOptimizer.cpp:295
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:37
Verbosity
See NonlinearOptimizerParams::verbosity.
Definition NonlinearOptimizerParams.h:40
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65