00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __freESAdaptiveCovarianceMutation_h
00018 #define __freESAdaptiveCovarianceMutation_h
00019
00020 #include "freESMutationBase.h"
00021 #include <itkArray.h>
00022 #include "itkNormalVariateGenerator.h"
00023
00024 namespace FREE
00025 {
00026 namespace ES
00027 {
00028
00056 template <class TIndividual>
00057 class ITK_EXPORT AdaptiveCovarianceMutation:
00058 public MutationBase<TIndividual>
00059 {
00060 public:
00062 typedef AdaptiveCovarianceMutation<TIndividual> Self ;
00063 typedef MutationBase<TIndividual> Superclass;
00064 typedef itk::SmartPointer<Self> Pointer;
00065 typedef itk::SmartPointer<const Self> ConstPointer;
00066
00068 itkNewMacro(Self);
00069
00071 itkTypeMacro(AdaptiveCovarianceMutation, MutationBase);
00072
00073 void RegisterStrategicIndividualParameters(IndividualType& individual) const;
00074 void MutateStrategicIndividualParameters(IndividualType& individual, PopulationType& population) const;
00075
00076 double MutateValue(const double& value);
00077
00078 itkSetMacro( StrategicMutationVariance, double );
00079 itkGetMacro( StrategicMutationVariance, double );
00080
00081 itkSetMacro( MutateValueVariance, double );
00082 itkGetMacro( MutateValueVariance, double );
00083
00085 typedef itk::Statistics::NormalVariateGenerator VariateGeneratorType ;
00086 VariateGeneratorType& GetRandomGenerator() {return *(m_RandomGenerator.GetPointer());};
00087
00088 protected:
00089 AdaptiveCovarianceMutation() ;
00090
00092 double m_StrategicMutationVariance;
00094 double m_MutateValueVariance;
00095
00096 VariateGeneratorType::Pointer m_RandomGenerator;
00097
00098 void MutateObjectivParameters(IndividualType* pIndividual, PopulationType* pPopulation) const;
00099
00100 private:
00101 AdaptiveCovarianceMutation(Self const&);
00102
00103 } ;
00104
00105 }
00106 }
00107
00108
00109 #ifndef ITK_MANUAL_INSTANTIATION
00110 #include "freESAdaptiveCovarianceMutation.txx"
00111 #endif
00112
00113 #endif