go home Home | Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages
itkCMAEvolutionStrategyOptimizer.h
Go to the documentation of this file.
1 /*======================================================================
2 
3  This file is part of the elastix software.
4 
5  Copyright (c) University Medical Center Utrecht. All rights reserved.
6  See src/CopyrightElastix.txt or http://elastix.isi.uu.nl/legal.php for
7  details.
8 
9  This software is distributed WITHOUT ANY WARRANTY; without even
10  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11  PURPOSE. See the above copyright notices for more information.
12 
13 ======================================================================*/
14 
15 #ifndef __itkCMAEvolutionStrategyOptimizer_h
16 #define __itkCMAEvolutionStrategyOptimizer_h
17 
19 #include <vector>
20 #include <utility>
21 #include <deque>
22 
23 #include "itkArray.h"
24 #include "itkArray2D.h"
25 #include "itkMersenneTwisterRandomVariateGenerator.h"
26 #include "vnl/vnl_diag_matrix.h"
27 
28 namespace itk
29 {
47 {
48 public:
49 
52  typedef SmartPointer< Self > Pointer;
53  typedef SmartPointer< const Self > ConstPointer;
54 
55  itkNewMacro( Self );
56  itkTypeMacro( CMAEvolutionStrategyOptimizer,
58 
65 
66  typedef enum {
75 
76  virtual void StartOptimization( void );
77 
78  virtual void ResumeOptimization( void );
79 
80  virtual void StopOptimization( void );
81 
83  itkGetConstMacro( CurrentIteration, unsigned long );
84 
86  itkGetConstMacro( CurrentValue, MeasureType );
87 
89  itkGetConstReferenceMacro( StopCondition, StopConditionType );
90 
92  itkGetConstMacro( CurrentSigma, double );
93 
95  itkGetConstMacro( CurrentMinimumD, double );
96 
98  itkGetConstMacro( CurrentMaximumD, double );
99 
102  virtual double GetCurrentStepLength( void ) const
103  { return this->GetCurrentSigma() * this->GetCurrentMaximumD(); }
104 
110  itkGetConstReferenceMacro( CurrentScaledStep, ParametersType );
111 
113  itkGetConstMacro( MaximumNumberOfIterations, unsigned long );
114  itkSetClampMacro( MaximumNumberOfIterations, unsigned long,
116 
121  itkSetMacro( PopulationSize, unsigned int );
122  itkGetConstMacro( PopulationSize, unsigned int );
123 
128  itkSetMacro( NumberOfParents, unsigned int );
129  itkGetConstMacro( NumberOfParents, unsigned int );
130 
134  itkSetClampMacro( InitialSigma, double, NumericTraits< double >::min(), NumericTraits< double >::max() );
135  itkGetConstMacro( InitialSigma, double );
136 
140  itkSetClampMacro( MaximumDeviation, double, 0.0, NumericTraits< double >::max() );
141  itkGetConstMacro( MaximumDeviation, double );
142 
146  itkSetClampMacro( MinimumDeviation, double, 0.0, NumericTraits< double >::max() );
147  itkGetConstMacro( MinimumDeviation, double );
148 
158  itkSetMacro( UseDecayingSigma, bool );
159  itkGetConstMacro( UseDecayingSigma, bool );
160 
163  itkSetClampMacro( SigmaDecayA, double, 0.0, NumericTraits< double >::max() );
164  itkGetConstMacro( SigmaDecayA, double );
165 
168  itkSetClampMacro( SigmaDecayAlpha, double, 0.0, 1.0 );
169  itkGetConstMacro( SigmaDecayAlpha, double );
170 
176  itkSetMacro( UseCovarianceMatrixAdaptation, bool );
177  itkGetConstMacro( UseCovarianceMatrixAdaptation, bool );
178 
185  itkSetStringMacro( RecombinationWeightsPreset );
186  itkGetStringMacro( RecombinationWeightsPreset );
187 
191  itkSetMacro( UpdateBDPeriod, unsigned int );
192  itkGetConstMacro( UpdateBDPeriod, unsigned int );
193 
199  itkSetMacro( PositionToleranceMin, double );
200  itkGetConstMacro( PositionToleranceMin, double );
201 
206  itkSetMacro( PositionToleranceMax, double );
207  itkGetConstMacro( PositionToleranceMax, double );
208 
215  itkSetMacro( ValueTolerance, double );
216  itkGetConstMacro( ValueTolerance, double );
217 
218 protected:
219 
220  typedef Array< double > RecombinationWeightsType;
221  typedef vnl_diag_matrix< double > EigenValueMatrixType;
222  typedef Array2D< double > CovarianceMatrixType;
223  typedef std::vector< ParametersType > ParameterContainerType;
224  typedef std::deque< MeasureType > MeasureHistoryType;
225 
226  typedef
227  std::pair< MeasureType, unsigned int > MeasureIndexPairType;
228  typedef std::vector< MeasureIndexPairType > MeasureContainerType;
229 
230  typedef itk::Statistics::MersenneTwisterRandomVariateGenerator RandomGeneratorType;
231 
233  RandomGeneratorType::Pointer m_RandomGenerator;
234 
237 
239  unsigned long m_CurrentIteration;
240 
243 
245  bool m_Stop;
246 
249  unsigned int m_PopulationSize;
250  unsigned int m_NumberOfParents;
251  unsigned int m_UpdateBDPeriod;
252 
273  unsigned long m_HistoryLength;
274 
277 
282 
285 
300 
303 
310 
313 
316 
318  void PrintSelf( std::ostream & os, Indent indent ) const;
319 
334  virtual void InitializeConstants( void );
335 
348  virtual void InitializeProgressVariables( void );
349 
351  virtual void InitializeBCD( void );
352 
355  virtual void GenerateOffspring( void );
356 
358  virtual void SortCostFunctionValues( void );
359 
361  virtual void AdvanceOneStep( void );
362 
364  virtual void UpdateConjugateEvolutionPath( void );
365 
367  virtual void UpdateHeaviside( void );
368 
370  virtual void UpdateEvolutionPath( void );
371 
373  virtual void UpdateC( void );
374 
376  virtual void UpdateSigma( void );
377 
379  virtual void UpdateBD( void );
380 
390  virtual void FixNumericalErrors( void );
391 
402  virtual bool TestConvergence( bool firstCheck );
403 
404 private:
405 
406  CMAEvolutionStrategyOptimizer( const Self & ); // purposely not implemented
407  void operator=( const Self & ); // purposely not implemented
408 
421 
422 };
423 
424 } // end namespace itk
425 
426 #endif //#ifndef __itkCMAEvolutionStrategyOptimizer_h
virtual void StopOptimization(void)
virtual double GetCurrentSigma() const
virtual bool TestConvergence(bool firstCheck)
virtual void StartOptimization(void)
virtual void GenerateOffspring(void)
void PrintSelf(std::ostream &os, Indent indent) const
virtual void UpdateEvolutionPath(void)
virtual void InitializeProgressVariables(void)
itk::Statistics::MersenneTwisterRandomVariateGenerator RandomGeneratorType
virtual void InitializeConstants(void)
virtual double GetCurrentMaximumD() const
virtual void FixNumericalErrors(void)
int max(int a, int b)
virtual void UpdateConjugateEvolutionPath(void)
std::vector< ParametersType > ParameterContainerType
std::pair< MeasureType, unsigned int > MeasureIndexPairType
virtual void ResumeOptimization(void)
A Covariance Matrix Adaptation Evolution Strategy Optimizer.
virtual void SortCostFunctionValues(void)
int min(int a, int b)
std::vector< MeasureIndexPairType > MeasureContainerType
ScaledSingleValuedNonLinearOptimizer Superclass
Superclass::ScaledCostFunctionType ScaledCostFunctionType
virtual void UpdateHeaviside(void)


Generated on 27-04-2014 for elastix by doxygen 1.8.6 elastix logo