mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-29 16:40:38 +08:00
Add parameter_tolerance convergence to line search minimizer
Change-Id: Id3bd3c7490d679b87259bb0fbf0b2dbc7e831a07
This commit is contained in:
committed by
Alex Stewart
parent
a6f39a939d
commit
4eb3b8f34e
@@ -332,6 +332,8 @@ void LineSearchMinimizer::Minimize(const Minimizer::Options& options,
|
||||
iteration_summary.step_solver_time_in_seconds =
|
||||
WallTimeInSeconds() - iteration_start_time;
|
||||
|
||||
const double x_norm = x.norm();
|
||||
|
||||
if (!evaluator->Plus(x.data(), delta.data(), x_plus_delta.data())) {
|
||||
summary->termination_type = FAILURE;
|
||||
summary->message =
|
||||
@@ -384,6 +386,20 @@ void LineSearchMinimizer::Minimize(const Minimizer::Options& options,
|
||||
line_search_summary.total_time_in_seconds;
|
||||
++summary->num_successful_steps;
|
||||
|
||||
const double step_size_tolerance = options.parameter_tolerance *
|
||||
(x_norm + options.parameter_tolerance);
|
||||
if (iteration_summary.step_norm <= step_size_tolerance) {
|
||||
summary->message =
|
||||
StringPrintf("Parameter tolerance reached. "
|
||||
"Relative step_norm: %e <= %e.",
|
||||
(iteration_summary.step_norm /
|
||||
(x_norm + options.parameter_tolerance)),
|
||||
options.parameter_tolerance);
|
||||
summary->termination_type = CONVERGENCE;
|
||||
VLOG_IF(1, is_not_silent) << "Terminating: " << summary->message;
|
||||
return;
|
||||
}
|
||||
|
||||
if (iteration_summary.gradient_max_norm <= options.gradient_tolerance) {
|
||||
summary->message = StringPrintf("Gradient tolerance reached. "
|
||||
"Gradient max norm: %e <= %e",
|
||||
|
||||
Reference in New Issue
Block a user