00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __freESAdaptiveNormalMutation_h
00023 #define __freESAdaptiveNormalMutation_h
00024
00025 #include "freESMutationBase.h"
00026 #include <itkArray.h>
00027 #include "itkNormalVariateGenerator.h"
00028
00029 namespace FREE
00030 {
00031 namespace ES
00032 {
00033
00056 template <class TIndividual>
00057 class ITK_EXPORT AdaptiveNormalMutation:
00058 public MutationBase<TIndividual>
00059 {
00060 public:
00062 typedef AdaptiveNormalMutation<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(AdaptiveNormalMutation, MutationBase);
00072
00073 typedef typename Superclass::IndividualType IndividualType;
00074 typedef typename IndividualType::Pointer IndividualPointer;
00075 typedef typename Superclass::PopulationType PopulationType;
00076 typedef typename PopulationType::Pointer PopulationPointer;
00077
00078 void RegisterStrategicIndividualParameters(IndividualType& individual) const;
00079 void MutateStrategicIndividualParameters(IndividualType& individual, PopulationType& population) const;
00080
00081 double MutateValue(const double& value);
00082
00083 itkSetMacro( StrategicMutationVariance, double );
00084 itkGetMacro( StrategicMutationVariance, double );
00085
00086 itkSetMacro( MutateValueVariance, double );
00087 itkGetMacro( MutateValueVariance, double );
00088
00090 typedef itk::Statistics::NormalVariateGenerator VariateGeneratorType ;
00091 VariateGeneratorType& GetRandomGenerator() {return *(m_RandomGenerator.GetPointer());};
00092
00093 protected:
00094 AdaptiveNormalMutation() ;
00095
00097 double m_StrategicMutationVariance;
00099 double m_MutateValueVariance;
00100
00101 VariateGeneratorType::Pointer m_RandomGenerator;
00102
00103 void MutateObjectivParameters(IndividualType* pIndividual, PopulationType* pPopulation) const;
00104
00105 private:
00106 AdaptiveNormalMutation(Self const&);
00107
00108 } ;
00109
00110 }
00111 }
00112
00113
00114 #ifndef ITK_MANUAL_INSTANTIATION
00115 #include "freESAdaptiveNormalMutation.txx"
00116 #endif
00117
00118 #endif