Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
vnl_lbfgsb Class Reference

Limited memory Broyden Fletcher Goldfarb Shannon minimization with constraints. More...

#include <vnl_lbfgsb.h>

Inheritance diagram for vnl_lbfgsb:
Inheritance graph
[legend]

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_cost_function &f)
 
bool minimize (vnl_vector< double > &x)
 Find a minimum in the feasible region given an initial guess. More...
 
void set_bound_selection (vnl_vector< long > const &nbd)
 Set the bounds to be enforced on each variable. More...
 
void get_bound_selection (vnl_vector< long > &nbd) const
 Get the bounds currently enforced on each variable. More...
 
void set_lower_bound (vnl_vector< double > const &l)
 Set the lower bounds for all variables. More...
 
void get_lower_bound (vnl_vector< double > &l) const
 Get the lower bounds for all variables. More...
 
void set_upper_bound (vnl_vector< double > const &u)
 Set the upper bounds for all variables. More...
 
void get_upper_bound (vnl_vector< double > &u) const
 Get the upper bounds for all variables. More...
 
void set_max_variable_metric_corrections (long m)
 Set the maximum number of variable metric corrections. More...
 
long get_max_variable_metric_corrections () const
 Get the maximum number of variable metric corrections. More...
 
void set_cost_function_convergence_factor (double factor)
 Set the cost function convergence factor. More...
 
double get_cost_function_convergence_factor () const
 Get the cost function convergence factor. More...
 
void set_projected_gradient_tolerance (double tol)
 Set the projected gradient tolerance. More...
 
double get_projected_gradient_tolerance () const
 Get the projected gradient tolerance. More...
 
double get_inf_norm_projected_gradient () const
 Get the current infinity norm of the projected gradient. More...
 
void set_f_tolerance (double v)
 Set the convergence tolerance on F (sum of squared residuals). More...
 
double get_f_tolerance () const
 
void set_x_tolerance (double v)
 Set the convergence tolerance on X. More...
 
double get_x_tolerance () const
 
void set_g_tolerance (double v)
 Set the convergence tolerance on Grad(F)' * F. More...
 
double get_g_tolerance () const
 
void set_max_function_evals (int v)
 Set the termination maximum number of iterations. More...
 
int get_max_function_evals () const
 
void set_epsilon_function (double v)
 Set the step length for FD Jacobian. More...
 
double get_epsilon_function () const
 
void set_trace (bool on)
 Turn on per-iteration printouts. More...
 
bool get_trace () const
 
void set_verbose (bool verb)
 Set verbose flag. More...
 
bool get_verbose () const
 
void set_check_derivatives (int cd)
 Set check_derivatives flag. Negative values may mean fewer checks. More...
 
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. More...
 
double get_end_error () const
 Return the best error that was achieved by the last minimization, corresponding to the returned x. More...
 
int get_num_evaluations () const
 Return the total number of times the function was evaluated by the last minimization. More...
 
int get_num_iterations () const
 Return the number of {iterations} in the last minimization. More...
 
bool obj_value_reduced ()
 Whether the error reduced in the last minimization. More...
 
virtual vnl_matrix< double > const & get_covariance ()
 Return the covariance of the estimate at the end. More...
 
virtual std::string is_a () const
 Return the name of the class. More...
 
virtual bool is_class (std::string const &s) const
 Return true if the name of the class matches the argument. More...
 
ReturnCodes get_failure_code () const
 Return the failure code of the last minimization. More...
 

Protected Member Functions

void reset ()
 
void report_eval (double f)
 Called by derived classes after each function evaluation. More...
 
virtual bool report_iter ()
 Called by derived classes after each iteration. More...
 

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) More...
 
long maxfev
 Termination maximum number of iterations. More...
 
double ftol
 Termination tolerance on F (sum of squared residuals) More...
 
double gtol
 Termination tolerance on Grad(F)' * F = 0. More...
 
double epsfcn
 Step length for FD Jacobian. More...
 
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

 vnl_lbfgsb ()=delete
 
void init_parameters ()
 

Private Attributes

vnl_cost_functionf_
 

Detailed Description

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 26 of file vnl_lbfgsb.h.

Member Enumeration Documentation

◆ ReturnCodes

Some generic return codes that apply to all minimizers.

Enumerator
ERROR_FAILURE 
ERROR_DODGY_INPUT 
CONVERGED_FTOL 
CONVERGED_XTOL 
CONVERGED_XFTOL 
CONVERGED_GTOL 
FAILED_TOO_MANY_ITERATIONS 
TOO_MANY_ITERATIONS 
FAILED_FTOL_TOO_SMALL 
FAILED_XTOL_TOO_SMALL 
FAILED_GTOL_TOO_SMALL 
FAILED_USER_REQUEST 

Definition at line 102 of file vnl_nonlinear_minimizer.h.

Constructor & Destructor Documentation

◆ vnl_lbfgsb() [1/2]

vnl_lbfgsb::vnl_lbfgsb ( vnl_cost_function f)

Definition at line 16 of file vnl_lbfgsb.cxx.

◆ vnl_lbfgsb() [2/2]

vnl_lbfgsb::vnl_lbfgsb ( )
privatedelete

Member Function Documentation

◆ get_bound_selection()

void vnl_lbfgsb::get_bound_selection ( vnl_vector< long > &  nbd) const
inline

Get the bounds currently enforced on each variable.

Definition at line 46 of file vnl_lbfgsb.h.

◆ get_check_derivatives()

int vnl_nonlinear_minimizer::get_check_derivatives ( ) const
inlineinherited

Definition at line 82 of file vnl_nonlinear_minimizer.h.

◆ get_cost_function_convergence_factor()

double vnl_lbfgsb::get_cost_function_convergence_factor ( ) const
inline

Get the cost function convergence factor.

Definition at line 89 of file vnl_lbfgsb.h.

◆ get_covariance()

vnl_matrix< double > const & vnl_nonlinear_minimizer::get_covariance ( )
virtualinherited

Return the covariance of the estimate at the end.

Definition at line 30 of file vnl_nonlinear_minimizer.cxx.

◆ get_end_error()

double vnl_nonlinear_minimizer::get_end_error ( ) const
inlineinherited

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.

◆ get_epsilon_function()

double vnl_nonlinear_minimizer::get_epsilon_function ( ) const
inlineinherited

Definition at line 70 of file vnl_nonlinear_minimizer.h.

◆ get_f_tolerance()

double vnl_nonlinear_minimizer::get_f_tolerance ( ) const
inlineinherited

Definition at line 46 of file vnl_nonlinear_minimizer.h.

◆ get_failure_code()

ReturnCodes vnl_nonlinear_minimizer::get_failure_code ( ) const
inlineinherited

Return the failure code of the last minimization.

Definition at line 132 of file vnl_nonlinear_minimizer.h.

◆ get_g_tolerance()

double vnl_nonlinear_minimizer::get_g_tolerance ( ) const
inlineinherited

Definition at line 60 of file vnl_nonlinear_minimizer.h.

◆ get_inf_norm_projected_gradient()

double vnl_lbfgsb::get_inf_norm_projected_gradient ( ) const
inline

Get the current infinity norm of the projected gradient.

Definition at line 104 of file vnl_lbfgsb.h.

◆ get_lower_bound()

void vnl_lbfgsb::get_lower_bound ( vnl_vector< double > &  l) const
inline

Get the lower bounds for all variables.

Definition at line 57 of file vnl_lbfgsb.h.

◆ get_max_function_evals()

int vnl_nonlinear_minimizer::get_max_function_evals ( ) const
inlineinherited

Definition at line 64 of file vnl_nonlinear_minimizer.h.

◆ get_max_variable_metric_corrections()

long vnl_lbfgsb::get_max_variable_metric_corrections ( ) const
inline

Get the maximum number of variable metric corrections.

Definition at line 78 of file vnl_lbfgsb.h.

◆ get_num_evaluations()

int vnl_nonlinear_minimizer::get_num_evaluations ( ) const
inlineinherited

Return the total number of times the function was evaluated by the last minimization.

Definition at line 95 of file vnl_nonlinear_minimizer.h.

◆ get_num_iterations()

int vnl_nonlinear_minimizer::get_num_iterations ( ) const
inlineinherited

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.

◆ get_projected_gradient_tolerance()

double vnl_lbfgsb::get_projected_gradient_tolerance ( ) const
inline

Get the projected gradient tolerance.

Definition at line 100 of file vnl_lbfgsb.h.

◆ get_start_error()

double vnl_nonlinear_minimizer::get_start_error ( ) const
inlineinherited

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.

◆ get_trace()

bool vnl_nonlinear_minimizer::get_trace ( ) const
inlineinherited

Definition at line 74 of file vnl_nonlinear_minimizer.h.

◆ get_upper_bound()

void vnl_lbfgsb::get_upper_bound ( vnl_vector< double > &  u) const
inline

Get the upper bounds for all variables.

Definition at line 68 of file vnl_lbfgsb.h.

◆ get_verbose()

bool vnl_nonlinear_minimizer::get_verbose ( ) const
inlineinherited

Definition at line 78 of file vnl_nonlinear_minimizer.h.

◆ get_x_tolerance()

double vnl_nonlinear_minimizer::get_x_tolerance ( ) const
inlineinherited

Definition at line 56 of file vnl_nonlinear_minimizer.h.

◆ init_parameters()

void vnl_lbfgsb::init_parameters ( )
private

Definition at line 22 of file vnl_lbfgsb.cxx.

◆ is_a()

std::string vnl_nonlinear_minimizer::is_a ( ) const
virtualinherited

Return the name of the class.

Used by polymorphic IO

Definition at line 70 of file vnl_nonlinear_minimizer.cxx.

◆ is_class()

bool vnl_nonlinear_minimizer::is_class ( std::string const &  s) const
virtualinherited

Return true if the name of the class matches the argument.

Used by polymorphic IO

Definition at line 78 of file vnl_nonlinear_minimizer.cxx.

◆ minimize()

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 33 of file vnl_lbfgsb.cxx.

◆ obj_value_reduced()

bool vnl_nonlinear_minimizer::obj_value_reduced ( )
inlineinherited

Whether the error reduced in the last minimization.

Definition at line 118 of file vnl_nonlinear_minimizer.h.

◆ report_eval()

void vnl_nonlinear_minimizer::report_eval ( double  f)
protectedinherited

Called by derived classes after each function evaluation.

Definition at line 45 of file vnl_nonlinear_minimizer.cxx.

◆ report_iter()

bool vnl_nonlinear_minimizer::report_iter ( )
protectedvirtualinherited

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 58 of file vnl_nonlinear_minimizer.cxx.

◆ reset()

void vnl_nonlinear_minimizer::reset ( )
protectedinherited

Definition at line 36 of file vnl_nonlinear_minimizer.cxx.

◆ set_bound_selection()

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 42 of file vnl_lbfgsb.h.

◆ set_check_derivatives()

void vnl_nonlinear_minimizer::set_check_derivatives ( int  cd)
inlineinherited

Set check_derivatives flag. Negative values may mean fewer checks.

Definition at line 81 of file vnl_nonlinear_minimizer.h.

◆ set_cost_function_convergence_factor()

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 85 of file vnl_lbfgsb.h.

◆ set_epsilon_function()

void vnl_nonlinear_minimizer::set_epsilon_function ( double  v)
inlineinherited

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.

◆ set_f_tolerance()

void vnl_nonlinear_minimizer::set_f_tolerance ( double  v)
inlineinherited

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.

◆ set_g_tolerance()

void vnl_nonlinear_minimizer::set_g_tolerance ( double  v)
inlineinherited

Set the convergence tolerance on Grad(F)' * F.

Definition at line 59 of file vnl_nonlinear_minimizer.h.

◆ set_lower_bound()

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 53 of file vnl_lbfgsb.h.

◆ set_max_function_evals()

void vnl_nonlinear_minimizer::set_max_function_evals ( int  v)
inlineinherited

Set the termination maximum number of iterations.

Definition at line 63 of file vnl_nonlinear_minimizer.h.

◆ set_max_variable_metric_corrections()

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 74 of file vnl_lbfgsb.h.

◆ set_projected_gradient_tolerance()

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 96 of file vnl_lbfgsb.h.

◆ set_trace()

void vnl_nonlinear_minimizer::set_trace ( bool  on)
inlineinherited

