#include <LBFGSBT.hh>
Inheritance diagram for RVLUmin::LBFGSBT< Scalar >:
Public Member Functions | |
LBFGSBT (Functional< Scalar > const &f, Vector< Scalar > &x, Scalar _ihs, int _mud, int _maxsamp, bool _disp, Scalar _sl1, Scalar _eta1, Scalar _eta2, Scalar _gamma1, Scalar _gamma2, Scalar _maxfrac, Scalar _minsteptol, int _maxits, Scalar _agradtol, Scalar _rgradtol, ostream &_str=cout) | |
constructor, first form: | |
LBFGSBT (Functional< Scalar > const &f, Vector< Scalar > &x, Table const &t, ostream &_str=cout) | |
constructor, second form - scalar arguments passed in Table. | |
int | getCount () |
void | run () |
~LBFGSBT () | |
FunctionalEvaluation< Scalar > const & | getFunctionalEvaluation () const |
supplied to provide access to any intermediate data that a subclass of Functional may make available. |
For details of the LBFGS algorithm, see the paper
"Updating Quasi-Newton Matrices with Limited Storage" by Jorge Nocedal, Math. of Computation, Vol. 35, no. 151, p.p. 773--782.
Approximates solution to unconstrained optimization problem
via generalized secant update
is a limited-memory secant approximation to the inverse Hessian of
, parametrized by maximum rank.
is a step length.
Note that this problem setting makes sense only for functions taking real values. Accordingly, the implementation includes a compile-time check that the Scalar template parameter designates a real field (i.e. double or float).
This implementation globalizes convergence to a local min via a geometric backtracking linesearch method, impemented in RVLUmin::BacktrackingLineSearchAlg. Line search methods are described in Nocedal and Wright, Numerical Optimization, Springer 1999. For additional documentation, see RVLUmin::BacktrackingLineSearchAlg docs.
Structure and function: Data members of three types combine to implement LBFGS:
Usage: initialize solution vector (constructor argument x) externally; construct LBFGS object; call LBFGSBT::run(). On return, x has been updated to estimated solution.
Parameters for LBFGS iteration:
NOTES:
Parameters for backtracking line search (for detailed description and notes, see docs for RVLUmin::BacktrackingLineSearchAlg):
Typical use case: see functional test source.
Definition at line 141 of file LBFGSBT.hh.
RVLUmin::LBFGSBT< Scalar >::LBFGSBT | ( | Functional< Scalar > const & | f, | |
Vector< Scalar > & | x, | |||
Scalar | _ihs, | |||
int | _mud, | |||
int | _maxsamp, | |||
bool | _disp, | |||
Scalar | _sl1, | |||
Scalar | _eta1, | |||
Scalar | _eta2, | |||
Scalar | _gamma1, | |||
Scalar | _gamma2, | |||
Scalar | _maxfrac, | |||
Scalar | _minsteptol, | |||
int | _maxits, | |||
Scalar | _agradtol, | |||
Scalar | _rgradtol, | |||
ostream & | _str = cout | |||
) |
constructor, first form:
parameters:
f | - function to be minimized (RVL::Functional) | |
x | - solution RVL::Vector - initial guess on call, estimated solution on return | |
_ihs | - inverse Hessian scale - overall scale factor, so initial Hessian is this Scalar multiple of identity operator | |
_maxits | - max number of LBFGS iterations | |
_mud | - max stored BFGS updates - stored inverse Hessian approximation has this rank (at most) | |
_maxsamp | - max number of steps permitted in each line search | |
_disp | - verbosity flag - false = no output, true = function value, gradient norm at each iteration, report of line search | |
_sl1 | - first line search step | |
_eta1 | - lower G-A parameter | |
_eta2 | - upper G-A parameter | |
_gamma1 | - line search backtrack factor | |
_gamma2 | - line search extrapolation factor ("internal doubling") | |
_maxfrac | - fraction of max step to boundary permitted | |
_agradtol | - stopping tolerance for gradient norm, absolute | |
_rgradtol | - stopping tolerance for gradient norm, relative to initial gradient norm | |
_str | - verbose output unit |
Definition at line 198 of file LBFGSBT.hh.
RVLUmin::LBFGSBT< Scalar >::LBFGSBT | ( | Functional< Scalar > const & | f, | |
Vector< Scalar > & | x, | |||
Table const & | t, | |||
ostream & | _str = cout | |||
) |
constructor, second form - scalar arguments passed in Table.
Definition at line 236 of file LBFGSBT.hh.
RVLUmin::LBFGSBT< Scalar >::~LBFGSBT | ( | ) |
Definition at line 278 of file LBFGSBT.hh.
int RVLUmin::LBFGSBT< Scalar >::getCount | ( | ) |
Definition at line 260 of file LBFGSBT.hh.
void RVLUmin::LBFGSBT< Scalar >::run | ( | ) | [virtual] |
Implements RVLAlg::Algorithm.
Definition at line 262 of file LBFGSBT.hh.
References RVLAlg::LoopAlg::run().
FunctionalEvaluation<Scalar> const& RVLUmin::LBFGSBT< Scalar >::getFunctionalEvaluation | ( | ) | const |
supplied to provide access to any intermediate data that a subclass of Functional may make available.
Can extract const reference to current Functional, as constructed by FunctionalEvaluation, via the getFcnl() method. A cast will be required to extract any further subclass attributes.
Definition at line 285 of file LBFGSBT.hh.