Use reuse_diagonal_ with step policy to save computation time (same as Ceres).
parent
037ed7b931
commit
6b215ea8d9
|
|
@ -91,8 +91,8 @@ void LevenbergMarquardtOptimizer::increaseLambda(double stepQuality){
|
||||||
}else{
|
}else{
|
||||||
state_.lambda *= params_.lambdaFactor;
|
state_.lambda *= params_.lambdaFactor;
|
||||||
params_.lambdaFactor *= 2.0;
|
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);
|
// CHECK_GT(step_quality, 0.0);
|
||||||
state_.lambda *= std::max(1.0 / 3.0, 1.0 - pow(2.0 * stepQuality - 1.0, 3));
|
state_.lambda *= std::max(1.0 / 3.0, 1.0 - pow(2.0 * stepQuality - 1.0, 3));
|
||||||
params_.lambdaFactor = 2.0;
|
params_.lambdaFactor = 2.0;
|
||||||
// reuse_diagonal_ = false;
|
|
||||||
}
|
}
|
||||||
state_.lambda = std::max(params_.lambdaLowerBound, state_.lambda);
|
state_.lambda = std::max(params_.lambdaLowerBound, state_.lambda);
|
||||||
|
params_.reuse_diagonal_ = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
@ -195,6 +196,8 @@ void LevenbergMarquardtOptimizer::iterate() {
|
||||||
// Solve Damped Gaussian Factor Graph
|
// Solve Damped Gaussian Factor Graph
|
||||||
const VectorValues delta = solve(dampedSystem, state_.values, params_);
|
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::TRYLAMBDA) cout << "linear delta norm = " << delta.norm() << endl;
|
||||||
if (lmVerbosity >= LevenbergMarquardtParams::TRYDELTA) delta.print("delta");
|
if (lmVerbosity >= LevenbergMarquardtParams::TRYDELTA) delta.print("delta");
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue