From 21490eadd6b15023f46f0930f0df82f9701d1e7f Mon Sep 17 00:00:00 2001 From: dellaert Date: Wed, 4 Jun 2014 14:57:22 -0400 Subject: [PATCH] Comments w Yong-Dian --- gtsam/nonlinear/NonlinearOptimizer.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gtsam/nonlinear/NonlinearOptimizer.cpp b/gtsam/nonlinear/NonlinearOptimizer.cpp index 54e5cb9e3..a98cd614f 100644 --- a/gtsam/nonlinear/NonlinearOptimizer.cpp +++ b/gtsam/nonlinear/NonlinearOptimizer.cpp @@ -96,16 +96,24 @@ const Values& NonlinearOptimizer::optimizeSafely() { /* ************************************************************************* */ VectorValues NonlinearOptimizer::solve(const GaussianFactorGraph &gfg, const Values& initial, const NonlinearOptimizerParams& params) const { + + // solution of linear solver is an update to the linearization point VectorValues delta; + + // Check which solver we are using if (params.isMultifrontal()) { + // Multifrontal QR or Cholesky (decided by params.getEliminationFunction()) delta = gfg.optimize(*params.ordering, params.getEliminationFunction()); } else if (params.isSequential()) { + // Sequential QR or Cholesky (decided by params.getEliminationFunction()) delta = gfg.eliminateSequential(*params.ordering, params.getEliminationFunction())->optimize(); } else if (params.isCG()) { + // Conjugate Gradient -> needs params.iterativeParams if (!params.iterativeParams) throw std::runtime_error( "NonlinearOptimizer::solve: cg parameter has to be assigned ..."); + // the type of params.iterativeParams decides the type of CG solver if (boost::dynamic_pointer_cast( params.iterativeParams)) { SubgraphSolver solver(gfg, @@ -120,6 +128,8 @@ VectorValues NonlinearOptimizer::solve(const GaussianFactorGraph &gfg, throw std::runtime_error( "NonlinearOptimizer::solve: Optimization parameter is invalid"); } + + // return update return delta; }