go home Home | Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes
itk::QuasiNewtonLBFGSOptimizer Class Reference

#include <itkQuasiNewtonLBFGSOptimizer.h>

Inheritance diagram for itk::QuasiNewtonLBFGSOptimizer:
Inheritance graph
[legend]
Collaboration diagram for itk::QuasiNewtonLBFGSOptimizer:
Collaboration graph
[legend]

Public Types

typedef SmartPointer< const SelfConstPointer
typedef
Superclass::CostFunctionType 
CostFunctionType
typedef Superclass::DerivativeType DerivativeType
typedef Array< doubleDiagonalMatrixType
typedef
LineSearchOptimizerType::Pointer 
LineSearchOptimizerPointer
typedef LineSearchOptimizer LineSearchOptimizerType
typedef Superclass::MeasureType MeasureType
typedef Superclass::ParametersType ParametersType
typedef SmartPointer< SelfPointer
typedef Array< doubleRhoType
typedef
Superclass::ScaledCostFunctionType 
ScaledCostFunctionType
typedef Superclass::ScalesType ScalesType
typedef QuasiNewtonLBFGSOptimizer Self
enum  StopConditionType {
  MetricError, LineSearchError, MaximumNumberOfIterations, InvalidDiagonalMatrix,
  GradientMagnitudeTolerance, ZeroStep, Unknown
}
typedef std::vector
< ParametersType
SType
typedef
ScaledSingleValuedNonLinearOptimizer 
Superclass
typedef std::vector
< DerivativeType
YType

Public Member Functions

virtual const char * GetClassName () const
virtual const DerivativeTypeGetCurrentGradient ()
virtual unsigned long GetCurrentIteration () const
virtual double GetCurrentStepLength () const
virtual MeasureType GetCurrentValue () const
virtual double GetGradientMagnitudeTolerance () const
virtual bool GetInLineSearch () const
virtual LineSearchOptimizerTypeGetLineSearchOptimizer ()
virtual unsigned long GetMaximumNumberOfIterations () const
virtual unsigned int GetMemory () const
virtual const StopConditionTypeGetStopCondition ()
virtual void ResumeOptimization (void)
virtual void SetGradientMagnitudeTolerance (double _arg)
virtual void SetLineSearchOptimizer (LineSearchOptimizerType *_arg)
virtual void SetMaximumNumberOfIterations (unsigned long _arg)
virtual void SetMemory (unsigned int _arg)
virtual void StartOptimization (void)
virtual void StopOptimization (void)

Static Public Member Functions

static Pointer New ()

Protected Member Functions

virtual void ComputeDiagonalMatrix (DiagonalMatrixType &diag_H0)
virtual void ComputeSearchDirection (const DerivativeType &gradient, ParametersType &searchDir)
virtual void LineSearch (const ParametersType searchDir, double &step, ParametersType &x, MeasureType &f, DerivativeType &g)
void PrintSelf (std::ostream &os, Indent indent) const
 QuasiNewtonLBFGSOptimizer ()
virtual void SetInLineSearch (bool _arg)
virtual void StoreCurrentPoint (const ParametersType &step, const DerivativeType &grad_dif)
virtual bool TestConvergence (bool firstLineSearchDone)
virtual ~QuasiNewtonLBFGSOptimizer ()

Protected Attributes

unsigned int m_Bound
DerivativeType m_CurrentGradient
unsigned long m_CurrentIteration
double m_CurrentStepLength
MeasureType m_CurrentValue
bool m_InLineSearch
unsigned int m_Point
unsigned int m_PreviousPoint
RhoType m_Rho
SType m_S
bool m_Stop
StopConditionType m_StopCondition
YType m_Y

Private Member Functions

void operator= (const Self &)
 QuasiNewtonLBFGSOptimizer (const Self &)

Private Attributes

double m_GradientMagnitudeTolerance
LineSearchOptimizerPointer m_LineSearchOptimizer
unsigned long m_MaximumNumberOfIterations
unsigned int m_Memory

Detailed Description

ITK version of the lbfgs algorithm ...

This class is an ITK version of the netlib lbfgs_ function. It gives exactly the same results, if used in combination with the itk::MoreThuenteLineSearchOptimizer.

The optimizer solves the unconstrained minimization problem

\[ \min F(x), \quad x = ( x_1,x_2,\ldots,x_N ), \]

using the limited memory BFGS method. The routine is especially effective on problems involving a large number of variables. In a typical iteration of this method an approximation $H_k$ to the inverse of the Hessian is obtained by applying $M$ BFGS updates to a diagonal matrix $H_0$, using information from the previous $M$ steps. The user specifies the number $M$ (Memory), which determines the amount of storage required by the routine.

The algorithm is described in "On the limited memory BFGS method for large scale optimization", by D. Liu and J. Nocedal, Mathematical Programming B 45 (1989) 503-528.

The steplength is determined at each iteration by means of a line search routine. The itk::MoreThuenteLineSearchOptimizer works well.

Definition at line 54 of file itkQuasiNewtonLBFGSOptimizer.h.


Member Typedef Documentation

Definition at line 76 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 79 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 77 of file itkQuasiNewtonLBFGSOptimizer.h.

Reimplemented from itk::ScaledSingleValuedNonLinearOptimizer.

Definition at line 70 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 73 of file itkQuasiNewtonLBFGSOptimizer.h.

Reimplemented from itk::ScaledSingleValuedNonLinearOptimizer.

