HCL_UMin_lbfgs_d implements the limited memory BFGS algorithm for unconstrained minimization
![]() | HCL_UMin_lbfgs_d ( HCL_LineSearch_d * linesearch = NULL, char * fname = NULL ) Usual constructor |
![]() | Parameters () const Access to parameter table |
![]() | LastEval () const Returns a reference to the last evaluation object. |
![]() | SetScaling ( HCL_LinearOp_d * S, HCL_LinearSolver_d * lsolver ) SetScaling defines a new inner product in terms of a symmetric, positive definite operator S: <x,y> = (x,Sy) |
![]() | UnSetScaling () UnSetScaling returns the inner product to the default. |
![]() | Minimize ( HCL_Functional_d & f, HCL_Vector_d & x ) Minimize attempts to find a local minimizer of the functional f, using x as a starting guess |
![]() | Write ( ostream & str ) const Prints description of the object |
enum Return values for the method Minimize.
HCL_UMin_lbfgs_d implements the limited memory BFGS algorithm for unconstrained minimization. This algorithm is due to Nocedal (see, for example, D. C. Liu and J. Nocedal, ``On the limited memory BFGS method for large scale optimization methods'' Mathematical Programming 45 (1989), pp. 503-528).The minimization algorithm is based on the limited memory BFGS inverse Hessian approximation (represented by a class, but hidden from the user), and on a line search algorithm.
The line search is represented by an abstract base class, HCL_LineSearch_d; this allows the algorithm to be executed with different choices of the line search algorithm.
The purpose of the algorithm is to take a functional with gradient and a starting guess in the domain of the functional, and to produce a local minimizer via a descent algorithm. If desired, the calling routine may provide a (symmetric positive definite) linear operator (and a corresponding linear solver, if needed) to be used to change the inner product on the solution space. If these are provided, it is assumed that the functional computes the gradient with respect to the default inner product (i.e. the one provided by the vector class).
The primary methods of this class are:
- Minimize, which performs the minimization;
- Parameters,which provides a means of accessing or changing algorithmic parameters which control the iteration. These parameters are typically set initially by passing a file name to the constructor; this file contains parameter values. Any parameters not specified for the constructor are assigned default values. See the documentation of the parameters for more information.
- LastEval, which provides access to the "evaluation" object at the final point.
Use of this minimizer typically involves the following steps:
- Construct functional with gradient, i.e. an object of a class derived from HCL_Functional_d;
- Construct a starting vector in the domain of the functional;
- Construct a line search object, i.e. an object of a class derived from HCL_LineSearch_d;
- Construct the minimizer by passing the constructor the line search object and a parameter file;
- Call the Minimize method;
- Manipulate the value and/or gradient at the approximate minimizer through the LastEval method.
Here's an example:
MyFcnl f; // MyFcnl must be derived from HCL\_Functional_d MyVector x( "x0" ); // Assume MyVector has a constructor which //reads from a file HCL_LineSearch_DS_d lsearch( "lsearch.dat" ); // Dennis-Schnabel // line search HCL_UMin_lbfgs_d umin( "umin.dat",&lsearch ); // Parameters read // from "umin.dat" umin.Minimize( f,x ); // Search for local minimum cout << "Final value of f: " << umin.LastEval().ValueRef() << endl; cout << "Final gradient norm: " << umin.LastEval().GradientRef().Norm() << endl;(If the display flag is turned on, the final function value and gradient norm will be displayed anyway, so the last two lines are not necessary. But they illustrate that the last function value and gradient are stored in case they are needed.)
double Typf
double TypxNorm
double GradTol
double MinStep
double MaxStep
int CscMaxLimit
int DispFlag
int DumpFlag
char DumpFile[81]
int DispPrecision
int DumpPrecision
int TraceSteps
char StepFile[81]
double InvHessianScale
int MaxUpdates
Table& Parameters() const
virtual HCL_EvaluateFunctional_d& LastEval() const
virtual void SetScaling( HCL_LinearOp_d * S, HCL_LinearSolver_d * lsolver )
virtual void UnSetScaling()
int Minimize( HCL_Functional_d & f, HCL_Vector_d & x )
virtual ostream& Write( ostream & str ) const
alphabetic index hierarchy of classes
this page has been generated automatically by doc++
(c)opyright by Malte Zöckler, Roland Wunderling
contact: doc++@zib.de