00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkLBFGSOptimizer_h
00018 #define __itkLBFGSOptimizer_h
00019
00020 #include "itkSingleValuedNonLinearVnlOptimizer.h"
00021 #include "vnl/algo/vnl_lbfgs.h"
00022
00023 namespace itk
00024 {
00025
00031 class ITK_EXPORT LBFGSOptimizer :
00032 public SingleValuedNonLinearVnlOptimizer
00033 {
00034 public:
00036 typedef LBFGSOptimizer Self;
00037 typedef SingleValuedNonLinearVnlOptimizer Superclass;
00038 typedef SmartPointer<Self> Pointer;
00039 typedef SmartPointer<const Self> ConstPointer;
00040
00042 itkNewMacro(Self);
00043
00045 itkTypeMacro( LBFGSOptimizer, SingleValuedNonLinearVnlOptimizer );
00046
00048 typedef vnl_vector<double> InternalParametersType;
00049
00051 typedef vnl_lbfgs InternalOptimizerType;
00052
00054 vnl_lbfgs * GetOptimizer(void);
00055
00057 void StartOptimization( void );
00058
00060 virtual void SetCostFunction( SingleValuedCostFunction * costFunction );
00061
00065 virtual void SetTrace( bool flag );
00066 itkGetMacro( Trace, bool );
00067 itkBooleanMacro( Trace );
00068
00070 virtual void SetMaximumNumberOfFunctionEvaluations( unsigned int n );
00071 itkGetMacro( MaximumNumberOfFunctionEvaluations, unsigned int );
00072
00078 virtual void SetGradientConvergenceTolerance( double gtol );
00079 itkGetMacro( GradientConvergenceTolerance, double );
00080
00087 virtual void SetLineSearchAccuracy( double tol );
00088 itkGetMacro( LineSearchAccuracy, double );
00089
00094 virtual void SetDefaultStepLength( double stp );
00095 itkGetMacro( DefaultStepLength, double );
00096
00097 protected:
00098 LBFGSOptimizer();
00099 virtual ~LBFGSOptimizer();
00100 void PrintSelf(std::ostream& os, Indent indent) const;
00101
00102 typedef Superclass::CostFunctionAdaptorType CostFunctionAdaptorType;
00103
00104 private:
00105 LBFGSOptimizer(const Self&);
00106 void operator=(const Self&);
00107
00108 bool m_OptimizerInitialized;
00109 InternalOptimizerType * m_VnlOptimizer;
00110
00111 bool m_Trace;
00112 unsigned int m_MaximumNumberOfFunctionEvaluations;
00113 double m_GradientConvergenceTolerance;
00114 double m_LineSearchAccuracy;
00115 double m_DefaultStepLength;
00116
00117 };
00118
00119 }
00120
00121
00122
00123 #endif
00124
00125
00126