diff --git a/trunk/paradiseo-peo/tutorial/Lesson4/CMakeLists.txt b/trunk/paradiseo-peo/tutorial/Lesson4/CMakeLists.txt new file mode 100644 index 000000000..7a4ac3edc --- /dev/null +++ b/trunk/paradiseo-peo/tutorial/Lesson4/CMakeLists.txt @@ -0,0 +1,98 @@ + +###################################################################################### +### 0) Set the compiler and define targets to easily run the lessons +###################################################################################### + +SET (CMAKE_CXX_COMPILER mpicxx) + +ADD_CUSTOM_TARGET(install DEPENDS ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson4/lesson.param ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson4/schema.xml) + +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson4/lesson.param + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson4) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson4/schema.xml + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson4) +###################################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src ${MO_SRC_DIR}/src ${ParadisEO-PEO_SOURCE_DIR}/src) + +###################################################################################### + + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +IF(NOT WIN32 OR CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${ParadisEO-PEO_BINARY_DIR}/lib) +ENDIF(NOT WIN32 OR CYGWIN) + +# especially for Visual Studio +IF(WIN32 AND NOT CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}\\lib\\${CMAKE_BUILD_TYPE} ${ParadisEO-PEO_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE}) +ENDIF(WIN32 AND NOT CYGWIN) +###################################################################################### + + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +ADD_EXECUTABLE(psoExample main.cpp) +ADD_DEPENDENCIES(psoExample peo rmc_mpi) +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define properties +###################################################################################### + +SET(LESSON4_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(psoExample PROPERTIES VERSION "${LESSON4_VERSION}") +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(psoExample ${XML2_LIBS} peo rmc_mpi eo eoutils) + +###################################################################################### + + +###################################################################################### +### 6) Windows advanced config - especially for Microsoft Visual Studio 8 +###################################################################################### + + IF(CMAKE_CXX_COMPILER MATCHES cl) + IF(NOT WITH_SHARED_LIBS) + IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + SET(CMAKE_CXX_FLAGS "/nologo /W3 /Gy") + SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Z7 /Od") + SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2") + SET(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O2") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MTd /Z7 /Od") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE") + + ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + ENDIF(NOT WITH_SHARED_LIBS) + ENDIF(CMAKE_CXX_COMPILER MATCHES cl) +###################################################################################### + + + diff --git a/trunk/paradiseo-peo/tutorial/Lesson4/lesson.param b/trunk/paradiseo-peo/tutorial/Lesson4/lesson.param new file mode 100644 index 000000000..6ba37c292 --- /dev/null +++ b/trunk/paradiseo-peo/tutorial/Lesson4/lesson.param @@ -0,0 +1,7 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=schema.xml \ No newline at end of file diff --git a/trunk/paradiseo-peo/tutorial/Lesson4/main.cpp b/trunk/paradiseo-peo/tutorial/Lesson4/main.cpp new file mode 100644 index 000000000..f32fe8254 --- /dev/null +++ b/trunk/paradiseo-peo/tutorial/Lesson4/main.cpp @@ -0,0 +1,90 @@ +//For define a parallel PSO or a sequential PSO +#define PARA + +#include + +typedef eoRealParticle < double >Indi; +//Evaluation function + +double f (const Indi & _indi) +{ + //Levy function f* = -21.502356 x=(1,1,1,-9.752356 ) for size = 4 + + const double PI = 4.0 * atan(1.0); + double sum=0.; + for (unsigned i = 0; i < _indi.size()-1; i++) + sum+=pow((_indi[i]-1),2)*(1+pow(sin(3*PI*_indi[i+1]),2)); + sum+=pow(sin(3*PI*_indi[0]),2); + sum+=(_indi[_indi.size()-1]-1)*(1+pow(sin(2*PI*_indi[_indi.size()-1]),2)); + return (-sum); +} + +int main (int __argc, char *__argv[]) +{ + +#ifdef PARA +//Initialization + peo :: init( __argc, __argv ); +#endif +//Parameters + const unsigned int VEC_SIZE = 4; + const unsigned int POP_SIZE = 20; + const unsigned int NEIGHBORHOOD_SIZE= 5; + const unsigned int MAX_GEN = 500; + const double INIT_POSITION_MIN = -10.0; + const double INIT_POSITION_MAX = 1.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)); +#ifndef PARA + eoEvalFuncPtr plainEval(f); + eoEvalFuncCounter < Indi > eval (plainEval); +#else + peoEvalFuncPSO plainEval(f); + eoEvalFuncCounter < Indi > evalSeq (plainEval); + peoParaPopEval< Indi > eval(plainEval); +#endif + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); +//Velocity + eoUniformGenerator < double >sGen (INIT_VELOCITY_MIN, INIT_VELOCITY_MAX); + eoVelocityInitFixedLength < Indi > veloRandom (VEC_SIZE, sGen); +//Initializing the best + eoFirstIsBestInit < Indi > localInit; +//Flight + eoRealVectorBounds bndsFlight(VEC_SIZE,INIT_POSITION_MIN,INIT_POSITION_MAX); + eoStandardFlight < Indi > flight(bndsFlight); + eoPop < Indi > pop; + pop.append (POP_SIZE, random); +#ifndef PARA + apply(eval, pop); +#else +//The first evaluation must be sequential + apply(evalSeq, pop); +#endif + apply < Indi > (veloRandom, pop); + apply < Indi > (localInit, pop); +//Topology + eoLinearTopology topology(NEIGHBORHOOD_SIZE); + topology.setup(pop); + eoRealVectorBounds bnds(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocity (topology,C1,C2,bnds); + eoGenContinue < Indi > genContPara (MAX_GEN); + eoCombinedContinue continuatorPara (genContPara); + eoCheckPoint checkpoint(continuatorPara); +#ifndef PARA +//Sequential algorithm + eoSyncEasyPSO < Indi > psa(checkpoint, eval, velocity, flight); + psa (pop); + pop.sort (); +#else +//Parallel algorithm + peoPSO < Indi > psa(checkpoint, eval, velocity, flight); + psa(pop); + peo :: run(); + peo :: finalize(); +#endif + std::cout << "Population finale :\n" << pop << std::endl; +} diff --git a/trunk/paradiseo-peo/tutorial/Lesson4/schema.xml b/trunk/paradiseo-peo/tutorial/Lesson4/schema.xml new file mode 100644 index 000000000..9b8bf316c --- /dev/null +++ b/trunk/paradiseo-peo/tutorial/Lesson4/schema.xml @@ -0,0 +1,19 @@ + + + + + + + + + 1 + 2 + + + + + + + + +