gtsam
Loading...
Searching...
No Matches
gtsam::SfmLevenbergMarquardtOptimizer Class Reference

Detailed Description

CPU SFM optimizer supporting either a joint solve or Schur elimination of Point3 and Unit3 variables.

MULTIFRONTAL_SOLVER performs Schur elimination in one fused factorization; other solvers receive an explicitly reduced graph containing every other variable type.

Inheritance diagram for gtsam::SfmLevenbergMarquardtOptimizer:

Public Member Functions

 SfmLevenbergMarquardtOptimizer (const NonlinearFactorGraph &graph, const Values &initialValues, const SfmLevenbergMarquardtParams &params=SfmLevenbergMarquardtParams())
const SfmLevenbergMarquardtParamssfmParams () const
Public Member Functions inherited from gtsam::LevenbergMarquardtOptimizer
 LevenbergMarquardtOptimizer (const NonlinearFactorGraph &graph, const Values &initialValues, const LevenbergMarquardtParams &params=LevenbergMarquardtParams())
 Standard constructor, requires a nonlinear factor graph, initial variable assignments, and optimization parameters.
 LevenbergMarquardtOptimizer (const NonlinearFactorGraph &graph, const Values &initialValues, const Ordering &ordering, const LevenbergMarquardtParams &params=LevenbergMarquardtParams())
 Standard constructor, requires a nonlinear factor graph, initial variable assignments, and optimization parameters.
 ~LevenbergMarquardtOptimizer () override
 Virtual destructor.
double lambda () const
 Access the current damping value.
int getInnerIterations () const
 Access the current number of inner iterations.
void print (const std::string &str="") const
 print
GaussianFactorGraph::shared_ptr iterate () override
 Perform a single iteration, returning GaussianFactorGraph corresponding to the linearized factor graph.
const LevenbergMarquardtParamsparams () const
 Read-only access the parameters.
void writeLogFile (double currentError)
virtual GaussianFactorGraph::shared_ptr linearize () const
 linearize, can be overwritten
virtual GaussianFactorGraph buildDampedSystem (const GaussianFactorGraph &linear, const VectorValues &sqrtHessianDiagonal) const
 Build the damped linear system for the current lambda.
bool tryLambda (const GaussianFactorGraph &linear, const VectorValues &sqrtHessianDiagonal)
 Inner loop, changes state, returns true if successful or giving up.
Public Member Functions inherited from gtsam::NonlinearOptimizer
virtual const Valuesoptimize ()
 Optimize for the maximum-likelihood estimate, returning a the optimized variable assignments.
const ValuesoptimizeSafely ()
 Optimize, but return empty result if any uncaught exception is thrown Intended for MATLAB.
double error () const
 return error in current optimizer state
size_t iterations () const
 return number of iterations in current optimizer state
const Valuesvalues () const
 return values in current optimizer state
const NonlinearFactorGraphgraph () const
 return the graph with nonlinear factors
virtual ~NonlinearOptimizer ()
 Virtual destructor.

Static Public Member Functions

static Ordering CreateReducedOrdering (const NonlinearFactorGraph &graph, const Values &initialValues)
 Create a fill-reducing ordering for the reduced system.
static Ordering CreateSchurOrdering (const NonlinearFactorGraph &graph, const Ordering &reducedOrdering)
 Create a Schur ordering by prefixing a reduced-system ordering with all other active graph keys in natural key order.

Protected Member Functions

VectorValues solve (const GaussianFactorGraph &graph, const NonlinearOptimizerParams &params) const override
 Default function to do linear solve, i.e.
bool ensureMultifrontalSolver (const NonlinearOptimizerParams &params, const Values &values) const override
 Ensure that the nonlinearMultifrontalSolver_ is populated if (and only if) the params request the multifrontal Cholesky solver type (e.g., MULTIFRONTAL_SOLVER).
