diff --git a/trunk/paradiseo-peo/tutorial/Wrapper/CMakeLists.txt b/trunk/paradiseo-peo/tutorial/Wrapper/CMakeLists.txt index 48214db22..45e5b9d2a 100644 --- a/trunk/paradiseo-peo/tutorial/Wrapper/CMakeLists.txt +++ b/trunk/paradiseo-peo/tutorial/Wrapper/CMakeLists.txt @@ -66,6 +66,8 @@ ADD_EXECUTABLE(example5 main5.cpp) ADD_DEPENDENCIES(example5 tsp peo rmc_mpi) ADD_EXECUTABLE(example6 main6.cpp) ADD_DEPENDENCIES(example6 tsp peo rmc_mpi) +ADD_EXECUTABLE(example7 main7.cpp) +ADD_DEPENDENCIES(example7 peo rmc_mpi) ###################################################################################### @@ -88,5 +90,6 @@ TARGET_LINK_LIBRARIES(example3 ${XML2_LIBS} peo rmc_mpi eo eoutils) TARGET_LINK_LIBRARIES(example4 ${XML2_LIBS} peo rmc_mpi eo eoutils) TARGET_LINK_LIBRARIES(example5 ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) TARGET_LINK_LIBRARIES(example6 ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) +TARGET_LINK_LIBRARIES(example7 ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) ###################################################################################### diff --git a/trunk/paradiseo-peo/tutorial/Wrapper/main7.cpp b/trunk/paradiseo-peo/tutorial/Wrapper/main7.cpp new file mode 100644 index 000000000..1030411dd --- /dev/null +++ b/trunk/paradiseo-peo/tutorial/Wrapper/main7.cpp @@ -0,0 +1,64 @@ +#include +#include + +typedef eoRealParticle < double >Indi; + +double f (const Indi & _indi) +{ + double sum; + sum=_indi[1]-pow(_indi[0],2); + sum=100*pow(sum,2); + sum+=pow((1-_indi[0]),2); + return (-sum); +} + +int main( int __argc, char** __argv ) +{ + + peo :: init( __argc, __argv ); + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 20; + const unsigned int NEIGHBORHOOD_SIZE= 6; + const unsigned int MAX_GEN = 300; + const double INIT_POSITION_MIN = -2.0; + const double INIT_POSITION_MAX = 2.0; + const double INIT_VELOCITY_MIN = -1.; + const double INIT_VELOCITY_MAX = 1.; + const double C1 = 0.5; + const double C2 = 2.; + rng.reseed (time(0)); + eoGenContinue < Indi > genContPara (MAX_GEN); + eoCombinedContinue continuatorPara (genContPara); + eoCheckPoint checkpoint(continuatorPara); + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoUniformGenerator < double >sGen (INIT_VELOCITY_MIN, INIT_VELOCITY_MAX); + eoVelocityInitFixedLength < Indi > veloRandom (VEC_SIZE, sGen); + eoFirstIsBestInit < Indi > localInit; + eoRealVectorBounds bndsFlight(VEC_SIZE,INIT_POSITION_MIN,INIT_POSITION_MAX); + eoStandardFlight < Indi > flight(bndsFlight); + eoLinearTopology topology(NEIGHBORHOOD_SIZE); + eoRealVectorBounds bnds(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocity (topology,C1,C2,bnds); + + eoPop < Indi > pop(POP_SIZE); + eoInitFixedLength < Indi > randomSeq (VEC_SIZE, uGen); + peoSynchronousMultiStart initRandom (randomSeq); + peoParallelAlgorithmWrapper random (initRandom,pop); + initRandom.setOwner(random); + peo :: run( ); + peo :: finalize( ); + +// Parallel algorithm + + peo :: init (__argc, __argv); + peoEvalFunc plainEval(f); + peoParaPopEval< Indi > eval(plainEval); + eoInitializer init(eval,veloRandom,localInit,topology,pop); + eoSyncEasyPSO psa(init,checkpoint,eval, velocity, flight); + peoParallelAlgorithmWrapper parallelPSO( psa, pop); + eval.setOwner(parallelPSO); + peo :: run(); + peo :: finalize(); + if (getNodeRank()==1) + std::cout << "Final population :\n" << pop << std::endl; +}