ITK 6.0.0
Insight Toolkit
 
Loading...
Searching...
No Matches
itkSPSAOptimizer.h
Go to the documentation of this file.
1/*=========================================================================
2 *
3 * Copyright NumFOCUS
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * https://www.apache.org/licenses/LICENSE-2.0.txt
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 *=========================================================================*/
18#ifndef itkSPSAOptimizer_h
19#define itkSPSAOptimizer_h
20
23#include "ITKOptimizersExport.h"
24
25namespace itk
26{
45// Define how to print enumeration
46extern ITKOptimizers_EXPORT std::ostream &
47 operator<<(std::ostream & out, const SPSAOptimizerEnums::StopConditionSPSAOptimizer value);
59
60class ITKOptimizers_EXPORT SPSAOptimizer : public SingleValuedNonLinearOptimizer
61{
62public:
63 ITK_DISALLOW_COPY_AND_MOVE(SPSAOptimizer);
64
70
72 itkNewMacro(Self);
73
75 itkOverrideGetNameOfClassMacro(SPSAOptimizer);
76
78#if !defined(ITK_LEGACY_REMOVE)
79 // We need to expose the enum values at the class level
80 // for backwards compatibility
81 static constexpr StopConditionSPSAOptimizerEnum Unknown = StopConditionSPSAOptimizerEnum::Unknown;
82 static constexpr StopConditionSPSAOptimizerEnum MaximumNumberOfIterations =
83 StopConditionSPSAOptimizerEnum::MaximumNumberOfIterations;
84 static constexpr StopConditionSPSAOptimizerEnum BelowTolerance = StopConditionSPSAOptimizerEnum::BelowTolerance;
85 static constexpr StopConditionSPSAOptimizerEnum MetricError = StopConditionSPSAOptimizerEnum::MetricError;
86#endif
88 virtual void
90
92 void
94
97 void
99
102 void
104
106 virtual MeasureType
107 GetValue() const;
108
110 virtual MeasureType
111 GetValue(const ParametersType & parameters) const;
112
123 virtual void
124 GuessParameters(SizeValueType numberOfGradientEstimates, double initialStepSize);
125
127 itkGetConstMacro(CurrentIteration, SizeValueType);
128
131
133 itkGetConstMacro(LearningRate, double);
134
136 itkGetConstMacro(GradientMagnitude, double);
137
139 itkGetConstReferenceMacro(Gradient, DerivativeType);
140
142 itkSetMacro(Sa, double);
143 itkGetConstMacro(Sa, double);
144 // For backward compatibility
145 void
146 Seta(double a)
147 {
148 SetSa(a);
149 }
150 double
151 Geta() const
152 {
153 return GetSa();
154 }
155
156
158 itkSetMacro(Sc, double);
159 itkGetConstMacro(Sc, double);
160 // For backward compatibility
161 void
162 Setc(double c)
163 {
164 SetSc(c);
165 }
166 double
167 Getc() const
168 {
169 return GetSc();
170 }
171
172
174 itkSetMacro(A, double);
175 itkGetConstMacro(A, double);
177
179 itkSetMacro(Alpha, double);
180 itkGetConstMacro(Alpha, double);
182
184 itkSetMacro(Gamma, double);
185 itkGetConstMacro(Gamma, double);
187
189 itkGetConstMacro(Maximize, bool);
190 itkSetMacro(Maximize, bool);
191 itkBooleanMacro(Maximize);
192 bool
194 {
195 return !m_Maximize;
196 }
197 void
199 {
200 this->SetMaximize(!v);
201 }
202 void
204 {
205 this->MaximizeOff();
206 }
207 void
209 {
210 this->MaximizeOn();
211 }
212
213
219 itkSetMacro(NumberOfPerturbations, SizeValueType);
220 itkGetConstMacro(NumberOfPerturbations, SizeValueType);
222
234 itkGetConstMacro(StateOfConvergence, double);
235
237 itkSetMacro(StateOfConvergenceDecayRate, double);
238 itkGetConstMacro(StateOfConvergenceDecayRate, double);
240
242 itkSetMacro(MinimumNumberOfIterations, SizeValueType);
243 itkGetConstMacro(MinimumNumberOfIterations, SizeValueType);
245
247 itkSetMacro(MaximumNumberOfIterations, SizeValueType);
248 itkGetConstMacro(MaximumNumberOfIterations, SizeValueType);
250
252 itkSetMacro(Tolerance, double);
253 itkGetConstMacro(Tolerance, double);
255
257 std::string
259
260protected:
262 ~SPSAOptimizer() override = default;
263
265 void
266 PrintSelf(std::ostream & os, Indent indent) const override;
267
270
272
274
275 bool m_Stop{ false };
276
278
280
282
285
287 virtual double
289
294 virtual double
296
303 virtual void
304 GenerateDelta(const unsigned int spaceDimension);
305
310 virtual void
311 ComputeGradient(const ParametersType & parameters, DerivativeType & gradient);
312
313private:
318 double m_Tolerance{};
322
324 double m_Sa{};
325 double m_Sc{};
326 double m_A{};
327 double m_Alpha{};
328 double m_Gamma{};
329}; // end class SPSAOptimizer
330
331// Define how to print enumeration
332extern ITKOptimizers_EXPORT std::ostream &
333 operator<<(std::ostream & out, const SPSAOptimizer::StopConditionSPSAOptimizerEnum value);
334
335} // end namespace itk
336
337#endif // end #ifndef itkSPSAOptimizer_h
Control indentation during Print() invocation.
Definition itkIndent.h:50
Contains all enum classes used by SPSAOptimizer class.
virtual void SetMaximize(bool _arg)
Statistics::MersenneTwisterRandomVariateGenerator::Pointer m_Generator
virtual void SetSc(double _arg)
SmartPointer< const Self > ConstPointer
void StartOptimization() override
SPSAOptimizerEnums::StopConditionSPSAOptimizer StopConditionSPSAOptimizerEnum
void PrintSelf(std::ostream &os, Indent indent) const override
SizeValueType m_NumberOfPerturbations
virtual void MaximizeOff()
virtual void GenerateDelta(const unsigned int spaceDimension)
virtual double Compute_a(SizeValueType k) const
SingleValuedNonLinearOptimizer Superclass
SizeValueType m_MaximumNumberOfIterations
~SPSAOptimizer() override=default
StopConditionSPSAOptimizerEnum m_StopCondition
DerivativeType m_Gradient
virtual void SetSa(double _arg)
DerivativeType m_Delta
virtual void AdvanceOneStep()
virtual void ComputeGradient(const ParametersType &parameters, DerivativeType &gradient)
virtual double Compute_c(SizeValueType k) const
virtual double GetSc() const
SizeValueType m_CurrentIteration
std::string GetStopConditionDescription() const override
virtual double GetSa() const
virtual void MaximizeOn()
virtual void GuessParameters(SizeValueType numberOfGradientEstimates, double initialStepSize)
virtual MeasureType GetValue() const
virtual MeasureType GetValue(const ParametersType &parameters) const
SizeValueType m_MinimumNumberOfIterations
SmartPointer< Self > Pointer
Implements transparent reference counting.
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
unsigned long SizeValueType
Definition itkIntTypes.h:86
ITKCommon_EXPORT std::ostream & operator<<(std::ostream &out, typename AnatomicalOrientation::CoordinateEnum value)