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::GenericConjugateGradientOptimizer Class Reference

A set of conjugate gradient algorithms. More...

#include <itkGenericConjugateGradientOptimizer.h>

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

Public Types

typedef std::map
< BetaDefinitionType,
ComputeBetaFunctionType
BetaDefinitionMapType
typedef std::string BetaDefinitionType
typedef double(Self::* ComputeBetaFunctionType )(const DerivativeType &, const DerivativeType &, const ParametersType &)
typedef SmartPointer< const SelfConstPointer
typedef
Superclass::CostFunctionType 
CostFunctionType
typedef Superclass::DerivativeType DerivativeType
typedef
LineSearchOptimizerType::Pointer 
LineSearchOptimizerPointer
typedef LineSearchOptimizer LineSearchOptimizerType
typedef Superclass::MeasureType MeasureType
typedef Superclass::ParametersType ParametersType
typedef SmartPointer< SelfPointer
typedef
Superclass::ScaledCostFunctionType 
ScaledCostFunctionType
typedef Superclass::ScalesType ScalesType
typedef
GenericConjugateGradientOptimizer 
Self
enum  StopConditionType {
  MetricError, LineSearchError, MaximumNumberOfIterations, GradientMagnitudeTolerance,
  ValueTolerance, InfiniteBeta, Unknown
}
typedef
ScaledSingleValuedNonLinearOptimizer 
Superclass

Public Member Functions

virtual const BetaDefinitionTypeGetBetaDefinition ()
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 long GetMaxNrOfItWithoutImprovement () const
virtual const StopConditionTypeGetStopCondition ()
virtual double GetValueTolerance () const
virtual void ResumeOptimization (void)
virtual void SetBetaDefinition (const BetaDefinitionType &arg)
virtual void SetGradientMagnitudeTolerance (double _arg)
virtual void SetLineSearchOptimizer (LineSearchOptimizerType *_arg)
virtual void SetMaximumNumberOfIterations (unsigned long _arg)
virtual void SetMaxNrOfItWithoutImprovement (unsigned long arg)
virtual void SetValueTolerance (double _arg)
virtual void StartOptimization (void)
virtual void StopOptimization (void)

Static Public Member Functions

static Pointer New ()

Protected Member Functions

virtual void AddBetaDefinition (const BetaDefinitionType &name, ComputeBetaFunctionType function)
virtual double ComputeBeta (const DerivativeType &previousGradient, const DerivativeType &gradient, const ParametersType &previousSearchDir)
double ComputeBetaDY (const DerivativeType &previousGradient, const DerivativeType &gradient, const ParametersType &previousSearchDir)
double ComputeBetaDYHS (const DerivativeType &previousGradient, const DerivativeType &gradient, const ParametersType &previousSearchDir)
double ComputeBetaFR (const DerivativeType &previousGradient, const DerivativeType &gradient, const ParametersType &previousSearchDir)
double ComputeBetaHS (const DerivativeType &previousGradient, const DerivativeType &gradient, const ParametersType &previousSearchDir)
double ComputeBetaPR (const DerivativeType &previousGradient, const DerivativeType &gradient, const ParametersType &previousSearchDir)
double ComputeBetaSD (const DerivativeType &previousGradient, const DerivativeType &gradient, const ParametersType &previousSearchDir)
virtual void ComputeSearchDirection (const DerivativeType &previousGradient, const DerivativeType &gradient, ParametersType &searchDir)
 GenericConjugateGradientOptimizer ()
virtual void LineSearch (const ParametersType searchDir, double &step, ParametersType &x, MeasureType &f, DerivativeType &g)
void PrintSelf (std::ostream &os, Indent indent) const
virtual void SetInLineSearch (bool _arg)
virtual bool TestConvergence (bool firstLineSearchDone)
virtual ~GenericConjugateGradientOptimizer ()

Protected Attributes

BetaDefinitionType m_BetaDefinition
BetaDefinitionMapType m_BetaDefinitionMap
DerivativeType m_CurrentGradient
unsigned long m_CurrentIteration
double m_CurrentStepLength
MeasureType m_CurrentValue
bool m_InLineSearch
bool m_PreviousGradientAndSearchDirValid
bool m_Stop
StopConditionType m_StopCondition
bool m_UseDefaultMaxNrOfItWithoutImprovement

Private Member Functions

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

Private Attributes

double m_GradientMagnitudeTolerance
LineSearchOptimizerPointer m_LineSearchOptimizer
unsigned long m_MaximumNumberOfIterations
unsigned long m_MaxNrOfItWithoutImprovement
double m_ValueTolerance

Detailed Description

A set of conjugate gradient algorithms.

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

