00001 #ifndef Clonalg_h 00002 #define Clonalg_h 00003 00004 #include "Algorithm.h" 00005 #include "floatingpoint/FloatingPoint.h" 00006 00024 class Clonalg : public Algorithm 00025 { 00026 protected: 00027 00028 double ubound; 00029 double lbound; 00030 uint dimension; 00031 bool areGenotypesAdded_; 00032 00033 uint n; 00034 double beta; 00035 double c; 00036 double d; 00037 std::string cloningVersion; 00038 std::string selectionScheme; 00039 00041 static bool sortPopulationByFitness (IndividualP ab1,IndividualP ab2) { return ( ab1->fitness->isBetterThan(ab2->fitness)); } 00042 00044 static bool sortPopulationByParentAndFitness (IndividualP ab1,IndividualP ab2) 00045 { 00046 FloatingPointP flp = boost::dynamic_pointer_cast<FloatingPoint::FloatingPoint> (ab1->getGenotype(1)); 00047 double &parentAb1 = flp->realValue[0]; 00048 flp = boost::dynamic_pointer_cast<FloatingPoint::FloatingPoint> (ab2->getGenotype(1)); 00049 double &parentAb2 = flp->realValue[0]; 00050 00051 if (parentAb1 <parentAb2) return true; 00052 if (parentAb1 == parentAb2) return (ab1->fitness->isBetterThan(ab2->fitness)); 00053 00054 return false; 00055 } 00056 00057 public: 00058 00059 Clonalg(); 00060 void registerParameters(StateP state); 00061 bool initialize(StateP state); 00062 bool advanceGeneration(StateP state, DemeP deme); 00063 00064 bool markAntibodies(DemeP deme); 00065 bool cloningPhase(StateP state, DemeP deme, std::vector<IndividualP> &clones); 00066 bool hypermutationPhase(StateP state, DemeP deme, std::vector<IndividualP> &clones); 00067 bool selectionPhase(StateP state, DemeP deme, std::vector<IndividualP> &clones); 00068 bool birthPhase(StateP state, DemeP deme, std::vector<IndividualP> &clones); 00069 bool replacePopulation(StateP state, DemeP deme, std::vector<IndividualP> &clones); 00070 00071 }; 00072 typedef boost::shared_ptr<Clonalg> ClonalgP; 00073 00074 00075 #endif // Clonalg_h 00076