00001 #ifndef Crossover_h
00002 #define Crossover_h
00003
00004 #include "Individual.h"
00005
00006 class Individual;
00007 typedef boost::shared_ptr<Individual> IndividualP;
00008 class Genotype;
00009 typedef boost::shared_ptr<Genotype> GenotypeP;
00010
00017 class CrossoverOp
00018 {
00019 public:
00020 CrossoverOp()
00021 { probability_ = 0; }
00022
00027 virtual bool mate(GenotypeP, GenotypeP, GenotypeP) = 0;
00028
00032 virtual bool initialize(StateP)
00033 { return true; }
00034
00038 virtual void registerParameters(StateP)
00039 { }
00040
00041 virtual ~CrossoverOp()
00042 { }
00043
00044 StateP state_;
00045 double probability_;
00046 GenotypeP myGenotype_;
00047 };
00048 typedef boost::shared_ptr<CrossoverOp> CrossoverOpP;
00049
00050
00057 class Crossover
00058 {
00059 public:
00060 bool mate(IndividualP ind1, IndividualP ind2, IndividualP child);
00061 void registerParameters(StateP);
00062 bool initialize(StateP);
00063
00064 std::vector< std::vector<CrossoverOpP> > operators;
00065 std::vector< std::vector<double> > opProb;
00066
00067 protected:
00068 StateP state_;
00069 uint crxGenotypes_;
00070 std::vector<bool> protectedGenotypes_;
00071 };
00072 typedef boost::shared_ptr<Crossover> CrossoverP;
00073
00074 #endif // Crossover_h