class HCL_lmbfgsOp1_d : public HCL_LinearOp_d

HCL_lmbfgsOp1_d implements the limited memory BFGS approximation to the inverse Hessian of a twice-differentiable function

Inheritance:


Public Methods

HCL_lmbfgsOp1_d ( HCL_ScaleLinearOp_d * h0, int maxnum, HCL_LinearOp_d * Pin = NULL, HCL_LinearSolver_d * ls = NULL )
Usual constructor
HCL_VectorSpace_d& Domain () const
Domain space access.
HCL_VectorSpace_d& Range () const
Range space access.
double GetScale () const
Access to the scale, which is dynamically changed by the operator.
void Update ( const HCL_Vector_d & x, const HCL_Vector_d & xnext, const HCL_Vector_d & g, const HCL_Vector_d & gnext )
Update requires the current and next and the current and next gradient
void Reset ()
Reset sets the operator to the initial inverse Hessian approximation.
virtual void Image ( const HCL_Vector_d & x, HCL_Vector_d & y ) const
Image computes the image of the operator on x, giving y.
virtual void AdjImage ( const HCL_Vector_d & y, HCL_Vector_d & x ) const
AdjImage computes the image of the adjoint on y, giving x.
virtual void InvImage (const HCL_Vector_d & y, HCL_Vector_d & x) const
InvImage computes the action of the inverse on y, giving x (not implemented)
virtual void InvAdjImage (const HCL_Vector_d & x, HCL_Vector_d & y) const
InvAdjImage computes the action of the inverse adjoint on x, giving y (not implemented)
virtual ostream& Write ( ostream & str ) const
Write prints out some useful information about the object.

Inherited from HCL_LinearOp_d:

Public Methods

int CheckAdj(int Display = 1, double tol = 1000 )
virtual void NormalImage( const HCL_Vector_d & x, HCL_Vector_d & z ) const
int CheckNormal( int display = 1, double tol = 100 )
virtual void ImageAdd(const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const
virtual void AdjImageAdd(const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const
virtual void NormalImageAdd(const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const
virtual void InvImageAdd(const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const
virtual void InvAdjImageAdd(const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const
virtual void ImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
virtual void AdjImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
virtual void NormalImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
virtual void InvImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
virtual void InvAdjImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const

Inherited from HCL_Base:

Public Methods

void IncCount() const
void DecCount() const
int Count() const

Documentation

HCL_lmbfgsOp1_d implements the limited memory BFGS approximation to the inverse Hessian of a twice-differentiable function. This approximation uses local changes to the gradient to gradually build up an estimate of the Hessian for use in nonlinear optimization problems.

For details of the 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.

Note that the operator is an approximation to the inverse Hessian, so the the Image method computes the quasi-Newton step.

The BFGS approximation is based on successive rank-one perturbations to an initial approximation; these rank-one perturbations can be represented as outer products. This class allows the user to provide a symmetric positive definite operator to define an alternate inner product, which then changes the definition of the outer product. In the context of an optimization problem, this is equivalent to implementing the algorithm in the alternate inner product.

HCL_lmbfgsOp1_d( HCL_ScaleLinearOp_d * h0, int maxnum, HCL_LinearOp_d * Pin = NULL, HCL_LinearSolver_d * ls = NULL )
Usual constructor. Needs a multiple of the identity to use for the initial inverse Hessian approximation, the maximum number of updates, and, optionally, an operator to change the inner product.

HCL_VectorSpace_d& Domain() const
Domain space access.

HCL_VectorSpace_d& Range() const
Range space access.

double GetScale() const
Access to the scale, which is dynamically changed by the operator.

void Update( const HCL_Vector_d & x, const HCL_Vector_d & xnext, const HCL_Vector_d & g, const HCL_Vector_d & gnext )
Update requires the current and next and the current and next gradient

void Reset()
Reset sets the operator to the initial inverse Hessian approximation.

virtual void Image( const HCL_Vector_d & x, HCL_Vector_d & y ) const
Image computes the image of the operator on x, giving y.

virtual void AdjImage( const HCL_Vector_d & y, HCL_Vector_d & x ) const
AdjImage computes the image of the adjoint on y, giving x.

virtual void InvImage(const HCL_Vector_d & y, HCL_Vector_d & x) const
InvImage computes the action of the inverse on y, giving x (not implemented)

virtual void InvAdjImage(const HCL_Vector_d & x, HCL_Vector_d & y) const
InvAdjImage computes the action of the inverse adjoint on x, giving y (not implemented)

virtual ostream& Write( ostream & str ) const
Write prints out some useful information about the object.


This class has no child classes.

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