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