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 
16 #ifndef __itkCMAEvolutionStrategyOptimizer_h
17 #define __itkCMAEvolutionStrategyOptimizer_h
18 
20 #include <vector>
21 #include <utility>
22 #include <deque>
23 
24 #include "itkArray.h"
25 #include "itkArray2D.h"
26 #include "itkMersenneTwisterRandomVariateGenerator.h"
27 #include "vnl/vnl_diag_matrix.h"
28 
29 
30 namespace itk
31 {
49  {
50  public:
51 
54  typedef SmartPointer<Self> Pointer;
55  typedef SmartPointer<const Self> ConstPointer;
56 
57  itkNewMacro(Self);
58  itkTypeMacro(CMAEvolutionStrategyOptimizer,
60 
67 
68  typedef enum {
76 
77  virtual void StartOptimization(void);
78  virtual void ResumeOptimization(void);
79  virtual void StopOptimization(void);
80 
82  itkGetConstMacro(CurrentIteration, unsigned long);
83 
85  itkGetConstMacro(CurrentValue, MeasureType);
86 
88  itkGetConstReferenceMacro(StopCondition, StopConditionType);
89 
91  itkGetConstMacro(CurrentSigma, double);
92 
94  itkGetConstMacro(CurrentMinimumD, double);
95 
97  itkGetConstMacro(CurrentMaximumD, double);
98 
101  virtual double GetCurrentStepLength( void ) const
102  { return this->GetCurrentSigma() * this->GetCurrentMaximumD(); }
103 
109  itkGetConstReferenceMacro( CurrentScaledStep, ParametersType );
110 
112  itkGetConstMacro(MaximumNumberOfIterations, unsigned long);
113  itkSetClampMacro(MaximumNumberOfIterations, unsigned long,
115 
120  itkSetMacro( PopulationSize, unsigned int );
121  itkGetConstMacro( PopulationSize, unsigned int );
122 
127  itkSetMacro( NumberOfParents, unsigned int );
128  itkGetConstMacro( NumberOfParents, unsigned int );
129 
133  itkSetClampMacro( InitialSigma, double, NumericTraits<double>::min(), NumericTraits<double>::max() );
134  itkGetConstMacro( InitialSigma, double );
135 
139  itkSetClampMacro( MaximumDeviation, double, 0.0, NumericTraits<double>::max() );
140  itkGetConstMacro( MaximumDeviation, double );
141 
145  itkSetClampMacro( MinimumDeviation, double, 0.0, NumericTraits<double>::max() );
146  itkGetConstMacro( MinimumDeviation, double );
147 
157  itkSetMacro(UseDecayingSigma, bool);
158  itkGetConstMacro( UseDecayingSigma, bool );
159 
162  itkSetClampMacro( SigmaDecayA, double, 0.0, NumericTraits<double>::max() );
163  itkGetConstMacro( SigmaDecayA, double );
164 
167  itkSetClampMacro( SigmaDecayAlpha, double, 0.0, 1.0 );
168  itkGetConstMacro( SigmaDecayAlpha, double );
169 
175  itkSetMacro( UseCovarianceMatrixAdaptation, bool );
176  itkGetConstMacro( UseCovarianceMatrixAdaptation, bool );
177 
184  itkSetStringMacro( RecombinationWeightsPreset );
185  itkGetStringMacro( RecombinationWeightsPreset );
186 
190  itkSetMacro(UpdateBDPeriod, unsigned int);
191  itkGetConstMacro(UpdateBDPeriod, unsigned int);
192 
198  itkSetMacro( PositionToleranceMin, double );
199  itkGetConstMacro( PositionToleranceMin, double );
200 
205  itkSetMacro( PositionToleranceMax, double );
206  itkGetConstMacro( PositionToleranceMax, double );
207 
214  itkSetMacro( ValueTolerance, double );
215  itkGetConstMacro( ValueTolerance, double );
216 
217  protected:
218 
219  typedef Array<double> RecombinationWeightsType;
220  typedef vnl_diag_matrix<double> EigenValueMatrixType;
221  typedef Array2D<double> CovarianceMatrixType;
222  typedef std::vector< ParametersType > ParameterContainerType;
223  typedef std::deque< MeasureType > MeasureHistoryType;
224 
225  typedef
226  std::pair< MeasureType, unsigned int > MeasureIndexPairType;
227  typedef std::vector<MeasureIndexPairType> MeasureContainerType;
228 
229  typedef itk::Statistics::MersenneTwisterRandomVariateGenerator RandomGeneratorType;
230 
232  RandomGeneratorType::Pointer m_RandomGenerator;
233 
236 
238  unsigned long m_CurrentIteration;
239 
242 
244  bool m_Stop;
245 
248  unsigned int m_PopulationSize;
249  unsigned int m_NumberOfParents;
250  unsigned int m_UpdateBDPeriod;
251 
272  unsigned long m_HistoryLength;
273 
276 
281 
284 
299 
302 
309 
312 
315 
317  void PrintSelf(std::ostream& os, Indent indent) const;
318 
333  virtual void InitializeConstants(void);
334 
347  virtual void InitializeProgressVariables(void);
348 
350  virtual void InitializeBCD(void);
351 
354  virtual void GenerateOffspring(void);
355 
357  virtual void SortCostFunctionValues(void);
358 
360  virtual void AdvanceOneStep(void);
361 
363  virtual void UpdateConjugateEvolutionPath(void);
364 
366  virtual void UpdateHeaviside( void );
367 
369  virtual void UpdateEvolutionPath(void);
370 
372  virtual void UpdateC(void);
373 
375  virtual void UpdateSigma(void);
376 
378  virtual void UpdateBD(void);
379 
389  virtual void FixNumericalErrors(void);
390 
401  virtual bool TestConvergence( bool firstCheck );
402 
403  private:
404  CMAEvolutionStrategyOptimizer(const Self&); //purposely not implemented
405  void operator=(const Self&); //purposely not implemented
406 
419 
420  }; // end class CMAEvolutionStrategyOptimizer
421 
422 
423 } // end namespace itk
424 
425 
426 #endif //#ifndef __itkCMAEvolutionStrategyOptimizer_h
427 


Generated on 27-06-2013 for elastix by doxygen 1.8.3.1 elastix logo