Definition at line 37 of file itkGenericConjugateGradientOptimizer.h.


Member Typedef Documentation

Definition at line 69 of file itkGenericConjugateGradientOptimizer.h.

Definition at line 67 of file itkGenericConjugateGradientOptimizer.h.

Typedef for a function that computes $\beta$, given the previousGradient, the current gradient, and the previous search direction

Definition at line 64 of file itkGenericConjugateGradientOptimizer.h.

Definition at line 59 of file itkGenericConjugateGradientOptimizer.h.

Definition at line 58 of file itkGenericConjugateGradientOptimizer.h.


Member Enumeration Documentation

Enumerator:
MetricError 
LineSearchError 
MaximumNumberOfIterations 
GradientMagnitudeTolerance 
ValueTolerance 
InfiniteBeta 
Unknown 

Reimplemented in elastix::ConjugateGradient< TElastix >.

Definition at line 71 of file itkGenericConjugateGradientOptimizer.h.


Constructor & Destructor Documentation

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

Definition at line 132 of file itkGenericConjugateGradientOptimizer.h.

itk::GenericConjugateGradientOptimizer::GenericConjugateGradientOptimizer ( const Self ) [private]

Member Function Documentation

virtual void itk::GenericConjugateGradientOptimizer::AddBetaDefinition ( const BetaDefinitionType name,
ComputeBetaFunctionType  function 
) [protected, virtual]

Function to add a new beta definition. The first argument should be a name via which a user can select this $\beta$ definition. The second argument is a pointer to a method that computes $\beta$. Called in the constructor of this class, and possibly by subclasses.

virtual double itk::GenericConjugateGradientOptimizer::ComputeBeta ( const DerivativeType previousGradient,
const DerivativeType gradient,
const ParametersType previousSearchDir 
) [protected, virtual]

Compute $\beta$ according to the user set $\beta$-definition

double itk::GenericConjugateGradientOptimizer::ComputeBetaDY ( const DerivativeType previousGradient,
const DerivativeType gradient,
const ParametersType previousSearchDir 
) [protected]

"DaiYuan"

double itk::GenericConjugateGradientOptimizer::ComputeBetaDYHS ( const DerivativeType previousGradient,
const DerivativeType gradient,
const ParametersType previousSearchDir 
) [protected]

"DaiYuanHestenesStiefel"

double itk::GenericConjugateGradientOptimizer::ComputeBetaFR ( const DerivativeType previousGradient,
const DerivativeType gradient,
const ParametersType previousSearchDir 
) [protected]

"FletcherReeves"

double itk::GenericConjugateGradientOptimizer::ComputeBetaHS ( const DerivativeType previousGradient,
const DerivativeType gradient,
const ParametersType previousSearchDir 
) [protected]

"HestenesStiefel"

double itk::GenericConjugateGradientOptimizer::ComputeBetaPR ( const DerivativeType previousGradient,
const DerivativeType gradient,
const ParametersType previousSearchDir 
) [protected]

"PolakRibiere"

double itk::GenericConjugateGradientOptimizer::ComputeBetaSD ( const DerivativeType previousGradient,
const DerivativeType gradient,
const ParametersType previousSearchDir 
) [protected]

Different definitions of $\beta$ "SteepestDescent: beta=0

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

Compute the search direction:

\[ d_{k} = - g_{k} + \beta_{k} d_{k-1} \]

In the first iteration the search direction is computed as:

\[ d_{0} = - g_{0} \]

On calling, searchDir should equal $d_{k-1}$. On return searchDir equals $d_{k}$.

virtual const BetaDefinitionType& itk::GenericConjugateGradientOptimizer::GetBetaDefinition ( ) [virtual]
virtual const char* itk::GenericConjugateGradientOptimizer::GetClassName ( ) const [virtual]
virtual const DerivativeType& itk::GenericConjugateGradientOptimizer::GetCurrentGradient ( ) [virtual]
virtual unsigned long itk::GenericConjugateGradientOptimizer::GetCurrentIteration ( ) const [virtual]

Get information about optimization process:

virtual double itk::GenericConjugateGradientOptimizer::GetCurrentStepLength ( ) const [virtual]
virtual MeasureType itk::GenericConjugateGradientOptimizer::GetCurrentValue ( ) const [virtual]
virtual double itk::GenericConjugateGradientOptimizer::GetGradientMagnitudeTolerance ( ) const [virtual]

Setting: the mininum gradient magnitude. By default 1e-5.

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

virtual bool itk::GenericConjugateGradientOptimizer::GetInLineSearch ( ) const [virtual]
virtual LineSearchOptimizerType* itk::GenericConjugateGradientOptimizer::GetLineSearchOptimizer ( ) [virtual]
virtual unsigned long itk::GenericConjugateGradientOptimizer::GetMaximumNumberOfIterations ( ) const [virtual]

