Add parameter_tolerance convergence to line search minimizer

Change-Id: Id3bd3c7490d679b87259bb0fbf0b2dbc7e831a07
This commit is contained in:
Johannes Schönberger
2015-04-15 17:16:17 -04:00
committed by Alex Stewart
parent a6f39a939d
commit 4eb3b8f34e
+16
View File
@@ -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",