Definition at line 69 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 74 of file itkQuasiNewtonLBFGSOptimizer.h.

Reimplemented from itk::ScaledSingleValuedNonLinearOptimizer.

Definition at line 59 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 75 of file itkQuasiNewtonLBFGSOptimizer.h.


Member Enumeration Documentation

Enumerator:
MetricError 
LineSearchError 
MaximumNumberOfIterations 
InvalidDiagonalMatrix 
GradientMagnitudeTolerance 
ZeroStep 
Unknown 

Reimplemented in elastix::QuasiNewtonLBFGS< TElastix >.

Definition at line 81 of file itkQuasiNewtonLBFGSOptimizer.h.


Constructor & Destructor Documentation

virtual itk::QuasiNewtonLBFGSOptimizer::~QuasiNewtonLBFGSOptimizer ( ) [inline, protected, virtual]

Definition at line 128 of file itkQuasiNewtonLBFGSOptimizer.h.


Member Function Documentation

virtual void itk::QuasiNewtonLBFGSOptimizer::ComputeDiagonalMatrix ( DiagonalMatrixType diag_H0) [protected, virtual]

Compute H0

Override this method if not satisfied with the default choice.

virtual void itk::QuasiNewtonLBFGSOptimizer::ComputeSearchDirection ( const DerivativeType gradient,
ParametersType searchDir 
) [protected, virtual]

Compute -Hg

COMPUTE -H*G USING THE FORMULA GIVEN IN: Nocedal, J. 1980, "Updating quasi-Newton matrices with limited storage", Mathematics of Computation, Vol.24, No.151, pp. 773-782.

virtual const char* itk::QuasiNewtonLBFGSOptimizer::GetClassName ( ) const [virtual]
virtual unsigned long itk::QuasiNewtonLBFGSOptimizer::GetCurrentIteration ( ) const [virtual]

Get information about optimization process:

Setting: the mininum gradient magnitude.

The optimizer stops when: ||CurrentGradient|| < GradientMagnitudeTolerance * max(1, ||CurrentPosition||)

virtual unsigned long itk::QuasiNewtonLBFGSOptimizer::GetMaximumNumberOfIterations ( ) const [virtual]

Setting: the maximum number of iterations

virtual unsigned int itk::QuasiNewtonLBFGSOptimizer::GetMemory ( ) const [virtual]
virtual void itk::QuasiNewtonLBFGSOptimizer::LineSearch ( const ParametersType  searchDir,
double step,
ParametersType x,
MeasureType f,
DerivativeType g 
) [protected, virtual]

Perform a line search along the search direction. On calling, x, f, and g should contain the current position, the cost function value at this position, and the derivative. On return the step, x (new position), f (value at x), and g (derivative at x) are updated.

Reimplemented in elastix::QuasiNewtonLBFGS< TElastix >.

void itk::QuasiNewtonLBFGSOptimizer::operator= ( const Self ) [private]
void itk::QuasiNewtonLBFGSOptimizer::PrintSelf ( std::ostream &  os,
Indent  indent 
) const [inline, protected]

Reimplemented from itk::ScaledSingleValuedNonLinearOptimizer.

Definition at line 131 of file itkQuasiNewtonLBFGSOptimizer.h.

virtual void itk::QuasiNewtonLBFGSOptimizer::ResumeOptimization ( void  ) [virtual]
virtual void itk::QuasiNewtonLBFGSOptimizer::SetInLineSearch ( bool  _arg) [protected, virtual]

Setting: the line search optimizer

virtual void itk::QuasiNewtonLBFGSOptimizer::SetMaximumNumberOfIterations ( unsigned long  _arg) [virtual]
virtual void itk::QuasiNewtonLBFGSOptimizer::SetMemory ( unsigned int  _arg) [virtual]

Setting: the memory. The number of iterations that are used to estimate the Hessian. 5 by default. 0 results in (normalised) gradient descent search directions

virtual void itk::QuasiNewtonLBFGSOptimizer::StartOptimization ( void  ) [virtual]
virtual void itk::QuasiNewtonLBFGSOptimizer::StopOptimization ( void  ) [virtual]
virtual void itk::QuasiNewtonLBFGSOptimizer::StoreCurrentPoint ( const ParametersType step,
const DerivativeType grad_dif 
) [protected, virtual]

Store s = x_k - x_k-1 and y = g_k - g_k-1 in m_S and m_Y, and store 1/(ys) in m_Rho.

virtual bool itk::QuasiNewtonLBFGSOptimizer::TestConvergence ( bool  firstLineSearchDone) [protected, virtual]

Check if convergence has occured; The firstLineSearchDone bool allows the implementation of TestConvergence to decide to skip a few convergence checks when no line search has performed yet (so, before the actual optimisation begins)

Reimplemented in elastix::QuasiNewtonLBFGS< TElastix >.


Field Documentation

Definition at line 149 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 131 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 135 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 138 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 134 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 197 of file itkQuasiNewtonLBFGSOptimizer.h.

Is true when the LineSearchOptimizer has been started.

Definition at line 141 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 198 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 196 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 199 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 147 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 148 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 143 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 144 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 137 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 136 of file itkQuasiNewtonLBFGSOptimizer.h.

Definition at line 145 of file itkQuasiNewtonLBFGSOptimizer.h.



Generated on 11-05-2012 for elastix by doxygen 1.7.6.1 elastix logo