Use reuse_diagonal_ with step policy to save computation time (same as Ceres).

release/4.3a0
hchiu 2014-02-28 20:45:09 -05:00
parent 037ed7b931
commit 6b215ea8d9
1 changed files with 5 additions and 2 deletions

View File

@ -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");