Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

mutator.h

Go to the documentation of this file.
00001 
00002 #ifndef __MUTATOR_H__
00003 #define __MUTATOR_H__
00004 
00005 #include <magic/mmath.h>
00006 
00009 class FloatMutator {
00010   public:
00023     virtual double  mutate  (double x, double min, double max, double variance) const{FORBIDDEN}
00024 };
00025 
00031 class ConstantMutator : public FloatMutator {
00032     double mVariance;
00033   public:
00039                     ConstantMutator (double var=0.22) : mVariance(var){}
00040 
00044     virtual double  mutate  (double p, double min, double max, double variance) const {
00045         //TRACE2 ("p=%f, v=%f", p, variance);
00046         double pp=p;
00047         if (max>min) { // Can be 0 -> gene is immutable
00048             // Default mutation
00049             double delta;
00050             do {
00051                 delta = gaussrnd (mVariance);
00052             } while (pp+delta<min || pp+delta>max);
00053             pp += delta;
00054         }
00055         return pp;
00056     }
00057 };
00058 
00061 class MutationMutator : public FloatMutator {
00062     double mPhi;
00063   public:
00068                     MutationMutator (double phi=0.22) : mPhi(phi){}
00069     
00075     virtual double  mutate  (double p, double min, double max, double variance) const {
00076         //TRACE2 ("p=%f, v=%f", p, variance);
00077         double pp = 1/(1+(1-p)/p*exp(-gaussrnd(mPhi)));
00078         if (pp<min)
00079             pp=min;
00080         return pp;
00081     }
00082 };
00083 
00086 class MutationSimpleMutator : public FloatMutator {
00087     double mTau;
00088   public:
00096                     MutationSimpleMutator   (int n=100) : mTau(1/sqrt(double(n))){}
00097     
00102     virtual double  mutate  (double p, double min, double max, double variance) const {
00103         //TRACE2 ("p=%f, v=%f", p, variance);
00104         double pp = p*exp(mTau*gaussrnd(1));
00105         if (pp<min)
00106             pp=min;
00107         return pp;
00108     }
00109 };
00110 
00111 
00114 class CircularMutator : public FloatMutator {
00115     double mPhi;
00116   public:
00120     virtual double  mutate  (double p, double min, double max, double variance) const {
00121         return 1/(1+(1-p)/p*exp(-mPhi*gaussrnd(1)));
00122     }
00123 };
00124 
00125 #endif
00126 

Generated on Thu Feb 10 20:12:00 2005 for NeHeP by doxygen1.2.18