00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include <peo>
00038 #include <es.h>
00039
00040 typedef eoReal<double> Indi;
00041
00042 double f (const Indi & _indi)
00043 {
00044 double sum;
00045 sum=_indi[1]-pow(_indi[0],2);
00046 sum=100*pow(sum,2);
00047 sum+=pow((1-_indi[0]),2);
00048 return (-sum);
00049 }
00050
00051 int main (int __argc, char *__argv[])
00052 {
00053
00054 peo :: init( __argc, __argv );
00055 eoParser parser(__argc, __argv);
00056 unsigned int POP_SIZE = parser.createParam((unsigned int)(20), "popSize", "Population size",'P',"Param").value();
00057 unsigned int MAX_GEN = parser.createParam((unsigned int)(100), "maxGen", "Maximum number of generations",'G',"Param").value();
00058 double EPSILON = parser.createParam(0.01, "mutEpsilon", "epsilon for mutation",'e',"Param").value();
00059 double CROSS_RATE = parser.createParam(0.25, "pCross", "Crossover probability",'C',"Param").value();
00060 double MUT_RATE = parser.createParam(0.35, "pMut", "Mutation probability",'M',"Param").value();
00061 unsigned int VEC_SIZE = parser.createParam((unsigned int)(2), "vecSize", "Vector size",'V',"Param").value();
00062 double INIT_POSITION_MIN = parser.createParam(-2.0, "pMin", "Init position min",'N',"Param").value();
00063 double INIT_POSITION_MAX = parser.createParam(2.0, "pMax", "Init position max",'X',"Param").value();
00064 rng.reseed (time(0));
00065 eoGenContinue < Indi > genContPara (MAX_GEN);
00066 eoCombinedContinue <Indi> continuatorPara (genContPara);
00067 eoCheckPoint<Indi> checkpoint(continuatorPara);
00068 peoEvalFunc<Indi> plainEval(f);
00069 peoPopEval <Indi> eval(plainEval);
00070 eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX);
00071 eoInitFixedLength < Indi > random (VEC_SIZE, uGen);
00072 eoRankingSelect<Indi> selectionStrategy;
00073 eoSelectNumber<Indi> select(selectionStrategy,POP_SIZE);
00074 eoSegmentCrossover<Indi> crossover;
00075 eoUniformMutation<Indi> mutation(EPSILON);
00076
00077
00078 peoTransform<Indi> transform(crossover,CROSS_RATE,mutation,MUT_RATE);
00079
00080 eoPlusReplacement<Indi> replace;
00081 eoPop < Indi > pop;
00082 pop.append (POP_SIZE, random);
00083 eoEasyEA< Indi > eaAlg( checkpoint, eval, select, transform, replace );
00084 peoWrapper parallelEA( eaAlg, pop);
00085 eval.setOwner(parallelEA);
00086
00087
00088 transform.setOwner (parallelEA);
00089
00090 peo :: run();
00091 peo :: finalize();
00092 if (getNodeRank()==1)
00093 {
00094 pop.sort();
00095 std::cout << "Final population :\n" << pop << std::endl;
00096 }
00097 }