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
00039 typedef eoRealParticle < double >Indi;
00040
00041
00042 double f (const Indi & _indi)
00043 {
00044
00045
00046
00047 double sum;
00048 sum=_indi[1]-pow(_indi[0],2);
00049 sum=100*pow(sum,2);
00050 sum+=pow((1-_indi[0]),2);
00051 return (-sum);
00052 }
00053
00054 int main (int __argc, char *__argv[])
00055 {
00056
00057
00058 peo :: init( __argc, __argv );
00059
00060
00061 eoParser parser(__argc, __argv);
00062 unsigned int POP_SIZE = parser.createParam((unsigned int)(20), "popSize", "Population size",'P',"Param").value();
00063 unsigned int MAX_GEN = parser.createParam((unsigned int)(100), "maxGen", "Maximum number of generations",'G',"Param").value();
00064 unsigned int VEC_SIZE = parser.createParam((unsigned int)(2), "vecSize", "Vector size",'V',"Param").value();
00065 double INIT_POSITION_MIN = parser.createParam(-2.0, "pMin", "Init position min",'N',"Param").value();
00066 double INIT_POSITION_MAX = parser.createParam(2.0, "pMax", "Init position max",'X',"Param").value();
00067 double INIT_VELOCITY_MIN = parser.createParam(-1.0, "vMin", "Init velocity min",'n',"Param").value();
00068 double INIT_VELOCITY_MAX = parser.createParam(1.0, "vMax", "Init velocity max",'x',"Param").value();
00069 double weight = parser.createParam(1.0, "weight", "Weight",'w',"Param").value();
00070 double C1 = parser.createParam(0.5, "c1", "C1",'1',"Param").value();
00071 double C2 = parser.createParam(2.0, "c2t", "C2",'2',"Param").value();
00072 unsigned int NEIGHBORHOOD_SIZE = parser.createParam((unsigned int)(6), "neighSize", "Neighborhood size",'H',"Param").value();
00073 rng.reseed (time(0));
00074
00075
00076 eoGenContinue < Indi > genContPara (MAX_GEN);
00077 eoCombinedContinue <Indi> continuatorPara (genContPara);
00078 eoCheckPoint<Indi> checkpoint(continuatorPara);
00079
00080
00081 peoEvalFunc<Indi, double, const Indi& > plainEval(f);
00082 peoPopEval< Indi > eval(plainEval);
00083
00084
00085 eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX);
00086 eoInitFixedLength < Indi > random (VEC_SIZE, uGen);
00087
00088
00089 eoUniformGenerator < double >sGen (INIT_VELOCITY_MIN, INIT_VELOCITY_MAX);
00090 eoVelocityInitFixedLength < Indi > veloRandom (VEC_SIZE, sGen);
00091
00092
00093 eoFirstIsBestInit < Indi > localInit;
00094
00095
00096 eoRealVectorBounds bndsFlight(VEC_SIZE,INIT_POSITION_MIN,INIT_POSITION_MAX);
00097 eoStandardFlight < Indi > flight(bndsFlight);
00098
00099
00100 eoPop < Indi > pop;
00101 pop.append (POP_SIZE, random);
00102
00103
00104 eoLinearTopology<Indi> topology(NEIGHBORHOOD_SIZE);
00105 eoRealVectorBounds bnds(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX);
00106 eoStandardVelocity < Indi > velocity (topology,weight,C1,C2,bnds);
00107
00108
00109 eoInitializer <Indi> init(eval,veloRandom,localInit,topology,pop);
00110
00111
00112 eoSyncEasyPSO <Indi> psa(init,checkpoint,eval, velocity, flight);
00113 peoWrapper parallelPSO( psa, pop);
00114 eval.setOwner(parallelPSO);
00115
00116 peo :: run();
00117 peo :: finalize();
00118 if (getNodeRank()==1)
00119 {
00120 pop.sort();
00121 std::cout << "Final population :\n" << pop << std::endl;
00122 }
00123 }