Protected Member Functions inherited from gtsam::LevenbergMarquardtOptimizer
void initTime ()
virtual double linearDeltaError (const GaussianFactorGraph &linear, const VectorValues &delta, double *oldError, double *newError) const
 Evaluate the linear-model error change used for LM step quality.
const NonlinearOptimizerParams_params () const override
 Access the parameters (base class version).
Protected Member Functions inherited from gtsam::NonlinearOptimizer
void defaultOptimize ()
 A default implementation of the optimization loop, which calls iterate() until checkConvergence returns true.
 NonlinearOptimizer (const NonlinearFactorGraph &graph, std::unique_ptr< internal::NonlinearOptimizerState > state)
 Constructor for initial construction of base classes.

Additional Inherited Members

Public Types inherited from gtsam::LevenbergMarquardtOptimizer
typedef std::shared_ptr< LevenbergMarquardtOptimizershared_ptr
Public Types inherited from gtsam::NonlinearOptimizer
using shared_ptr = std::shared_ptr<const NonlinearOptimizer>
 A shared pointer to this class.
Protected Attributes inherited from gtsam::LevenbergMarquardtOptimizer
const LevenbergMarquardtParams params_
 LM parameters.
std::chrono::time_point< std::chrono::high_resolution_clock > startTime_
 time when optimization started
std::chrono::time_point< std::chrono::high_resolution_clock > iterationStart_
double lastLinearizeTime_ {0.0}
double lastSolveTime_ {0.0}
Protected Attributes inherited from gtsam::NonlinearOptimizer
std::shared_ptr< const NonlinearFactorGraphgraph_
 The graph with nonlinear factors.
std::unique_ptr< internal::NonlinearOptimizerState > state_
 PIMPL'd state.
std::unique_ptr< NonlinearMultifrontalSolvernonlinearMultifrontalSolver_
 Solver for multifrontal Cholesky, lazily created.
std::unique_ptr< internal::CholmodSolver > cholmodSolver_
 Optional reusable CHOLMOD numerical and symbolic session.

Member Function Documentation

◆ CreateReducedOrdering()

Ordering gtsam::SfmLevenbergMarquardtOptimizer::CreateReducedOrdering ( const NonlinearFactorGraph & graph,
const Values & initialValues )
static

Create a fill-reducing ordering for the reduced system.

Active Point3 and Unit3 variables are symbolically eliminated in natural key order before METIS orders every remaining variable. This is the ordering accepted by Schur-mode parameters.

◆ CreateSchurOrdering()

Ordering gtsam::SfmLevenbergMarquardtOptimizer::CreateSchurOrdering ( const NonlinearFactorGraph & graph,
const Ordering & reducedOrdering )
static

Create a Schur ordering by prefixing a reduced-system ordering with all other active graph keys in natural key order.

This complete ordering is used by Full mode and by the fused Schur multifrontal path.

◆ ensureMultifrontalSolver()

bool gtsam::SfmLevenbergMarquardtOptimizer::ensureMultifrontalSolver ( const NonlinearOptimizerParams & params,
const Values & values ) const
overrideprotectedvirtual

Ensure that the nonlinearMultifrontalSolver_ is populated if (and only if) the params request the multifrontal Cholesky solver type (e.g., MULTIFRONTAL_SOLVER).

Returns true if the multifrontal solver is available and ready. If a different solver type is requested in params, this function returns false without modifying any solver state. If constraints are present or multifrontal initialization fails, it also returns false (and callers should fall back to the legacy linear solver path).

Reimplemented from gtsam::NonlinearOptimizer.

◆ solve()

VectorValues gtsam::SfmLevenbergMarquardtOptimizer::solve ( const GaussianFactorGraph & gfg,
const NonlinearOptimizerParams & params ) const
overrideprotectedvirtual

Default function to do linear solve, i.e.

optimize a GaussianFactorGraph

Reimplemented from gtsam::NonlinearOptimizer.


The documentation for this class was generated from the following files: