Better options checking for TrustRegionMinimizer. Since the trust region minimizer can use the line search minimizer when it is solving a box constrained problem, ensure that the line search options are valid. Also some minor spacing fixes in the line search code. Change-Id: Ife04204855cfac389cf980f0a79155d4accc8662
diff --git a/internal/ceres/line_search.cc b/internal/ceres/line_search.cc index 7ff1164..0d645ac 100644 --- a/internal/ceres/line_search.cc +++ b/internal/ceres/line_search.cc
@@ -125,14 +125,12 @@ if (g == NULL) { return (evaluator_->Evaluate(evaluation_point_.data(), - f, NULL, NULL, NULL) && + f, NULL, NULL, NULL) && IsFinite(*f)); } if (!evaluator_->Evaluate(evaluation_point_.data(), - f, - NULL, - gradient_.data(), NULL)) { + f, NULL, gradient_.data(), NULL)) { return false; }
diff --git a/internal/ceres/solver.cc b/internal/ceres/solver.cc index 3512e15..a1f347f 100644 --- a/internal/ceres/solver.cc +++ b/internal/ceres/solver.cc
@@ -446,11 +446,16 @@ return false; } - if (minimizer_type == TRUST_REGION) { - return TrustRegionOptionsAreValid(*this, error); + if (minimizer_type == TRUST_REGION && + !TrustRegionOptionsAreValid(*this, error)) { + return false; } - CHECK_EQ(minimizer_type, LINE_SEARCH); + // We do not know if the problem is bounds constrained or not, if it + // is then the trust region solver will also use the line search + // solver to do a projection onto the box constraints, so make sure + // that the line search options are checked independent of what + // minimizer algorithm is being used. return LineSearchOptionsAreValid(*this, error); }
diff --git a/internal/ceres/trust_region_minimizer.cc b/internal/ceres/trust_region_minimizer.cc index c871ae2..7352ac2 100644 --- a/internal/ceres/trust_region_minimizer.cc +++ b/internal/ceres/trust_region_minimizer.cc
@@ -86,11 +86,10 @@ line_search_options.function = &line_search_function; string message; - scoped_ptr<LineSearch> - line_search(CHECK_NOTNULL( - LineSearch::Create(ceres::ARMIJO, - line_search_options, - &message))); + scoped_ptr<LineSearch> line_search( + CHECK_NOTNULL(LineSearch::Create(ceres::ARMIJO, + line_search_options, + &message))); LineSearch::Summary summary; line_search_function.Init(x, delta); // Try the trust region step. @@ -407,10 +406,10 @@ double new_cost = std::numeric_limits<double>::max(); if (evaluator->Plus(x.data(), delta.data(), x_plus_delta.data())) { if (!evaluator->Evaluate(x_plus_delta.data(), - &new_cost, - NULL, - NULL, - NULL)) { + &new_cost, + NULL, + NULL, + NULL)) { LOG(WARNING) << "Step failed to evaluate. " << "Treating it as a step with infinite cost"; new_cost = numeric_limits<double>::max();