00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkAmoebaOptimizer_h
00018 #define __itkAmoebaOptimizer_h
00019
00020 #include "itkSingleValuedNonLinearVnlOptimizer.h"
00021 #include "vnl/algo/vnl_amoeba.h"
00022
00023 namespace itk
00024 {
00025
00031 class ITK_EXPORT AmoebaOptimizer :
00032 public SingleValuedNonLinearVnlOptimizer
00033 {
00034 public:
00036 typedef AmoebaOptimizer Self;
00037 typedef SingleValuedNonLinearVnlOptimizer Superclass;
00038 typedef SmartPointer<Self> Pointer;
00039 typedef SmartPointer<const Self> ConstPointer;
00040
00042 itkNewMacro(Self);
00043
00045 itkTypeMacro( AmoebaOptimizer, SingleValuedNonLinearVnlOptimizer );
00046
00048 typedef vnl_vector<double> InternalParametersType;
00049
00051 typedef vnl_amoeba InternalOptimizerType;
00052
00054 vnl_amoeba * GetOptimizer(void);
00055
00057 void StartOptimization( void );
00058
00060 virtual void SetCostFunction( SingleValuedCostFunction * costFunction );
00061
00065 virtual void SetMaximumNumberOfIterations( unsigned int n );
00066 itkGetMacro( MaximumNumberOfIterations, unsigned int );
00067
00075 virtual void SetParametersConvergenceTolerance( double tol );
00076 itkGetMacro( ParametersConvergenceTolerance, double );
00077 virtual void SetFunctionConvergenceTolerance( double tol );
00078 itkGetMacro( FunctionConvergenceTolerance, double );
00079
00080 protected:
00081 AmoebaOptimizer();
00082 virtual ~AmoebaOptimizer();
00083 void PrintSelf(std::ostream& os, Indent indent) const;
00084
00085 typedef Superclass::CostFunctionAdaptorType CostFunctionAdaptorType;
00086
00087 private:
00088 AmoebaOptimizer(const Self&);
00089 void operator=(const Self&);
00090
00091 bool m_OptimizerInitialized;
00092 InternalOptimizerType * m_VnlOptimizer;
00093 unsigned int m_MaximumNumberOfIterations;
00094 double m_ParametersConvergenceTolerance;
00095 double m_FunctionConvergenceTolerance;
00096 };
00097
00098 }
00099
00100
00101
00102 #endif
00103
00104
00105