Turn on per-iteration printouts.

Definition at line 73 of file vnl_nonlinear_minimizer.h.

◆ set_upper_bound()

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 64 of file vnl_lbfgsb.h.

◆ set_verbose()

void vnl_nonlinear_minimizer::set_verbose ( bool  verb)
inlineinherited

Set verbose flag.

Definition at line 77 of file vnl_nonlinear_minimizer.h.

◆ set_x_tolerance()

void vnl_nonlinear_minimizer::set_x_tolerance ( double  v)
inlineinherited

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.

Member Data Documentation

◆ bound_selection_

vnl_vector<long> vnl_lbfgsb::bound_selection_
protected

Definition at line 111 of file vnl_lbfgsb.h.

◆ check_derivatives_

int vnl_nonlinear_minimizer::check_derivatives_
protectedinherited

Definition at line 153 of file vnl_nonlinear_minimizer.h.

◆ convergence_factor_

double vnl_lbfgsb::convergence_factor_
protected

Definition at line 113 of file vnl_lbfgsb.h.

◆ end_error_

double vnl_nonlinear_minimizer::end_error_
protectedinherited

Definition at line 147 of file vnl_nonlinear_minimizer.h.

◆ epsfcn

double vnl_nonlinear_minimizer::epsfcn
protectedinherited

Step length for FD Jacobian.

Definition at line 141 of file vnl_nonlinear_minimizer.h.

◆ f_

vnl_cost_function* vnl_lbfgsb::f_
private

Definition at line 120 of file vnl_lbfgsb.h.

◆ failure_code_

ReturnCodes vnl_nonlinear_minimizer::failure_code_
protectedinherited

Definition at line 154 of file vnl_nonlinear_minimizer.h.

◆ ftol

double vnl_nonlinear_minimizer::ftol
protectedinherited

Termination tolerance on F (sum of squared residuals)

Definition at line 139 of file vnl_nonlinear_minimizer.h.

◆ gtol

double vnl_nonlinear_minimizer::gtol
protectedinherited

Termination tolerance on Grad(F)' * F = 0.

Definition at line 140 of file vnl_nonlinear_minimizer.h.

◆ inf_norm_projected_gradient_

double vnl_lbfgsb::inf_norm_projected_gradient_
protected

Definition at line 115 of file vnl_lbfgsb.h.

◆ lower_bound_

vnl_vector<double> vnl_lbfgsb::lower_bound_
protected

Definition at line 109 of file vnl_lbfgsb.h.

◆ max_corrections_

long vnl_lbfgsb::max_corrections_
protected

Definition at line 112 of file vnl_lbfgsb.h.

◆ maxfev

long vnl_nonlinear_minimizer::maxfev
protectedinherited

Termination maximum number of iterations.

Definition at line 138 of file vnl_nonlinear_minimizer.h.

◆ num_evaluations_

long vnl_nonlinear_minimizer::num_evaluations_
protectedinherited

Definition at line 145 of file vnl_nonlinear_minimizer.h.

◆ num_iterations_

unsigned vnl_nonlinear_minimizer::num_iterations_
protectedinherited

Definition at line 144 of file vnl_nonlinear_minimizer.h.

◆ projected_gradient_tolerance_

double vnl_lbfgsb::projected_gradient_tolerance_
protected

Definition at line 114 of file vnl_lbfgsb.h.

◆ start_error_

double vnl_nonlinear_minimizer::start_error_
protectedinherited

Definition at line 146 of file vnl_nonlinear_minimizer.h.

◆ trace

bool vnl_nonlinear_minimizer::trace
protectedinherited

Definition at line 149 of file vnl_nonlinear_minimizer.h.

◆ upper_bound_

vnl_vector<double> vnl_lbfgsb::upper_bound_
protected

Definition at line 110 of file vnl_lbfgsb.h.

◆ verbose_

bool vnl_nonlinear_minimizer::verbose_
protectedinherited

Definition at line 152 of file vnl_nonlinear_minimizer.h.

◆ xtol

double vnl_nonlinear_minimizer::xtol
protectedinherited

Termination tolerance on X (solution vector)

Definition at line 137 of file vnl_nonlinear_minimizer.h.


The documentation for this class was generated from the following files: