From 5f94e477a4459e675c3bc1a88d0f7409f788585d Mon Sep 17 00:00:00 2001 From: Richard Roberts Date: Mon, 14 May 2012 18:32:54 +0000 Subject: [PATCH] Changes in progress --- gtsam/nonlinear/DoglegOptimizer.h | 76 +++++++-------- gtsam/nonlinear/GaussNewtonOptimizer.h | 12 +-- gtsam/nonlinear/LevenbergMarquardtOptimizer.h | 95 ++++++++++--------- 3 files changed, 92 insertions(+), 91 deletions(-) diff --git a/gtsam/nonlinear/DoglegOptimizer.h b/gtsam/nonlinear/DoglegOptimizer.h index af9c91179..1c6f3cb6f 100644 --- a/gtsam/nonlinear/DoglegOptimizer.h +++ b/gtsam/nonlinear/DoglegOptimizer.h @@ -22,6 +22,44 @@ namespace gtsam { +/** Parameters for Levenberg-Marquardt optimization. Note that this parameters + * class inherits from NonlinearOptimizerParams, which specifies the parameters + * common to all nonlinear optimization algorithms. This class also contains + * all of those parameters. + */ +class DoglegParams : public SuccessiveLinearizationParams { +public: + /** See DoglegParams::dlVerbosity */ + enum DLVerbosity { + SILENT, + VERBOSE + }; + + double deltaInitial; ///< The initial trust region radius (default: 1.0) + DLVerbosity dlVerbosity; ///< The verbosity level for Dogleg (default: SILENT), see also NonlinearOptimizerParams::verbosity + + DoglegParams() : + deltaInitial(1.0), dlVerbosity(SILENT) {} + + virtual ~DoglegParams() {} + + virtual void print(const std::string& str = "") const { + SuccessiveLinearizationParams::print(str); + std::cout << " deltaInitial: " << deltaInitial << "\n"; + std::cout.flush(); + } +}; + +/** + * State for DoglegOptimizer + */ +class DoglegState : public SuccessiveLinearizationState { +public: + + double delta; + +}; + /** * This class performs Dogleg nonlinear optimization */ @@ -98,42 +136,4 @@ protected: } }; -/** Parameters for Levenberg-Marquardt optimization. Note that this parameters - * class inherits from NonlinearOptimizerParams, which specifies the parameters - * common to all nonlinear optimization algorithms. This class also contains - * all of those parameters. - */ -class DoglegParams : public SuccessiveLinearizationParams { -public: - /** See DoglegParams::dlVerbosity */ - enum DLVerbosity { - SILENT, - VERBOSE - }; - - double deltaInitial; ///< The initial trust region radius (default: 1.0) - DLVerbosity dlVerbosity; ///< The verbosity level for Dogleg (default: SILENT), see also NonlinearOptimizerParams::verbosity - - DoglegParams() : - deltaInitial(1.0), dlVerbosity(SILENT) {} - - virtual ~DoglegParams() {} - - virtual void print(const std::string& str = "") const { - SuccessiveLinearizationParams::print(str); - std::cout << " deltaInitial: " << deltaInitial << "\n"; - std::cout.flush(); - } -}; - -/** - * State for DoglegOptimizer - */ -class DoglegState : public SuccessiveLinearizationState { -public: - - double delta; - -}; - } diff --git a/gtsam/nonlinear/GaussNewtonOptimizer.h b/gtsam/nonlinear/GaussNewtonOptimizer.h index 6258366af..afc0fe30d 100644 --- a/gtsam/nonlinear/GaussNewtonOptimizer.h +++ b/gtsam/nonlinear/GaussNewtonOptimizer.h @@ -22,6 +22,12 @@ namespace gtsam { +/** Parameters for Gauss-Newton optimization, inherits from + * NonlinearOptimizationParams. + */ +class GaussNewtonParams : public SuccessiveLinearizationParams { +}; + /** * This class performs Gauss-Newton nonlinear optimization */ @@ -98,10 +104,4 @@ protected: }; -/** Parameters for Gauss-Newton optimization, inherits from - * NonlinearOptimizationParams. - */ -class GaussNewtonParams : public SuccessiveLinearizationParams { -}; - } diff --git a/gtsam/nonlinear/LevenbergMarquardtOptimizer.h b/gtsam/nonlinear/LevenbergMarquardtOptimizer.h index b5b6d21f6..c522d0a82 100644 --- a/gtsam/nonlinear/LevenbergMarquardtOptimizer.h +++ b/gtsam/nonlinear/LevenbergMarquardtOptimizer.h @@ -22,6 +22,52 @@ namespace gtsam { +/** Parameters for Levenberg-Marquardt optimization. Note that this parameters + * class inherits from NonlinearOptimizerParams, which specifies the parameters + * common to all nonlinear optimization algorithms. This class also contains + * all of those parameters. + */ +class LevenbergMarquardtParams : public SuccessiveLinearizationParams { +public: + /** See LevenbergMarquardtParams::lmVerbosity */ + enum LMVerbosity { + SILENT, + LAMBDA, + TRYLAMBDA, + TRYCONFIG, + TRYDELTA, + DAMPED + }; + + double lambdaInitial; ///< The initial Levenberg-Marquardt damping term (default: 1e-5) + double lambdaFactor; ///< The amount by which to multiply or divide lambda when adjusting lambda (default: 10.0) + double lambdaUpperBound; ///< The maximum lambda to try before assuming the optimization has failed (default: 1e5) + LMVerbosity lmVerbosity; ///< The verbosity level for Levenberg-Marquardt (default: SILENT), see also NonlinearOptimizerParams::verbosity + + LevenbergMarquardtParams() : + lambdaInitial(1e-5), lambdaFactor(10.0), lambdaUpperBound(1e5), lmVerbosity(SILENT) {} + + virtual ~LevenbergMarquardtParams() {} + + virtual void print(const std::string& str = "") const { + SuccessiveLinearizationParams::print(str); + std::cout << " lambdaInitial: " << lambdaInitial << "\n"; + std::cout << " lambdaFactor: " << lambdaFactor << "\n"; + std::cout << " lambdaUpperBound: " << lambdaUpperBound << "\n"; + std::cout.flush(); + } +}; + +/** + * State for LevenbergMarquardtOptimizer + */ +class LevenbergMarquardtState : public NonlinearOptimizerState { +public: + + double lambda; + +}; + /** * This class performs Levenberg-Marquardt nonlinear optimization */ @@ -44,7 +90,8 @@ public: */ LevenbergMarquardtOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues, const LevenbergMarquardtParams& params = LevenbergMarquardtParams()) : - NonlinearOptimizer(graph), params_(ensureHasOrdering(params)), state_(graph, initialValues), dimensions_(initialValues.dims(*params_.ordering)) {} + NonlinearOptimizer(graph), params_(ensureHasOrdering(params)), + state_(graph, initialValues), dimensions_(initialValues.dims(*params_.ordering)) {} /** Standard constructor, requires a nonlinear factor graph, initial * variable assignments, and optimization parameters. For convenience this @@ -100,50 +147,4 @@ protected: } }; -/** Parameters for Levenberg-Marquardt optimization. Note that this parameters - * class inherits from NonlinearOptimizerParams, which specifies the parameters - * common to all nonlinear optimization algorithms. This class also contains - * all of those parameters. - */ -class LevenbergMarquardtParams : public SuccessiveLinearizationParams { -public: - /** See LevenbergMarquardtParams::lmVerbosity */ - enum LMVerbosity { - SILENT, - LAMBDA, - TRYLAMBDA, - TRYCONFIG, - TRYDELTA, - DAMPED - }; - - double lambdaInitial; ///< The initial Levenberg-Marquardt damping term (default: 1e-5) - double lambdaFactor; ///< The amount by which to multiply or divide lambda when adjusting lambda (default: 10.0) - double lambdaUpperBound; ///< The maximum lambda to try before assuming the optimization has failed (default: 1e5) - LMVerbosity lmVerbosity; ///< The verbosity level for Levenberg-Marquardt (default: SILENT), see also NonlinearOptimizerParams::verbosity - - LevenbergMarquardtParams() : - lambdaInitial(1e-5), lambdaFactor(10.0), lambdaUpperBound(1e5), lmVerbosity(SILENT) {} - - virtual ~LevenbergMarquardtParams() {} - - virtual void print(const std::string& str = "") const { - SuccessiveLinearizationParams::print(str); - std::cout << " lambdaInitial: " << lambdaInitial << "\n"; - std::cout << " lambdaFactor: " << lambdaFactor << "\n"; - std::cout << " lambdaUpperBound: " << lambdaUpperBound << "\n"; - std::cout.flush(); - } -}; - -/** - * State for LevenbergMarquardtOptimizer - */ -class LevenbergMarquardtState : public NonlinearOptimizerState { -public: - - double lambda; - -}; - }