Setting: the maximum number of iterations

virtual unsigned long itk::GenericConjugateGradientOptimizer::GetMaxNrOfItWithoutImprovement ( ) const [virtual]
virtual const StopConditionType& itk::GenericConjugateGradientOptimizer::GetStopCondition ( ) [virtual]
virtual double itk::GenericConjugateGradientOptimizer::GetValueTolerance ( ) const [virtual]

Setting: a stopping criterion, the value tolerance. By default 1e-5.

The optimizer stops when

\[ 2.0 * | f_k - f_{k-1} | \le ValueTolerance * ( |f_k| + |f_{k-1}| + 1e-20 ) \]

is satisfied MaxNrOfItWithoutImprovement times in a row.

virtual void itk::GenericConjugateGradientOptimizer::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::ConjugateGradient< TElastix >.

static Pointer itk::GenericConjugateGradientOptimizer::New ( ) [static]
void itk::GenericConjugateGradientOptimizer::operator= ( const Self ) [private]
void itk::GenericConjugateGradientOptimizer::PrintSelf ( std::ostream &  os,
Indent  indent 
) const [protected]
virtual void itk::GenericConjugateGradientOptimizer::ResumeOptimization ( void  ) [virtual]
virtual void itk::GenericConjugateGradientOptimizer::SetBetaDefinition ( const BetaDefinitionType arg) [virtual]

Setting: the definition of $\beta$, by default "DaiYuanHestenesStiefel"

virtual void itk::GenericConjugateGradientOptimizer::SetGradientMagnitudeTolerance ( double  _arg) [virtual]
virtual void itk::GenericConjugateGradientOptimizer::SetInLineSearch ( bool  _arg) [protected, virtual]
virtual void itk::GenericConjugateGradientOptimizer::SetLineSearchOptimizer ( LineSearchOptimizerType _arg) [virtual]

Setting: the line search optimizer

virtual void itk::GenericConjugateGradientOptimizer::SetMaximumNumberOfIterations ( unsigned long  _arg) [virtual]
virtual void itk::GenericConjugateGradientOptimizer::SetMaxNrOfItWithoutImprovement ( unsigned long  arg) [virtual]

Setting: the maximum number of iterations in a row that satisfy the value tolerance criterion. By default (if never set) equal to the number of parameters.

virtual void itk::GenericConjugateGradientOptimizer::SetValueTolerance ( double  _arg) [virtual]
virtual void itk::GenericConjugateGradientOptimizer::StartOptimization ( void  ) [virtual]
virtual void itk::GenericConjugateGradientOptimizer::StopOptimization ( void  ) [virtual]
virtual bool itk::GenericConjugateGradientOptimizer::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::ConjugateGradient< TElastix >.


Field Documentation

The name of the BetaDefinition

Definition at line 158 of file itkGenericConjugateGradientOptimizer.h.

A mapping that links the names of the BetaDefinitions to functions that compute $\beta$.

Definition at line 162 of file itkGenericConjugateGradientOptimizer.h.

Definition at line 136 of file itkGenericConjugateGradientOptimizer.h.

Definition at line 138 of file itkGenericConjugateGradientOptimizer.h.

Definition at line 141 of file itkGenericConjugateGradientOptimizer.h.

Definition at line 137 of file itkGenericConjugateGradientOptimizer.h.

Definition at line 251 of file itkGenericConjugateGradientOptimizer.h.

Is true when the LineSearchOptimizer has been started.

Definition at line 148 of file itkGenericConjugateGradientOptimizer.h.

Definition at line 254 of file itkGenericConjugateGradientOptimizer.h.

Definition at line 249 of file itkGenericConjugateGradientOptimizer.h.

Definition at line 252 of file itkGenericConjugateGradientOptimizer.h.

Flag that says if the previous gradient and search direction are known. Typically 'true' at the start of optimization, or when a stopped optimisation is resumed (in the latter case the previous gradient and search direction may of course still be valid, but to be safe it is assumed that they are not).

Definition at line 149 of file itkGenericConjugateGradientOptimizer.h.

Definition at line 140 of file itkGenericConjugateGradientOptimizer.h.

Definition at line 139 of file itkGenericConjugateGradientOptimizer.h.

Flag that is true as long as the method SetMaxNrOfItWithoutImprovement is never called

Definition at line 145 of file itkGenericConjugateGradientOptimizer.h.

Definition at line 250 of file itkGenericConjugateGradientOptimizer.h.



Generated on 24-10-2011 for elastix by doxygen 1.7.4 elastix logo