Limited memory Broyden Fletcher Goldfarb Shannon minimization with constraints. More...
#include <vnl_lbfgsb.h>
Public Types | |
enum | ReturnCodes { ERROR_FAILURE = -1, ERROR_DODGY_INPUT = 0, CONVERGED_FTOL = 1, CONVERGED_XTOL = 2, CONVERGED_XFTOL = 3, CONVERGED_GTOL = 4, FAILED_TOO_MANY_ITERATIONS = 5, TOO_MANY_ITERATIONS = FAILED_TOO_MANY_ITERATIONS, FAILED_FTOL_TOO_SMALL = 6, FAILED_XTOL_TOO_SMALL = 7, FAILED_GTOL_TOO_SMALL = 8, FAILED_USER_REQUEST = 9 } |
Some generic return codes that apply to all minimizers. More... | |
Public Member Functions | |
vnl_lbfgsb () | |
vnl_lbfgsb (vnl_cost_function &f) | |
bool | minimize (vnl_vector< double > &x) |
Find a minimum in the feasible region given an initial guess. | |
void | set_bound_selection (vnl_vector< long > const &nbd) |
Set the bounds to be enforced on each variable. | |
void | get_bound_selection (vnl_vector< long > &nbd) const |
Get the bounds currently enforced on each variable. | |
void | set_lower_bound (vnl_vector< double > const &l) |
Set the lower bounds for all variables. | |
void | get_lower_bound (vnl_vector< double > &l) const |
Get the lower bounds for all variables. | |
void | set_upper_bound (vnl_vector< double > const &u) |
Set the upper bounds for all variables. | |
void | get_upper_bound (vnl_vector< double > &u) const |
Get the upper bounds for all variables. | |
void | set_max_variable_metric_corrections (long m) |
Set the maximum number of variable metric corrections. | |
long | get_max_variable_metric_corrections () const |
Get the maximum number of variable metric corrections. | |
void | set_cost_function_convergence_factor (double factor) |
Set the cost function convergence factor. | |
double | get_cost_function_convergence_factor () const |
Get the cost function convergence factor. | |
void | set_projected_gradient_tolerance (double tol) |
Set the projected gradient tolerance. | |
double | get_projected_gradient_tolerance () const |
Get the projected gradient tolerance. | |
double | get_inf_norm_projected_gradient () const |
Get the current infinity norm of the projected gradient. | |
void | set_f_tolerance (double v) |
Set the convergence tolerance on F (sum of squared residuals). | |
double | get_f_tolerance () const |
void | set_x_tolerance (double v) |
Set the convergence tolerance on X. | |
double | get_x_tolerance () const |
void | set_g_tolerance (double v) |
Set the convergence tolerance on Grad(F)' * F. | |
double | get_g_tolerance () const |
void | set_max_function_evals (int v) |
Set the termination maximum number of iterations. | |
int | get_max_function_evals () const |
void | set_epsilon_function (double v) |
Set the step length for FD Jacobian. | |
double | get_epsilon_function () const |
void | set_trace (bool on) |
Turn on per-iteration printouts. | |
bool | get_trace () const |
void | set_verbose (bool verb) |
Set verbose flag. | |
bool | get_verbose () const |
void | set_check_derivatives (int cd) |
Set check_derivatives flag. Negative values may mean fewer checks. | |
int | get_check_derivatives () const |
double | get_start_error () const |
Return the error of the function when it was evaluated at the start point of the last minimization. | |
double | get_end_error () const |
Return the best error that was achieved by the last minimization, corresponding to the returned x. | |
int | get_num_evaluations () const |
Return the total number of times the function was evaluated by the last minimization. | |
int | get_num_iterations () const |
Return the number of {iterations} in the last minimization. | |
bool | obj_value_reduced () |
Whether the error reduced in the last minimization. | |
virtual vnl_matrix< double > const & | get_covariance () |
Return the covariance of the estimate at the end. | |
virtual vcl_string | is_a () const |
Return the name of the class. | |
virtual bool | is_class (vcl_string const &s) const |
Return true if the name of the class matches the argument. | |
ReturnCodes | get_failure_code () const |
Return the failure code of the last minimization. | |
Protected Member Functions | |
void | reset () |
void | report_eval (double f) |
Called by derived classes after each function evaluation. | |
virtual bool | report_iter () |
Called by derived classes after each iteration. | |
Protected Attributes | |
vnl_vector< double > | lower_bound_ |
vnl_vector< double > | upper_bound_ |
vnl_vector< long > | bound_selection_ |
long | max_corrections_ |
double | convergence_factor_ |
double | projected_gradient_tolerance_ |
double | inf_norm_projected_gradient_ |
double | xtol |
Termination tolerance on X (solution vector) | |
long | maxfev |
Termination maximum number of iterations. | |
double | ftol |
Termination tolerance on F (sum of squared residuals) | |
double | gtol |
Termination tolerance on Grad(F)' * F = 0. | |
double | epsfcn |
Step length for FD Jacobian. | |
unsigned | num_iterations_ |
long | num_evaluations_ |
double | start_error_ |
double | end_error_ |
bool | trace |
bool | verbose_ |
int | check_derivatives_ |
ReturnCodes | failure_code_ |
Private Member Functions | |
void | init_parameters () |
Private Attributes | |
vnl_cost_function * | f_ |
Limited memory Broyden Fletcher Goldfarb Shannon minimization with constraints.
Lower and upper bounds may be specified for the variables to be optimized. The algorithm minimizes a nonlinear function f(x) of n variables subject to simple bound constraints of l <= x <= u.
Definition at line 28 of file vnl_lbfgsb.h.
enum vnl_nonlinear_minimizer::ReturnCodes [inherited] |
Some generic return codes that apply to all minimizers.
Definition at line 102 of file vnl_nonlinear_minimizer.h.
vnl_lbfgsb::vnl_lbfgsb | ( | ) |
Definition at line 19 of file vnl_lbfgsb.cxx.
vnl_lbfgsb::vnl_lbfgsb | ( | vnl_cost_function & | f | ) |
Definition at line 25 of file vnl_lbfgsb.cxx.
void vnl_lbfgsb::get_bound_selection | ( | vnl_vector< long > & | nbd | ) | const [inline] |
Get the bounds currently enforced on each variable.
Definition at line 49 of file vnl_lbfgsb.h.
int vnl_nonlinear_minimizer::get_check_derivatives | ( | ) | const [inline, inherited] |
Definition at line 82 of file vnl_nonlinear_minimizer.h.
double vnl_lbfgsb::get_cost_function_convergence_factor | ( | ) | const [inline] |
Get the cost function convergence factor.
Definition at line 92 of file vnl_lbfgsb.h.
vnl_matrix< double > const & vnl_nonlinear_minimizer::get_covariance | ( | ) | [virtual, inherited] |
Return the covariance of the estimate at the end.
Definition at line 35 of file vnl_nonlinear_minimizer.cxx.
double vnl_nonlinear_minimizer::get_end_error | ( | ) | const [inline, inherited] |
Return the best error that was achieved by the last minimization, corresponding to the returned x.
Definition at line 92 of file vnl_nonlinear_minimizer.h.
double vnl_nonlinear_minimizer::get_epsilon_function | ( | ) | const [inline, inherited] |
Definition at line 70 of file vnl_nonlinear_minimizer.h.
double vnl_nonlinear_minimizer::get_f_tolerance | ( | ) | const [inline, inherited] |
Definition at line 46 of file vnl_nonlinear_minimizer.h.
ReturnCodes vnl_nonlinear_minimizer::get_failure_code | ( | ) | const [inline, inherited] |
Return the failure code of the last minimization.
Definition at line 132 of file vnl_nonlinear_minimizer.h.
double vnl_nonlinear_minimizer::get_g_tolerance | ( | ) | const [inline, inherited] |
Definition at line 60 of file vnl_nonlinear_minimizer.h.
double vnl_lbfgsb::get_inf_norm_projected_gradient | ( | ) | const [inline] |
Get the current infinity norm of the projected gradient.
Definition at line 107 of file vnl_lbfgsb.h.
void vnl_lbfgsb::get_lower_bound | ( | vnl_vector< double > & | l | ) | const [inline] |
Get the lower bounds for all variables.
Definition at line 60 of file vnl_lbfgsb.h.
int vnl_nonlinear_minimizer::get_max_function_evals | ( | ) | const [inline, inherited] |
Definition at line 64 of file vnl_nonlinear_minimizer.h.
long vnl_lbfgsb::get_max_variable_metric_corrections | ( | ) | const [inline] |
Get the maximum number of variable metric corrections.
Definition at line 81 of file vnl_lbfgsb.h.
int vnl_nonlinear_minimizer::get_num_evaluations | ( | ) | const [inline, inherited] |
Return the total number of times the function was evaluated by the last minimization.
Definition at line 95 of file vnl_nonlinear_minimizer.h.
int vnl_nonlinear_minimizer::get_num_iterations | ( | ) | const [inline, inherited] |
Return the number of {iterations} in the last minimization.
Each iteration may have comprised several function evaluations.
Definition at line 99 of file vnl_nonlinear_minimizer.h.
double vnl_lbfgsb::get_projected_gradient_tolerance | ( | ) | const [inline] |
Get the projected gradient tolerance.
Definition at line 103 of file vnl_lbfgsb.h.
double vnl_nonlinear_minimizer::get_start_error | ( | ) | const [inline, inherited] |
Return the error of the function when it was evaluated at the start point of the last minimization.
For minimizers driven by a vnl_least_squares_function (Levenberg-Marquardt) this is usually the RMS error. For those driven by a vnl_cost_function (CG, LBFGS, Amoeba) it is simply the value of the vnl_cost_function at the start (usually the sum of squared residuals).
Definition at line 89 of file vnl_nonlinear_minimizer.h.
bool vnl_nonlinear_minimizer::get_trace | ( | ) | const [inline, inherited] |
Definition at line 74 of file vnl_nonlinear_minimizer.h.
void vnl_lbfgsb::get_upper_bound | ( | vnl_vector< double > & | u | ) | const [inline] |
Get the upper bounds for all variables.
Definition at line 71 of file vnl_lbfgsb.h.
bool vnl_nonlinear_minimizer::get_verbose | ( | ) | const [inline, inherited] |
Definition at line 78 of file vnl_nonlinear_minimizer.h.
double vnl_nonlinear_minimizer::get_x_tolerance | ( | ) | const [inline, inherited] |
Definition at line 56 of file vnl_nonlinear_minimizer.h.
void vnl_lbfgsb::init_parameters | ( | ) | [private] |
Definition at line 31 of file vnl_lbfgsb.cxx.
vcl_string vnl_nonlinear_minimizer::is_a | ( | ) | const [virtual, inherited] |
Return the name of the class.
Used by polymorphic IO
Definition at line 75 of file vnl_nonlinear_minimizer.cxx.
bool vnl_nonlinear_minimizer::is_class | ( | vcl_string const & | s | ) | const [virtual, inherited] |
Return true if the name of the class matches the argument.
Used by polymorphic IO
Definition at line 83 of file vnl_nonlinear_minimizer.cxx.
bool vnl_lbfgsb::minimize | ( | vnl_vector< double > & | x | ) |
Find a minimum in the feasible region given an initial guess.
Returns true if a minimum is found and false for failure.
Definition at line 42 of file vnl_lbfgsb.cxx.
bool vnl_nonlinear_minimizer::obj_value_reduced | ( | ) | [inline, inherited] |
Whether the error reduced in the last minimization.
Definition at line 118 of file vnl_nonlinear_minimizer.h.
void vnl_nonlinear_minimizer::report_eval | ( | double | f | ) | [protected, inherited] |
Called by derived classes after each function evaluation.
Definition at line 50 of file vnl_nonlinear_minimizer.cxx.
bool vnl_nonlinear_minimizer::report_iter | ( | ) | [protected, virtual, inherited] |
Called by derived classes after each iteration.
When true is returned, minimizer should stop with code FAILED_USER_REQUEST. Derived classes can redefine this function to make the optimizer stop when a condition is satisfied.
Definition at line 63 of file vnl_nonlinear_minimizer.cxx.
void vnl_nonlinear_minimizer::reset | ( | ) | [protected, inherited] |
Definition at line 41 of file vnl_nonlinear_minimizer.cxx.
void vnl_lbfgsb::set_bound_selection | ( | vnl_vector< long > const & | nbd | ) | [inline] |
Set the bounds to be enforced on each variable.
The argument should have one entry per unknown. Each entry may have one of these values: 0 - variable is not constrained 1 - variable has only a lower bound 2 - variable has both lower and upper bounds 3 - variable has only an upper bound
Definition at line 45 of file vnl_lbfgsb.h.
void vnl_nonlinear_minimizer::set_check_derivatives | ( | int | cd | ) | [inline, inherited] |
Set check_derivatives flag. Negative values may mean fewer checks.
Definition at line 81 of file vnl_nonlinear_minimizer.h.
void vnl_lbfgsb::set_cost_function_convergence_factor | ( | double | factor | ) | [inline] |
Set the cost function convergence factor.
When an iteration changes the function value by an amount smaller than this factor times the machine epsilon (scaled by function magnitude) convergence is assumed. The default value is 1e+7.
Definition at line 88 of file vnl_lbfgsb.h.
void vnl_nonlinear_minimizer::set_epsilon_function | ( | double | v | ) | [inline, inherited] |
Set the step length for FD Jacobian.
Be aware that set_x_tolerance will reset this to xtol * 0.001. The default is 1e-11.
Definition at line 69 of file vnl_nonlinear_minimizer.h.
void vnl_nonlinear_minimizer::set_f_tolerance | ( | double | v | ) | [inline, inherited] |
Set the convergence tolerance on F (sum of squared residuals).
When the differences in successive RMS errors is less than this, the routine terminates. So this is effectively the desired precision of your minimization. Setting it too low wastes time, too high might cause early convergence. The default of 1e-9 is on the safe side, but if speed is an issue, you can try raising it.
Definition at line 45 of file vnl_nonlinear_minimizer.h.
void vnl_nonlinear_minimizer::set_g_tolerance | ( | double | v | ) | [inline, inherited] |
Set the convergence tolerance on Grad(F)' * F.
Definition at line 59 of file vnl_nonlinear_minimizer.h.
void vnl_lbfgsb::set_lower_bound | ( | vnl_vector< double > const & | l | ) | [inline] |
Set the lower bounds for all variables.
The argument should have one entry per unknown. The lower bound is used only if the corresponding entry in the bound selection vector is set to 1 or 2.
Definition at line 56 of file vnl_lbfgsb.h.
void vnl_nonlinear_minimizer::set_max_function_evals | ( | int | v | ) | [inline, inherited] |
Set the termination maximum number of iterations.
Definition at line 63 of file vnl_nonlinear_minimizer.h.
void vnl_lbfgsb::set_max_variable_metric_corrections | ( | long | m | ) | [inline] |
Set the maximum number of variable metric corrections.
This is used to determine the size of the limited-memory matrix. The default value is 5.
Definition at line 77 of file vnl_lbfgsb.h.
void vnl_lbfgsb::set_projected_gradient_tolerance | ( | double | tol | ) | [inline] |
Set the projected gradient tolerance.
When the projected gradient vector has no component larger than the given value convergence is assumed. The default value is 1e-5.
Definition at line 99 of file vnl_lbfgsb.h.
void vnl_nonlinear_minimizer::set_trace | ( | bool | on | ) | [inline, inherited] |
Turn on per-iteration printouts.
Definition at line 73 of file vnl_nonlinear_minimizer.h.
void vnl_lbfgsb::set_upper_bound | ( | vnl_vector< double > const & | u | ) | [inline] |
Set the upper bounds for all variables.
The argument should have one entry per unknown. The upper bound is used only if the corresponding entry in the bound selection vector is set to 2 or 3.
Definition at line 67 of file vnl_lbfgsb.h.
void vnl_nonlinear_minimizer::set_verbose | ( | bool | verb | ) | [inline, inherited] |
Set verbose flag.
Definition at line 77 of file vnl_nonlinear_minimizer.h.
void vnl_nonlinear_minimizer::set_x_tolerance | ( | double | v | ) | [inline, inherited] |
Set the convergence tolerance on X.
When the length of the steps taken in X are about this long, the routine terminates. The default is 1e-8, which should work for many problems, but if you can get away with 1e-4, say, minimizations will be much quicker.
Definition at line 52 of file vnl_nonlinear_minimizer.h.
vnl_vector<long> vnl_lbfgsb::bound_selection_ [protected] |
Definition at line 114 of file vnl_lbfgsb.h.
int vnl_nonlinear_minimizer::check_derivatives_ [protected, inherited] |
Definition at line 153 of file vnl_nonlinear_minimizer.h.
double vnl_lbfgsb::convergence_factor_ [protected] |
Definition at line 116 of file vnl_lbfgsb.h.
double vnl_nonlinear_minimizer::end_error_ [protected, inherited] |
Definition at line 147 of file vnl_nonlinear_minimizer.h.
double vnl_nonlinear_minimizer::epsfcn [protected, inherited] |
Step length for FD Jacobian.
Definition at line 141 of file vnl_nonlinear_minimizer.h.
vnl_cost_function* vnl_lbfgsb::f_ [private] |
Definition at line 122 of file vnl_lbfgsb.h.
ReturnCodes vnl_nonlinear_minimizer::failure_code_ [protected, inherited] |
Definition at line 154 of file vnl_nonlinear_minimizer.h.
double vnl_nonlinear_minimizer::ftol [protected, inherited] |
Termination tolerance on F (sum of squared residuals)
Definition at line 139 of file vnl_nonlinear_minimizer.h.
double vnl_nonlinear_minimizer::gtol [protected, inherited] |
Termination tolerance on Grad(F)' * F = 0.
Definition at line 140 of file vnl_nonlinear_minimizer.h.
double vnl_lbfgsb::inf_norm_projected_gradient_ [protected] |
Definition at line 118 of file vnl_lbfgsb.h.
vnl_vector<double> vnl_lbfgsb::lower_bound_ [protected] |
Definition at line 112 of file vnl_lbfgsb.h.
long vnl_lbfgsb::max_corrections_ [protected] |
Definition at line 115 of file vnl_lbfgsb.h.
long vnl_nonlinear_minimizer::maxfev [protected, inherited] |
Termination maximum number of iterations.
Definition at line 138 of file vnl_nonlinear_minimizer.h.
long vnl_nonlinear_minimizer::num_evaluations_ [protected, inherited] |
Definition at line 145 of file vnl_nonlinear_minimizer.h.
unsigned vnl_nonlinear_minimizer::num_iterations_ [protected, inherited] |
Definition at line 144 of file vnl_nonlinear_minimizer.h.
double vnl_lbfgsb::projected_gradient_tolerance_ [protected] |
Definition at line 117 of file vnl_lbfgsb.h.
double vnl_nonlinear_minimizer::start_error_ [protected, inherited] |
Definition at line 146 of file vnl_nonlinear_minimizer.h.
bool vnl_nonlinear_minimizer::trace [protected, inherited] |
Definition at line 149 of file vnl_nonlinear_minimizer.h.
vnl_vector<double> vnl_lbfgsb::upper_bound_ [protected] |
Definition at line 113 of file vnl_lbfgsb.h.
bool vnl_nonlinear_minimizer::verbose_ [protected, inherited] |
Definition at line 152 of file vnl_nonlinear_minimizer.h.
double vnl_nonlinear_minimizer::xtol [protected, inherited] |
Termination tolerance on X (solution vector)
Definition at line 137 of file vnl_nonlinear_minimizer.h.