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 00018 class CrossoverOp 00019 { 00020 public: 00021 CrossoverOp() 00022 { probability_ = 0; } 00023 00028 virtual bool mate(GenotypeP, GenotypeP, GenotypeP) = 0; 00029 00031 virtual bool initialize(StateP) 00032 { return true; } 00033 00035 virtual void registerParameters(StateP) 00036 { } 00037 00038 virtual ~CrossoverOp() 00039 { } 00040 00041 StateP state_; 00042 double probability_; 00043 GenotypeP myGenotype_; 00044 }; 00045 typedef boost::shared_ptr<CrossoverOp> CrossoverOpP; 00046 00047 00056 class Crossover 00057 { 00058 public: 00059 bool mate(IndividualP ind1, IndividualP ind2, IndividualP child); 00060 void registerParameters(StateP); 00061 bool initialize(StateP); 00062 00063 std::vector< std::vector<CrossoverOpP> > operators; 00064 std::vector< std::vector<double> > opProb; 00065 00066 protected: 00067 StateP state_; 00068 uint crxGenotypes_; 00069 std::vector<bool> protectedGenotypes_; 00070 }; 00071 typedef boost::shared_ptr<Crossover> CrossoverP; 00072 00073 #endif // Crossover_h