diff --git a/trunk/paradiseo-peo/test/CMakeLists.txt b/trunk/paradiseo-peo/test/CMakeLists.txt index aa594ec9a..c88dce393 100644 --- a/trunk/paradiseo-peo/test/CMakeLists.txt +++ b/trunk/paradiseo-peo/test/CMakeLists.txt @@ -5,6 +5,7 @@ ############################################################################### + ###################################################################################### ### 1) Include the sources ###################################################################################### @@ -13,7 +14,24 @@ INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src) INCLUDE_DIRECTORIES(${ParadisEO-PEO_SOURCE_DIR}/src) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) +INCLUDE(CheckLibraryExists) +SET (CMAKE_CXX_COMPILER mpicxx) +ADD_CUSTOM_TARGET(install DEPENDS ${ParadisEO-PEO_SOURCE_DIR}/test/lesson.param ${ParadisEO-PEO_SOURCE_DIR}/test/schema.xml) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/test/lesson.param + ${ParadisEO-PEO_BINARY_DIR}/test) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/test/schema.xml + ${ParadisEO-PEO_BINARY_DIR}/test) ###################################################################################### @@ -22,7 +40,7 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) ###################################################################################### IF(NOT WIN32 OR CYGWIN) - LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${ParadisEO-PEO_BINARY_DIR}/lib) + LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${ParadisEO-PEO_BINARY_DIR}/lib ) ENDIF(NOT WIN32 OR CYGWIN) # especially for Visual Studio @@ -39,9 +57,14 @@ ENDIF(WIN32 AND NOT CYGWIN) ### 3) Define your targets and link the librairies ###################################################################################### -SET (TEST_LIST t-peo) +SET (TEST_LIST t-peo + t-peoPSO + ) + +SET (TEST_LIBRARY t-peoPSOPara) + -FOREACH (test ${TEST_LIST}) +FOREACH (test ${TEST_LIST} ${TEST_LIBRARY}) SET ("T_${test}_SOURCES" "${test}.cpp") ENDFOREACH (test) @@ -49,14 +72,17 @@ ENDFOREACH (test) IF(ENABLE_CMAKE_TESTING) # Add the tests + FOREACH (test ${TEST_LIST} ${TEST_LIBRARY}) + ADD_EXECUTABLE(${test} ${T_${test}_SOURCES}) + ENDFOREACH (test) + FOREACH (test ${TEST_LIST}) - ADD_EXECUTABLE(${test} ${T_${test}_SOURCES}) - ADD_TEST(${test} ${test}) + ADD_TEST(${test} ${test}) ENDFOREACH (test) # Link the librairies - FOREACH (test ${TEST_LIST}) - TARGET_LINK_LIBRARIES(${test} peo rmc_mpi ga es eoutils eo) + FOREACH (test ${TEST_LIST} ${TEST_LIBRARY}) + TARGET_LINK_LIBRARIES(${test} peo ${XML2_LIBS} rmc_mpi ga es eoutils eo) ENDFOREACH (test) ENDIF(ENABLE_CMAKE_TESTING) diff --git a/trunk/paradiseo-peo/test/lesson.param b/trunk/paradiseo-peo/test/lesson.param new file mode 100644 index 000000000..eb843c65f --- /dev/null +++ b/trunk/paradiseo-peo/test/lesson.param @@ -0,0 +1,12 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=schema.xml + +## parameters + +--inst=../examples/tsp/benchs/eil101.tsp + diff --git a/trunk/paradiseo-peo/test/schema.xml b/trunk/paradiseo-peo/test/schema.xml new file mode 100644 index 000000000..9b8bf316c --- /dev/null +++ b/trunk/paradiseo-peo/test/schema.xml @@ -0,0 +1,19 @@ + + + + + + + + + 1 + 2 + + + + + + + + + diff --git a/trunk/paradiseo-peo/test/t-peoPSO.cpp b/trunk/paradiseo-peo/test/t-peoPSO.cpp new file mode 100644 index 000000000..90cb5e349 --- /dev/null +++ b/trunk/paradiseo-peo/test/t-peoPSO.cpp @@ -0,0 +1,119 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* clive.canape@inria.fr +*/ +//----------------------------------------------------------------------------- +// t-peoPSO.cpp +//----------------------------------------------------------------------------- + +#include + +#define N 4 + +typedef eoRealParticle < double >Indi; +double f (const Indi & _indi) +{ + double sum = 0; + for (unsigned i = 0; i < _indi.size (); i++) + sum += pow(_indi[i],2); + return (-sum); +} + +double peoPSOSeq () +{ + clock_t beginSeq,endSeq; + double timeSeq; + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 10; + const unsigned int NEIGHBORHOOD_SIZE= 5; + const unsigned int MAX_GEN = 5000; + const double FIT_CONT = -1e-6; + const double INIT_POSITION_MIN = -5.0; + const double INIT_POSITION_MAX = 5.0; + const double INIT_VELOCITY_MIN = -1; + const double INIT_VELOCITY_MAX = 1; + const double C1 = 2; + const double C2 = 2; + rng.reseed (36); + beginSeq=clock(); + eoEvalFuncPtr plainEvalSeq(f); + eoEvalFuncCounter < Indi > evalSeq (plainEvalSeq); + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); + 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); + eoPop < Indi > popSeq; + popSeq.append (POP_SIZE, random); + apply(evalSeq, popSeq);; + apply < Indi > (veloRandom, popSeq); + apply < Indi > (localInit, popSeq); + eoLinearTopology topologySeq(NEIGHBORHOOD_SIZE); + topologySeq.setup(popSeq); + eoRealVectorBounds bndsSeq(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocitySeq (topologySeq,C1,C2,bndsSeq); + eoGenContinue < Indi > genContSeq (MAX_GEN); + eoFitContinue < Indi > fitContSeq (FIT_CONT); + eoCombinedContinue continuatorSeq (genContSeq); + continuatorSeq.add(fitContSeq); + eoCheckPoint checkpointSeq(continuatorSeq); + eoSyncEasyPSO < Indi > psaSeq(checkpointSeq, evalSeq, velocitySeq, flight); +//Sequential + psaSeq (popSeq); + popSeq.sort (); + endSeq=clock(); + timeSeq = endSeq-beginSeq; + return timeSeq; +} + +void peoPSOPara(long int arg) +{ + char *tmp="mpiexec -n ",*tmp2=" ./t-peoPSOPara @lesson.param ",tmp3[4],buffer[256]; + sprintf(tmp3,"%d",N); + strcpy(buffer,tmp); + strcat(buffer,tmp3); + strcat(buffer,tmp2); + sprintf(tmp3,"%ld",arg); + strcat(buffer,tmp3); + system(buffer); +} + +int main (int __argc, char *__argv[]) +{ + long int timeSeq; + timeSeq=(long int)peoPSOSeq (); + peoPSOPara(timeSeq); +} diff --git a/trunk/paradiseo-peo/test/t-peoPSOPara.cpp b/trunk/paradiseo-peo/test/t-peoPSOPara.cpp new file mode 100644 index 000000000..1ae3d10cf --- /dev/null +++ b/trunk/paradiseo-peo/test/t-peoPSOPara.cpp @@ -0,0 +1,107 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* clive.canape@inria.fr +*/ +//----------------------------------------------------------------------------- +// t-peoPSOPara.cpp +//----------------------------------------------------------------------------- + +#include +#include "../src/rmc/mpi/schema.h" +#include "../src/rmc/mpi/node.h" + +typedef eoRealParticle < double >Indi; +double f (const Indi & _indi) +{ + double sum = 0; + for (unsigned i = 0; i < _indi.size (); i++) + sum += pow(_indi[i],2); + return (-sum); +} + +int main (int __argc, char *__argv[]) +{ + peo :: init( __argc, __argv ); + clock_t begin,end; + double time; + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 10; + const unsigned int NEIGHBORHOOD_SIZE= 5; + const unsigned int MAX_GEN = 500; + const double FIT_CONT = -1e-6; + const double INIT_POSITION_MIN = -5.0; + const double INIT_POSITION_MAX = 5.0; + const double INIT_VELOCITY_MIN = -1; + const double INIT_VELOCITY_MAX = 1; + const double C1 = 2; + const double C2 = 2; + rng.reseed (36); + if((isScheduleNode())&&(__argc >= 3)) + begin=clock(); + peoEvalFuncPSO plainEvalPara(f); + eoEvalFuncCounter < Indi > evalStartPara (plainEvalPara); + peoParaPopEval< Indi > evalPara(plainEvalPara); + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); + 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); + eoPop < Indi > popPara; + popPara.append (POP_SIZE, random); + apply(evalStartPara, popPara); + apply < Indi > (veloRandom, popPara); + apply < Indi > (localInit, popPara); + eoLinearTopology topologyPara(NEIGHBORHOOD_SIZE); + topologyPara.setup(popPara); + eoRealVectorBounds bndsPara(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocityPara (topologyPara,C1,C2,bndsPara); + eoGenContinue < Indi > genContPara (MAX_GEN); + eoFitContinue < Indi > fitContPara (FIT_CONT); + eoCombinedContinue continuatorPara (genContPara); + continuatorPara.add(fitContPara); + eoCheckPoint checkpointPara(continuatorPara); + peoPSO < Indi > psaPara(checkpointPara, evalPara, velocityPara, flight); + psaPara(popPara); + peo :: run(); + peo :: finalize(); + if((isScheduleNode())&&(__argc >= 3)) + { + end=clock(); + time=end-begin; + std::cout<<"\n\nEfficiency : "<<(atoi(__argv[2])/(time*getNumberOfNodes()))<<"\n"; + } + return 1; +}