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.
00001 /*======================================================================
00002 
00003   This file is part of the elastix software.
00004 
00005   Copyright (c) University Medical Center Utrecht. All rights reserved.
00006   See src/CopyrightElastix.txt or http://elastix.isi.uu.nl/legal.php for
00007   details.
00008 
00009      This software is distributed WITHOUT ANY WARRANTY; without even
00010      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00011      PURPOSE. See the above copyright notices for more information.
00012 
00013 ======================================================================*/
00014 
00015 
00016 #ifndef __itkCMAEvolutionStrategyOptimizer_h
00017 #define __itkCMAEvolutionStrategyOptimizer_h
00018 
00019 #include "itkScaledSingleValuedNonLinearOptimizer.h"
00020 #include <vector>
00021 #include <utility>
00022 #include <deque>
00023 
00024 #include "itkArray.h"
00025 #include "itkArray2D.h"
00026 #include "itkMersenneTwisterRandomVariateGenerator.h"
00027 #include "vnl/vnl_diag_matrix.h"
00028 
00029 
00030 namespace itk
00031 {
00047   class CMAEvolutionStrategyOptimizer :
00048     public ScaledSingleValuedNonLinearOptimizer
00049   {
00050   public:
00051 
00052     typedef CMAEvolutionStrategyOptimizer     Self;
00053     typedef ScaledSingleValuedNonLinearOptimizer  Superclass;
00054     typedef SmartPointer<Self>                    Pointer;
00055     typedef SmartPointer<const Self>              ConstPointer;
00056 
00057     itkNewMacro(Self);
00058     itkTypeMacro(CMAEvolutionStrategyOptimizer,
00059       ScaledSingleValuedNonLinearOptimizer);
00060 
00061     typedef Superclass::ParametersType            ParametersType;
00062     typedef Superclass::DerivativeType            DerivativeType;
00063     typedef Superclass::CostFunctionType          CostFunctionType;
00064     typedef Superclass::ScaledCostFunctionType    ScaledCostFunctionType;
00065     typedef Superclass::MeasureType               MeasureType;
00066     typedef Superclass::ScalesType                ScalesType;
00067 
00068     typedef enum {
00069       MetricError,
00070       MaximumNumberOfIterations,
00071       PositionToleranceMin,
00072       PositionToleranceMax,
00073       ValueTolerance,
00074       ZeroStepLength,
00075       Unknown }                                   StopConditionType;
00076 
00077     virtual void StartOptimization(void);
00078     virtual void ResumeOptimization(void);
00079     virtual void StopOptimization(void);
00080 
00082     itkGetConstMacro(CurrentIteration, unsigned long);
00083 
00085     itkGetConstMacro(CurrentValue, MeasureType);
00086 
00088     itkGetConstReferenceMacro(StopCondition, StopConditionType);
00089 
00091     itkGetConstMacro(CurrentSigma, double);
00092 
00094     itkGetConstMacro(CurrentMinimumD, double);
00095 
00097     itkGetConstMacro(CurrentMaximumD, double);
00098 
00101     virtual double GetCurrentStepLength( void ) const
00102     { return this->GetCurrentSigma() * this->GetCurrentMaximumD();  }
00103 
00109     itkGetConstReferenceMacro( CurrentScaledStep, ParametersType );
00110 
00112     itkGetConstMacro(MaximumNumberOfIterations, unsigned long);
00113     itkSetClampMacro(MaximumNumberOfIterations, unsigned long,
00114       1, NumericTraits<unsigned long>::max());
00115 
00120     itkSetMacro( PopulationSize, unsigned int );
00121     itkGetConstMacro( PopulationSize, unsigned int );
00122 
00127     itkSetMacro( NumberOfParents, unsigned int );
00128     itkGetConstMacro( NumberOfParents, unsigned int );
00129 
00133     itkSetClampMacro( InitialSigma, double, NumericTraits<double>::min(), NumericTraits<double>::max() );
00134     itkGetConstMacro( InitialSigma, double );
00135 
00139     itkSetClampMacro( MaximumDeviation, double, 0.0, NumericTraits<double>::max() );
00140     itkGetConstMacro( MaximumDeviation, double );
00141 
00145     itkSetClampMacro( MinimumDeviation, double, 0.0, NumericTraits<double>::max() );
00146     itkGetConstMacro( MinimumDeviation, double );
00147 
00157     itkSetMacro(UseDecayingSigma, bool);
00158     itkGetConstMacro( UseDecayingSigma, bool );
00159 
00162     itkSetClampMacro( SigmaDecayA, double, 0.0, NumericTraits<double>::max() );
00163     itkGetConstMacro( SigmaDecayA, double );
00164 
00167     itkSetClampMacro( SigmaDecayAlpha, double, 0.0, 1.0 );
00168     itkGetConstMacro( SigmaDecayAlpha, double );
00169 
00175     itkSetMacro( UseCovarianceMatrixAdaptation, bool );
00176     itkGetConstMacro( UseCovarianceMatrixAdaptation, bool );
00177 
00184     itkSetStringMacro( RecombinationWeightsPreset );
00185     itkGetStringMacro( RecombinationWeightsPreset );
00186 
00190     itkSetMacro(UpdateBDPeriod, unsigned int);
00191     itkGetConstMacro(UpdateBDPeriod, unsigned int);
00192 
00198     itkSetMacro( PositionToleranceMin, double );
00199     itkGetConstMacro( PositionToleranceMin, double );
00200 
00205     itkSetMacro( PositionToleranceMax, double );
00206     itkGetConstMacro( PositionToleranceMax, double );
00207 
00214     itkSetMacro( ValueTolerance, double );
00215     itkGetConstMacro( ValueTolerance, double );
00216 
00217   protected:
00218 
00219     typedef Array<double>                     RecombinationWeightsType;
00220     typedef vnl_diag_matrix<double>           EigenValueMatrixType;
00221     typedef Array2D<double>                   CovarianceMatrixType;
00222     typedef std::vector< ParametersType >     ParameterContainerType;
00223     typedef std::deque< MeasureType >         MeasureHistoryType;
00224 
00225     typedef
00226       std::pair< MeasureType, unsigned int >  MeasureIndexPairType;
00227     typedef std::vector<MeasureIndexPairType> MeasureContainerType;
00228 
00229     typedef itk::Statistics::MersenneTwisterRandomVariateGenerator RandomGeneratorType;
00230 
00232     RandomGeneratorType::Pointer m_RandomGenerator;
00233 
00235     MeasureType                   m_CurrentValue;
00236 
00238     unsigned long                 m_CurrentIteration;
00239 
00241     StopConditionType             m_StopCondition;
00242 
00244     bool                          m_Stop;
00245 
00247     bool                          m_UseCovarianceMatrixAdaptation;
00248     unsigned int                  m_PopulationSize;
00249     unsigned int                  m_NumberOfParents;
00250     unsigned int                  m_UpdateBDPeriod;
00251 
00256     double                        m_EffectiveMu;
00258     double                        m_ConjugateEvolutionPathConstant;
00260     double                        m_SigmaDampingConstant;
00262     double                        m_CovarianceMatrixAdaptationConstant;
00264     double                        m_EvolutionPathConstant;
00266     double                        m_CovarianceMatrixAdaptationWeight;
00268     double                        m_ExpectationNormNormalDistribution;
00270     RecombinationWeightsType      m_RecombinationWeights;
00272     unsigned long                 m_HistoryLength;
00273 
00275     double                        m_CurrentSigma;
00276 
00278     double                        m_CurrentMinimumD;
00280     double                        m_CurrentMaximumD;
00281 
00283     bool                          m_Heaviside;
00284 
00286     ParameterContainerType        m_SearchDirs;
00288     ParameterContainerType        m_NormalizedSearchDirs;
00290     MeasureContainerType          m_CostFunctionValues;
00292     ParametersType                m_CurrentScaledStep;
00294     ParametersType                m_CurrentNormalizedStep;
00296     ParametersType                m_EvolutionPath;
00298     ParametersType                m_ConjugateEvolutionPath;
00299 
00301     MeasureHistoryType            m_MeasureHistory;
00302 
00304     CovarianceMatrixType          m_C;
00306     CovarianceMatrixType          m_B;
00308     EigenValueMatrixType          m_D;
00309 
00311     CMAEvolutionStrategyOptimizer();
00312 
00314     virtual ~CMAEvolutionStrategyOptimizer(){};
00315 
00317     void PrintSelf(std::ostream& os, Indent indent) const;
00318 
00333     virtual void InitializeConstants(void);
00334 
00347     virtual void InitializeProgressVariables(void);
00348 
00350     virtual void InitializeBCD(void);
00351 
00354     virtual void GenerateOffspring(void);
00355 
00357     virtual void SortCostFunctionValues(void);
00358 
00360     virtual void AdvanceOneStep(void);
00361 
00363     virtual void UpdateConjugateEvolutionPath(void);
00364 
00366     virtual void UpdateHeaviside( void );
00367 
00369     virtual void UpdateEvolutionPath(void);
00370 
00372     virtual void UpdateC(void);
00373 
00375     virtual void UpdateSigma(void);
00376 
00378     virtual void UpdateBD(void);
00379 
00389     virtual void FixNumericalErrors(void);
00390 
00401     virtual bool TestConvergence( bool firstCheck );
00402 
00403   private:
00404     CMAEvolutionStrategyOptimizer(const Self&); //purposely not implemented
00405     void operator=(const Self&); //purposely not implemented
00406 
00408     unsigned long                 m_MaximumNumberOfIterations;
00409     bool                          m_UseDecayingSigma;
00410     double                        m_InitialSigma;
00411     double                        m_SigmaDecayA;
00412     double                        m_SigmaDecayAlpha;
00413     std::string                   m_RecombinationWeightsPreset;
00414     double                        m_MaximumDeviation;
00415     double                        m_MinimumDeviation;
00416     double                        m_PositionToleranceMax;
00417     double                        m_PositionToleranceMin;
00418     double                        m_ValueTolerance;
00419 
00420   }; // end class CMAEvolutionStrategyOptimizer
00421 
00422 
00423 } // end namespace itk
00424 
00425 
00426 #endif //#ifndef __itkCMAEvolutionStrategyOptimizer_h
00427 


Generated on 24-10-2011 for elastix by doxygen 1.7.4 elastix logo