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 unsigned int MIG_FREQ = parser.createParam((unsigned int)(10), "migFreq", "Migration frequency",'F',"Param").value();
00065 unsigned int MIG_SIZE = parser.createParam((unsigned int)(5), "migSize", "Migration size",'S',"Param").value();
00066 rng.reseed (time(0));
00067
00068
00069 RingTopology topology;
00070
00071
00072
00073
00074 eoGenContinue < Indi > genContPara (MAX_GEN);
00075 eoCombinedContinue <Indi> continuatorPara (genContPara);
00076 eoCheckPoint<Indi> checkpoint(continuatorPara);
00077 peoEvalFunc<Indi> mainEval( f );
00078 peoPopEval <Indi> eval(mainEval);
00079 eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX);
00080 eoInitFixedLength < Indi > random (VEC_SIZE, uGen);
00081 eoRankingSelect<Indi> selectionStrategy;
00082 eoSelectNumber<Indi> select(selectionStrategy,POP_SIZE);
00083 eoSegmentCrossover<Indi> crossover;
00084 eoUniformMutation<Indi> mutation(EPSILON);
00085 peoTransform<Indi> transform(crossover,CROSS_RATE,mutation,MUT_RATE);
00086 eoPop < Indi > pop;
00087 pop.append (POP_SIZE, random);
00088
00089
00090
00091
00092 eoRandomSelect<Indi> mig_select_one;
00093 eoSelector <Indi, eoPop<Indi> > mig_select (mig_select_one,MIG_SIZE,pop);
00094
00095 eoPlusReplacement<Indi> replace;
00096 eoReplace <Indi, eoPop<Indi> > mig_replace (replace,pop);
00097
00098 peoSyncIslandMig<eoPop<Indi>, eoPop<Indi> > mig(MIG_FREQ,mig_select,mig_replace,topology);
00099 checkpoint.add(mig);
00100
00101 eoEasyEA< Indi > eaAlg( checkpoint, eval, select, transform, replace );
00102 peoWrapper parallelEA( eaAlg, pop);
00103 eval.setOwner(parallelEA);
00104 transform.setOwner(parallelEA);
00105
00106 mig.setOwner(parallelEA);
00107
00108
00109
00110
00111
00112
00113 eoGenContinue < Indi > genContPara2 (MAX_GEN);
00114 eoCombinedContinue <Indi> continuatorPara2 (genContPara2);
00115 eoCheckPoint<Indi> checkpoint2(continuatorPara2);
00116 peoEvalFunc<Indi> mainEval2( f );
00117 peoPopEval <Indi> eval2(mainEval2);
00118 eoUniformGenerator < double >uGen2 (INIT_POSITION_MIN, INIT_POSITION_MAX);
00119 eoInitFixedLength < Indi > random2 (VEC_SIZE, uGen2);
00120 eoRankingSelect<Indi> selectionStrategy2;
00121 eoSelectNumber<Indi> select2(selectionStrategy2,POP_SIZE);
00122 eoSegmentCrossover<Indi> crossover2;
00123 eoUniformMutation<Indi> mutation2(EPSILON);
00124 peoTransform<Indi> transform2(crossover2,CROSS_RATE,mutation2,MUT_RATE);
00125 eoPop < Indi > pop2;
00126 pop2.append (POP_SIZE, random2);
00127 eoPlusReplacement<Indi> replace2;
00128 eoRandomSelect<Indi> mig_select_one2;
00129 eoSelector <Indi, eoPop<Indi> > mig_select2 (mig_select_one2,MIG_SIZE,pop2);
00130 eoReplace <Indi, eoPop<Indi> > mig_replace2 (replace2,pop2);
00131 peoSyncIslandMig<eoPop<Indi>, eoPop<Indi> > mig2(MIG_FREQ,mig_select2,mig_replace2,topology);
00132 checkpoint2.add(mig2);
00133 eoEasyEA< Indi > eaAlg2( checkpoint2, eval2, select2, transform2, replace2 );
00134 peoWrapper parallelEA2( eaAlg2, pop2);
00135 eval2.setOwner(parallelEA2);
00136 transform2.setOwner(parallelEA2);
00137 mig2.setOwner(parallelEA2);
00138
00139
00140
00141 peo :: run();
00142 peo :: finalize();
00143 if (getNodeRank()==1)
00144 {
00145 pop.sort();
00146 pop2.sort();
00147 std::cout << "Final population 1 :\n" << pop << std::endl;
00148 std::cout << "Final population 2 :\n" << pop2 << std::endl;
00149 }
00150 }