diff --git a/gtsam/nonlinear/LevenbergMarquardtOptimizer.cpp b/gtsam/nonlinear/LevenbergMarquardtOptimizer.cpp index 609738b18..6618fc6f8 100644 --- a/gtsam/nonlinear/LevenbergMarquardtOptimizer.cpp +++ b/gtsam/nonlinear/LevenbergMarquardtOptimizer.cpp @@ -91,8 +91,8 @@ void LevenbergMarquardtOptimizer::increaseLambda(double stepQuality){ }else{ state_.lambda *= params_.lambdaFactor; params_.lambdaFactor *= 2.0; - // reuse_diagonal_ = true; } + params_.reuse_diagonal_ = true; } /* ************************************************************************* */ @@ -104,9 +104,10 @@ void LevenbergMarquardtOptimizer::decreaseLambda(double stepQuality){ // CHECK_GT(step_quality, 0.0); state_.lambda *= std::max(1.0 / 3.0, 1.0 - pow(2.0 * stepQuality - 1.0, 3)); params_.lambdaFactor = 2.0; - // reuse_diagonal_ = false; } state_.lambda = std::max(params_.lambdaLowerBound, state_.lambda); + params_.reuse_diagonal_ = false; + } /* ************************************************************************* */ @@ -195,6 +196,8 @@ void LevenbergMarquardtOptimizer::iterate() { // Solve Damped Gaussian Factor Graph const VectorValues delta = solve(dampedSystem, state_.values, params_); + params_.reuse_diagonal_ = true; + if (lmVerbosity >= LevenbergMarquardtParams::TRYLAMBDA) cout << "linear delta norm = " << delta.norm() << endl; if (lmVerbosity >= LevenbergMarquardtParams::TRYDELTA) delta.print("delta");