From ff7a78b8549d954b7f1a70fa567a56e226f61937 Mon Sep 17 00:00:00 2001 From: Richard Roberts Date: Thu, 1 Mar 2012 16:07:19 +0000 Subject: [PATCH] Slightly more convenient NonlinearOptimizer constructors --- gtsam/nonlinear/GaussNewtonOptimizer.h | 21 ++++++++++++++++++- gtsam/nonlinear/LevenbergMarquardtOptimizer.h | 21 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/gtsam/nonlinear/GaussNewtonOptimizer.h b/gtsam/nonlinear/GaussNewtonOptimizer.h index 3b1e69481..e445a4e00 100644 --- a/gtsam/nonlinear/GaussNewtonOptimizer.h +++ b/gtsam/nonlinear/GaussNewtonOptimizer.h @@ -90,7 +90,7 @@ public: * @param params The optimization parameters */ GaussNewtonOptimizer(const NonlinearFactorGraph& graph, const Values& values, - const GaussNewtonParams& params = GaussNewtonParams(), + const GaussNewtonParams& params, const Ordering& ordering = Ordering()) : NonlinearOptimizer( SharedGraph(new NonlinearFactorGraph(graph)), @@ -101,6 +101,25 @@ public: ordering_(colamdOrdering_ ? graph_->orderingCOLAMD(*values_) : Ordering::shared_ptr(new Ordering(ordering))) {} + /** Standard constructor, requires a nonlinear factor graph, initial + * variable assignments, and optimization parameters. For convenience this + * version takes plain objects instead of shared pointers, but internally + * copies the objects. + * @param graph The nonlinear factor graph to optimize + * @param values The initial variable assignments + * @param params The optimization parameters + */ + GaussNewtonOptimizer(const NonlinearFactorGraph& graph, const Values& values, + const Ordering& ordering = Ordering()) : + NonlinearOptimizer( + SharedGraph(new NonlinearFactorGraph(graph)), + SharedValues(new Values(values)), + SharedGNParams(new GaussNewtonParams())), + gnParams_(boost::static_pointer_cast(params_)), + colamdOrdering_(ordering.size() == 0), + ordering_(colamdOrdering_ ? + graph_->orderingCOLAMD(*values_) : Ordering::shared_ptr(new Ordering(ordering))) {} + /** Standard constructor, requires a nonlinear factor graph, initial * variable assignments, and optimization parameters. * @param graph The nonlinear factor graph to optimize diff --git a/gtsam/nonlinear/LevenbergMarquardtOptimizer.h b/gtsam/nonlinear/LevenbergMarquardtOptimizer.h index b2605b968..48a7fd532 100644 --- a/gtsam/nonlinear/LevenbergMarquardtOptimizer.h +++ b/gtsam/nonlinear/LevenbergMarquardtOptimizer.h @@ -124,6 +124,27 @@ public: dimensions_(new vector(values_->dims(*ordering_))), lambda_(lmParams_->lambdaInitial) {} + /** Standard constructor, requires a nonlinear factor graph, initial + * variable assignments, and optimization parameters. For convenience this + * version takes plain objects instead of shared pointers, but internally + * copies the objects. + * @param graph The nonlinear factor graph to optimize + * @param values The initial variable assignments + * @param params The optimization parameters + */ + LevenbergMarquardtOptimizer(const NonlinearFactorGraph& graph, const Values& values, + const Ordering& ordering) : + NonlinearOptimizer( + SharedGraph(new NonlinearFactorGraph(graph)), + SharedValues(new Values(values)), + SharedLMParams(new LevenbergMarquardtParams())), + lmParams_(boost::static_pointer_cast(params_)), + colamdOrdering_(ordering.size() == 0), + ordering_(colamdOrdering_ ? + graph_->orderingCOLAMD(*values_) : Ordering::shared_ptr(new Ordering(ordering))), + dimensions_(new vector(values_->dims(*ordering_))), + lambda_(lmParams_->lambdaInitial) {} + /** Standard constructor, requires a nonlinear factor graph, initial * variable assignments, and optimization parameters. * @param graph The nonlinear factor graph to optimize