From ef67b9eec4edbeec8d21fa6db798cd6ef68ab344 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 14 Jan 2014 01:17:54 +0600 Subject: Ceres: more warnings cleanup --- extern/libmv/third_party/ceres/ChangeLog | 21 ++- .../ceres/internal/ceres/line_search.cc | 4 +- .../ceres/internal/ceres/solver_impl.cc | 155 ++++++++++----------- 3 files changed, 89 insertions(+), 91 deletions(-) (limited to 'extern/libmv') diff --git a/extern/libmv/third_party/ceres/ChangeLog b/extern/libmv/third_party/ceres/ChangeLog index e80015534d6..9c6ec324a24 100644 --- a/extern/libmv/third_party/ceres/ChangeLog +++ b/extern/libmv/third_party/ceres/ChangeLog @@ -1,3 +1,13 @@ +commit 15bf0d5018dfe432ef67e726b248efcf3b58bc4f +Author: Sergey Sharybin +Date: Mon Jan 13 20:38:28 2014 +0600 + + Code cleanup: fix no previous declaration warnings + + Move internally used functions to an anonymous namespace, + + Change-Id: I84c98facf901e64771d131b088e20e2c033cab70 + commit 80a53eebfd28bfc032cedbf7852d5c56eb1d5af5 Author: Sameer Agarwal Date: Thu Jan 9 12:40:54 2014 -0800 @@ -675,14 +685,3 @@ Date: Tue Nov 5 13:47:30 2013 -0800 with miniglog. Change-Id: Ia1d1d1483e03469c71fde029b62ca6d84e9b27e0 - -commit b5be6b9c065a02158337ee7eacfdb8be811dec7f -Author: Alex Stewart -Date: Tue Nov 5 13:10:27 2013 +0000 - - Cleaning up messages output when SuiteSparse is not found. - - - Automatically generated failure message now provides more - information as to which sub-modules are missing. - - Change-Id: I6eed94af49263540b8f87917b75c41b8f49658a0 diff --git a/extern/libmv/third_party/ceres/internal/ceres/line_search.cc b/extern/libmv/third_party/ceres/internal/ceres/line_search.cc index 77d1369634b..c3f02134c6f 100644 --- a/extern/libmv/third_party/ceres/internal/ceres/line_search.cc +++ b/extern/libmv/third_party/ceres/internal/ceres/line_search.cc @@ -67,8 +67,6 @@ FunctionSample ValueAndGradientSample(const double x, return sample; }; -} // namespace - // Convenience stream operator for pushing FunctionSamples into log messages. std::ostream& operator<<(std::ostream &os, const FunctionSample& sample) { @@ -76,6 +74,8 @@ std::ostream& operator<<(std::ostream &os, return os; } +} // namespace + LineSearch::LineSearch(const LineSearch::Options& options) : options_(options) {} diff --git a/extern/libmv/third_party/ceres/internal/ceres/solver_impl.cc b/extern/libmv/third_party/ceres/internal/ceres/solver_impl.cc index cf0e2515ab6..1001a551d8c 100644 --- a/extern/libmv/third_party/ceres/internal/ceres/solver_impl.cc +++ b/extern/libmv/third_party/ceres/internal/ceres/solver_impl.cc @@ -224,6 +224,83 @@ void SummarizeReducedProgram(const Program& program, Solver::Summary* summary) { summary->num_residuals_reduced = program.NumResiduals(); } +bool LineSearchOptionsAreValid(const Solver::Options& options, + string* message) { + // Validate values for configuration parameters supplied by user. + if ((options.line_search_direction_type == ceres::BFGS || + options.line_search_direction_type == ceres::LBFGS) && + options.line_search_type != ceres::WOLFE) { + *message = + string("Invalid configuration: require line_search_type == " + "ceres::WOLFE when using (L)BFGS to ensure that underlying " + "assumptions are guaranteed to be satisfied."); + return false; + } + if (options.max_lbfgs_rank <= 0) { + *message = + string("Invalid configuration: require max_lbfgs_rank > 0"); + return false; + } + if (options.min_line_search_step_size <= 0.0) { + *message = + "Invalid configuration: require min_line_search_step_size > 0.0."; + return false; + } + if (options.line_search_sufficient_function_decrease <= 0.0) { + *message = + string("Invalid configuration: require ") + + string("line_search_sufficient_function_decrease > 0.0."); + return false; + } + if (options.max_line_search_step_contraction <= 0.0 || + options.max_line_search_step_contraction >= 1.0) { + *message = string("Invalid configuration: require ") + + string("0.0 < max_line_search_step_contraction < 1.0."); + return false; + } + if (options.min_line_search_step_contraction <= + options.max_line_search_step_contraction || + options.min_line_search_step_contraction > 1.0) { + *message = string("Invalid configuration: require ") + + string("max_line_search_step_contraction < ") + + string("min_line_search_step_contraction <= 1.0."); + return false; + } + // Warn user if they have requested BISECTION interpolation, but constraints + // on max/min step size change during line search prevent bisection scaling + // from occurring. Warn only, as this is likely a user mistake, but one which + // does not prevent us from continuing. + LOG_IF(WARNING, + (options.line_search_interpolation_type == ceres::BISECTION && + (options.max_line_search_step_contraction > 0.5 || + options.min_line_search_step_contraction < 0.5))) + << "Line search interpolation type is BISECTION, but specified " + << "max_line_search_step_contraction: " + << options.max_line_search_step_contraction << ", and " + << "min_line_search_step_contraction: " + << options.min_line_search_step_contraction + << ", prevent bisection (0.5) scaling, continuing with solve regardless."; + if (options.max_num_line_search_step_size_iterations <= 0) { + *message = string("Invalid configuration: require ") + + string("max_num_line_search_step_size_iterations > 0."); + return false; + } + if (options.line_search_sufficient_curvature_decrease <= + options.line_search_sufficient_function_decrease || + options.line_search_sufficient_curvature_decrease > 1.0) { + *message = string("Invalid configuration: require ") + + string("line_search_sufficient_function_decrease < ") + + string("line_search_sufficient_curvature_decrease < 1.0."); + return false; + } + if (options.max_line_search_step_expansion <= 1.0) { + *message = string("Invalid configuration: require ") + + string("max_line_search_step_expansion > 1.0."); + return false; + } + return true; +} + } // namespace void SolverImpl::TrustRegionMinimize( @@ -618,85 +695,7 @@ void SolverImpl::TrustRegionSolve(const Solver::Options& original_options, event_logger.AddEvent("PostProcess"); } - #ifndef CERES_NO_LINE_SEARCH_MINIMIZER -bool LineSearchOptionsAreValid(const Solver::Options& options, - string* message) { - // Validate values for configuration parameters supplied by user. - if ((options.line_search_direction_type == ceres::BFGS || - options.line_search_direction_type == ceres::LBFGS) && - options.line_search_type != ceres::WOLFE) { - *message = - string("Invalid configuration: require line_search_type == " - "ceres::WOLFE when using (L)BFGS to ensure that underlying " - "assumptions are guaranteed to be satisfied."); - return false; - } - if (options.max_lbfgs_rank <= 0) { - *message = - string("Invalid configuration: require max_lbfgs_rank > 0"); - return false; - } - if (options.min_line_search_step_size <= 0.0) { - *message = - "Invalid configuration: require min_line_search_step_size > 0.0."; - return false; - } - if (options.line_search_sufficient_function_decrease <= 0.0) { - *message = - string("Invalid configuration: require ") + - string("line_search_sufficient_function_decrease > 0.0."); - return false; - } - if (options.max_line_search_step_contraction <= 0.0 || - options.max_line_search_step_contraction >= 1.0) { - *message = string("Invalid configuration: require ") + - string("0.0 < max_line_search_step_contraction < 1.0."); - return false; - } - if (options.min_line_search_step_contraction <= - options.max_line_search_step_contraction || - options.min_line_search_step_contraction > 1.0) { - *message = string("Invalid configuration: require ") + - string("max_line_search_step_contraction < ") + - string("min_line_search_step_contraction <= 1.0."); - return false; - } - // Warn user if they have requested BISECTION interpolation, but constraints - // on max/min step size change during line search prevent bisection scaling - // from occurring. Warn only, as this is likely a user mistake, but one which - // does not prevent us from continuing. - LOG_IF(WARNING, - (options.line_search_interpolation_type == ceres::BISECTION && - (options.max_line_search_step_contraction > 0.5 || - options.min_line_search_step_contraction < 0.5))) - << "Line search interpolation type is BISECTION, but specified " - << "max_line_search_step_contraction: " - << options.max_line_search_step_contraction << ", and " - << "min_line_search_step_contraction: " - << options.min_line_search_step_contraction - << ", prevent bisection (0.5) scaling, continuing with solve regardless."; - if (options.max_num_line_search_step_size_iterations <= 0) { - *message = string("Invalid configuration: require ") + - string("max_num_line_search_step_size_iterations > 0."); - return false; - } - if (options.line_search_sufficient_curvature_decrease <= - options.line_search_sufficient_function_decrease || - options.line_search_sufficient_curvature_decrease > 1.0) { - *message = string("Invalid configuration: require ") + - string("line_search_sufficient_function_decrease < ") + - string("line_search_sufficient_curvature_decrease < 1.0."); - return false; - } - if (options.max_line_search_step_expansion <= 1.0) { - *message = string("Invalid configuration: require ") + - string("max_line_search_step_expansion > 1.0."); - return false; - } - return true; -} - void SolverImpl::LineSearchSolve(const Solver::Options& original_options, ProblemImpl* original_problem_impl, Solver::Summary* summary) { -- cgit v1.2.3