NifTK  16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
itkUCLRegularStepGradientDescentOptimizer.h
Go to the documentation of this file.
1 /*=============================================================================
2 
3  NifTK: A software platform for medical image computing.
4 
5  Copyright (c) University College London (UCL). All rights reserved.
6 
7  This software is distributed WITHOUT ANY WARRANTY; without even
8  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
9  PURPOSE.
10 
11  See LICENSE.txt in the top level directory for details.
12 
13 =============================================================================*/
14 
15 #ifndef itkUCLRegularStepGradientDescentOptimizer_h
16 #define itkUCLRegularStepGradientDescentOptimizer_h
17 
18 #include <NifTKConfigure.h>
20 
21 #include <itkSingleValuedNonLinearOptimizer.h>
22 
23 namespace itk
24 {
25 
43  public SingleValuedNonLinearOptimizer
44 {
45 public:
48  typedef SingleValuedNonLinearOptimizer Superclass;
49  typedef SmartPointer<Self> Pointer;
50  typedef SmartPointer<const Self> ConstPointer;
51 
53  itkNewMacro(Self);
54 
57  SingleValuedNonLinearOptimizer );
58 
59 
61  typedef enum {
62  GradientMagnitudeTolerance = 1,
63  StepTooSmall = 2,
64  ImageNotAvailable = 3,
65  CostFunctionError = 4,
66  MaximumNumberOfIterations = 5,
67  Unknown = 6
68  } StopConditionType;
69 
71  itkSetMacro( Maximize, bool );
72  itkGetConstReferenceMacro( Maximize, bool );
73  itkBooleanMacro( Maximize );
74  bool GetMinimize( ) const
75  { return !m_Maximize; }
76  void SetMinimize(bool v)
77  { this->SetMaximize(!v); }
78  void MinimizeOn(void)
79  { SetMaximize( false ); }
80  void MinimizeOff(void)
81  { SetMaximize( true ); }
82 
84  void StartOptimization( void ) override;
85 
88  void ResumeOptimization( void );
89 
92  void StopOptimization( void );
93 
95  itkSetMacro( MaximumStepLength, double );
96  itkSetMacro( MinimumStepLength, double );
97  itkSetMacro( RelaxationFactor, double );
98  itkSetMacro( NumberOfIterations, unsigned long );
99  itkSetMacro( GradientMagnitudeTolerance, double );
100  itkGetConstReferenceMacro( CurrentStepLength, double);
101  itkGetConstReferenceMacro( MaximumStepLength, double );
102  itkGetConstReferenceMacro( MinimumStepLength, double );
103  itkGetConstReferenceMacro( RelaxationFactor, double );
104  itkGetConstReferenceMacro( NumberOfIterations, unsigned long );
105  itkGetConstReferenceMacro( GradientMagnitudeTolerance, double );
106  itkGetConstMacro( CurrentIteration, unsigned int );
107  itkGetConstReferenceMacro( StopCondition, StopConditionType );
108  itkGetConstReferenceMacro( Value, MeasureType );
109  itkGetConstReferenceMacro( Gradient, DerivativeType );
110 
111 protected:
114  void PrintSelf(std::ostream& os, Indent indent) const override;
115 
119  virtual void AdvanceOneStep( void );
120 
126  virtual void StepAlongGradient(double, const DerivativeType&);
127 
128 private:
129  UCLRegularStepGradientDescentOptimizer(const Self&); //purposely not implemented
130  void operator=(const Self&);//purposely not implemented
131 
132 protected:
133  DerivativeType m_Gradient;
134  DerivativeType m_PreviousGradient;
135 
136  bool m_Stop;
138  MeasureType m_Value;
139  MeasureType m_BestSoFarValue;
140  ParametersType m_BestSoFarParameters;
147  unsigned long m_NumberOfIterations;
148  unsigned long m_CurrentIteration;
149 
150 
151 };
152 
153 } // end namespace itk
154 
155 #endif
MeasureType m_BestSoFarValue
Definition: itkUCLRegularStepGradientDescentOptimizer.h:139
double m_MinimumStepLength
Definition: itkUCLRegularStepGradientDescentOptimizer.h:143
void SetMinimize(bool v)
Definition: itkUCLRegularStepGradientDescentOptimizer.h:76
double m_RelaxationFactor
Definition: itkUCLRegularStepGradientDescentOptimizer.h:145
ParametersType m_BestSoFarParameters
Definition: itkUCLRegularStepGradientDescentOptimizer.h:140
double m_CurrentStepLength
Definition: itkUCLRegularStepGradientDescentOptimizer.h:144
#define NIFTKITK_WINEXPORT
Definition: niftkITKWin32ExportHeader.h:28
DerivativeType m_Gradient
Definition: itkUCLRegularStepGradientDescentOptimizer.h:133
Definition: niftkITKAffineResampleImage.cxx:74
StopConditionType m_StopCondition
Definition: itkUCLRegularStepGradientDescentOptimizer.h:146
double m_GradientMagnitudeTolerance
Definition: itkUCLRegularStepGradientDescentOptimizer.h:141
void MinimizeOn(void)
Definition: itkUCLRegularStepGradientDescentOptimizer.h:78
SingleValuedNonLinearOptimizer Superclass
Definition: itkUCLRegularStepGradientDescentOptimizer.h:48
bool GetMinimize() const
Definition: itkUCLRegularStepGradientDescentOptimizer.h:74
SmartPointer< Self > Pointer
Definition: itkUCLRegularStepGradientDescentOptimizer.h:49
const GLdouble * v
Definition: glew.h:1375
virtual ~UCLRegularStepGradientDescentOptimizer()
Definition: itkUCLRegularStepGradientDescentOptimizer.h:113
void MinimizeOff(void)
Definition: itkUCLRegularStepGradientDescentOptimizer.h:80
bool m_Stop
Definition: itkUCLRegularStepGradientDescentOptimizer.h:136
UCLRegularStepGradientDescentOptimizer Self
Definition: itkUCLRegularStepGradientDescentOptimizer.h:47
double m_MaximumStepLength
Definition: itkUCLRegularStepGradientDescentOptimizer.h:142
unsigned long m_NumberOfIterations
Definition: itkUCLRegularStepGradientDescentOptimizer.h:147
MeasureType m_Value
Definition: itkUCLRegularStepGradientDescentOptimizer.h:138
DerivativeType m_PreviousGradient
Definition: itkUCLRegularStepGradientDescentOptimizer.h:134
unsigned long m_CurrentIteration
Definition: itkUCLRegularStepGradientDescentOptimizer.h:148
bool m_Maximize
Definition: itkUCLRegularStepGradientDescentOptimizer.h:137
Definition: itkUCLRegularStepGradientDescentOptimizer.h:42
SmartPointer< const Self > ConstPointer
Definition: itkUCLRegularStepGradientDescentOptimizer.h:50
StopConditionType
Definition: itkUCLRegularStepGradientDescentOptimizer.h:61