diff --git a/trunk/paradiseo-peo/CMakeLists.txt b/trunk/paradiseo-peo/CMakeLists.txt index b95e6b42d..61a1aef56 100644 --- a/trunk/paradiseo-peo/CMakeLists.txt +++ b/trunk/paradiseo-peo/CMakeLists.txt @@ -155,7 +155,7 @@ SUBDIRS(doc src test tutorial) ### 7) Test config ###################################################################################### -#SET(ENABLE_CMAKE_TESTING TRUE CACHE BOOL "Should we test using Dart") +SET(ENABLE_CMAKE_TESTING TRUE CACHE BOOL "Should we test using Dart") IF (ENABLE_CMAKE_TESTING) ENABLE_TESTING() diff --git a/trunk/paradiseo-peo/src/peo.h b/trunk/paradiseo-peo/src/peo.h index 0fe8599ff..a83c4e0f9 100644 --- a/trunk/paradiseo-peo/src/peo.h +++ b/trunk/paradiseo-peo/src/peo.h @@ -344,8 +344,6 @@ /* <------- components for parallel algorithms -------> */ /* Parallel PSO */ -#include "peoPSOSelect.h" -#include "peoWorstPositionReplacement.h" -#include "peoGlobalBestVelocity.h" +#include "peoPSO.h" #endif diff --git a/trunk/paradiseo-peo/src/peoGlobalBestVelocity.h b/trunk/paradiseo-peo/src/peoPSO.h similarity index 63% rename from trunk/paradiseo-peo/src/peoGlobalBestVelocity.h rename to trunk/paradiseo-peo/src/peoPSO.h index 3b8bbaa26..abe6bd477 100644 --- a/trunk/paradiseo-peo/src/peoGlobalBestVelocity.h +++ b/trunk/paradiseo-peo/src/peoPSO.h @@ -1,4 +1,4 @@ -/* +/* * * (c) OPAC Team, October 2007 * @@ -33,11 +33,9 @@ * Contact: clive.canape@inria.fr */ -#ifndef _peoGlobalBestVelocity_h -#define _peoGlobalBestVelocity_h +#ifndef peoPSO_h +#define peoPSO_h - -//----------------------------------------------------------------------------- #include #include #include @@ -45,7 +43,39 @@ #include #include #include +#include + +//! @class peoPSOSelect +//! @brief Specific class for a selection of a population of a PSO +//! @see eoSelectOne +//! @version 1.1 +//! @date october 2007 +template class peoPSOSelect: public eoSelectOne + { + public: + + //! @brief Constructor + //! @param eoTopology < POT > & _topology + peoPSOSelect(eoTopology < POT > & _topology):topology(_topology) + {} + + //! @brief typedef : creation of Fitness + typedef typename PO < POT >::Fitness Fitness; + + //! @brief Virtual operator + //! @param eoPop& _pop + //! @return POT& + virtual const POT& operator()(const eoPop& _pop) + { + return topology.globalBest(_pop); + } + + private: + //! @param eoTopology < POT > & topology + eoTopology < POT > & topology; + }; + //! @class peoGlobalBestVelocity //! @brief Specific class for a replacement thanks to the velocity migration of a population of a PSO //! @see eoReplacement @@ -88,5 +118,39 @@ class peoGlobalBestVelocity : public eoReplacement const double & c3; eoVelocity < POT > & velocity; }; -#endif + +//! @class peoWorstPositionReplacement +//! @brief Specific class for a replacement of a population of a PSO +//! @see eoReplacement +//! @version 1.1 +//! @date october 2007 +template class peoWorstPositionReplacement : public eoReplacement + { + public: + //! @brief constructor + peoWorstPositionReplacement() + {} + //! @brief operator + //! @param eoPop& _dest + //! @param eoPop& _source + void operator()(eoPop& _dest, eoPop& _source) + { + unsigned ind=0; + double best=_dest[0].best(); + for (unsigned j=1;j<_dest.size();j++) + if (_dest[j].best() < best) + { + ind=j; + best=_dest[j].best(); + } + if (_dest[ind].best() < _source[0].best()) + { + _dest[ind].best(_source[0].best()); + for (unsigned j=0;j<_dest[ind].size();j++) + _dest[ind].bestPositions[j]=_source[0].bestPositions[j]; + } + } + }; + +#endif diff --git a/trunk/paradiseo-peo/src/peoPSOSelect.h b/trunk/paradiseo-peo/src/peoPSOSelect.h deleted file mode 100644 index 6ab87fac9..000000000 --- a/trunk/paradiseo-peo/src/peoPSOSelect.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -* -* (c) OPAC Team, October 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 -* Contact: clive.canape@inria.fr -*/ - -#ifndef peoPSOSelect_h -#define peoPSOSelect_h - -#include -#include - -//! @class peoPSOSelect -//! @brief Specific class for a selection of a population of a PSO -//! @see eoSelectOne -//! @version 1.1 -//! @date october 2007 -template class peoPSOSelect: public eoSelectOne - { - public: - - //! @brief Constructor - //! @param eoTopology < POT > & _topology - peoPSOSelect(eoTopology < POT > & _topology):topology(_topology) - {} - - //! @brief typedef : creation of Fitness - typedef typename PO < POT >::Fitness Fitness; - - //! @brief Virtual operator - //! @param eoPop& _pop - //! @return POT& - virtual const POT& operator()(const eoPop& _pop) - { - return topology.globalBest(_pop); - } - - private: - //! @param eoTopology < POT > & topology - eoTopology < POT > & topology; - }; - -#endif - diff --git a/trunk/paradiseo-peo/src/peoWorstPositionReplacement.h b/trunk/paradiseo-peo/src/peoWorstPositionReplacement.h deleted file mode 100644 index 8f37e025f..000000000 --- a/trunk/paradiseo-peo/src/peoWorstPositionReplacement.h +++ /dev/null @@ -1,82 +0,0 @@ -/* -* -* (c) OPAC Team, October 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 -* Contact: clive.canape@inria.fr -*/ - -#ifndef _peoWorstPositionReplacement_h -#define _peoWorstPositionReplacement_h - - -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include - -//! @class peoWorstPositionReplacement -//! @brief Specific class for a replacement of a population of a PSO -//! @see eoReplacement -//! @version 1.1 -//! @date october 2007 -template class peoWorstPositionReplacement : public eoReplacement - { - public: - //! @brief constructor - peoWorstPositionReplacement() - {} - - //! @brief operator - //! @param eoPop& _dest - //! @param eoPop& _source - void operator()(eoPop& _dest, eoPop& _source) - { - unsigned ind=0; - double best=_dest[0].best(); - for (unsigned j=1;j<_dest.size();j++) - if (_dest[j].best() < best) - { - ind=j; - best=_dest[j].best(); - } - if (_dest[ind].best() < _source[0].best()) - { - _dest[ind].best(_source[0].best()); - for (unsigned j=0;j<_dest[ind].size();j++) - _dest[ind].bestPositions[j]=_source[0].bestPositions[j]; - } - } - }; -#endif - diff --git a/trunk/paradiseo-peo/test/CMakeLists.txt b/trunk/paradiseo-peo/test/CMakeLists.txt index d6ab600da..aff4a4147 100644 --- a/trunk/paradiseo-peo/test/CMakeLists.txt +++ b/trunk/paradiseo-peo/test/CMakeLists.txt @@ -62,7 +62,9 @@ ENDIF(WIN32 AND NOT CYGWIN) SET (TEST_LIST t-peo ) -SET (TEST_LIBRARY t-EAParaEval +SET (TEST_LIBRARY t-ParallelEval + t-ParallelTransform + t-MultiStart ) diff --git a/trunk/paradiseo-peo/test/t-EAParaEval.cpp b/trunk/paradiseo-peo/test/t-EAParaEval.cpp deleted file mode 100644 index 7461f9faf..000000000 --- a/trunk/paradiseo-peo/test/t-EAParaEval.cpp +++ /dev/null @@ -1,41 +0,0 @@ -// Test of parallel evaluation with a PSO -#include -typedef eoRealParticle < double >Indi; -double f (const Indi & _indi) -{ - double sum=_indi[0]+_indi[1]; - return (-sum); -} -int main (int __argc, char *__argv[]) -{ - peo :: init( __argc, __argv ); - rng.reseed (time(0)); - eoGenContinue < Indi > genContPara (5); - eoCombinedContinue continuatorPara (genContPara); - eoCheckPoint checkpoint(continuatorPara); - peoEvalFunc plainEval(f); - peoPopEval< Indi > eval(plainEval); - eoUniformGenerator < double >uGen (-2., 2.); - eoInitFixedLength < Indi > random (2, uGen); - eoUniformGenerator < double >sGen (-1., 1.); - eoVelocityInitFixedLength < Indi > veloRandom (2, sGen); - eoFirstIsBestInit < Indi > localInit; - eoRealVectorBounds bndsFlight(2,-2.,2.); - eoStandardFlight < Indi > flight(bndsFlight); - eoPop < Indi > pop; - pop.append (20, random); - eoLinearTopology topology(6); - eoRealVectorBounds bnds(2,-1.,1.); - eoStandardVelocity < Indi > velocity (topology,1,0.5,2.,bnds); - eoInitializer init(eval,veloRandom,localInit,topology,pop); - eoSyncEasyPSO psa(init,checkpoint,eval, velocity, flight); - peoWrapper parallelPSO( psa, pop); - eval.setOwner(parallelPSO); - peo :: run(); - peo :: finalize(); - if (getNodeRank()==1) - { - pop.sort(); - std::cout< + +struct Algorithm +{ + void operator()(double & _d) + { + _d = _d * _d; + } +}; + +int main (int __argc, char * * __argv) +{ + + peo :: init (__argc, __argv); + if (getNodeRank()==1) + std::cout<<"\n\nTest : multistart\n\n"; + std::vector < double > v; + if (getNodeRank()==1) + std::cout<<"\n\nBefore :"; + for(unsigned i = 0; i< 10; i++) + { + v.push_back(i); + if (getNodeRank()==1) + std::cout<<"\n"< initParallel (algo); + peoWrapper parallelAlgo (initParallel, v); + initParallel.setOwner(parallelAlgo); + peo :: run( ); + peo :: finalize( ); + if (getNodeRank()==1) + { + std::cout<<"\n\nAfter :\n"; + for(unsigned i = 0; i< 10; i++) + std::cout< +#include +typedef eoReal Indi; +double f (const Indi & _indi) +{ + double sum=_indi[0]+_indi[1]; + return (-sum); +} +struct Algorithm +{ + Algorithm( peoPopEval < Indi > & _eval): eval( _eval ){} + void operator()(eoPop < Indi > & _pop) + { + eoPop < Indi > empty_pop; + eval(empty_pop, _pop); + } + peoPopEval < Indi > & eval; +}; + +int main (int __argc, char *__argv[]) +{ + peo :: init( __argc, __argv ); + if (getNodeRank()==1) + std::cout<<"\n\nTest : parallel evaluation\n\n"; + rng.reseed (10); + peoEvalFunc plainEval(f); + peoPopEval< Indi > eval(plainEval); + eoUniformGenerator < double >uGen (0, 1); + eoInitFixedLength < Indi > random (2, uGen); + eoPop < Indi > pop(20, random); + Algorithm algo ( eval ); + peoWrapper parallelAlgo( algo, pop); + eval.setOwner(parallelAlgo); + peo :: run(); + peo :: finalize(); + if (getNodeRank()==1) + { + pop.sort(); + std::cout< +#include +typedef eoReal Indi; +double f (const Indi & _indi) +{ + double sum=_indi[0]+_indi[1]; + return (-sum); +} +struct Algorithm +{ + Algorithm( eoEvalFunc < Indi > & _eval, eoSelect < Indi > & _select, peoTransform < Indi > & _transform): + loopEval(_eval), + eval(loopEval), + selectTransform( _select, _transform), + breed(selectTransform) {} + + void operator()(eoPop < Indi > & _pop) + { + eoPop < Indi > offspring, empty_pop; + eval(empty_pop, _pop); + eval(empty_pop, offspring); + std::cout<<"\n\nBefore :\n"< loopEval; + eoPopEvalFunc < Indi > & eval; + eoSelectTransform < Indi > selectTransform; + eoBreed < Indi > & breed; +}; + +int main (int __argc, char *__argv[]) +{ + peo :: init( __argc, __argv ); + if (getNodeRank()==1) + std::cout<<"\n\nTest : parallel transform\n\n"; + rng.reseed (10); + eoEvalFuncPtr < Indi > plainEval(f); + eoEvalFuncCounter < Indi > eval(plainEval); + eoUniformGenerator < double >uGen (0, 1); + eoInitFixedLength < Indi > random (2, uGen); + eoPop < Indi > empty_pop,pop(6, random); + eoRankingSelect < Indi > selectionStrategy; + eoSelectNumber < Indi > select(selectionStrategy,6); + eoSegmentCrossover < Indi > crossover; + eoUniformMutation < Indi > mutation(0.01); + peoTransform transform(crossover,0.8,mutation,0.3); + Algorithm algo ( eval, select, transform ); + peoWrapper parallelAlgo( algo, pop); + transform.setOwner(parallelAlgo); + peo :: run(); + peo :: finalize(); +} diff --git a/trunk/paradiseo-peo/test/t-peo.cpp b/trunk/paradiseo-peo/test/t-peo.cpp index fcd0d75df..0de8f1643 100644 --- a/trunk/paradiseo-peo/test/t-peo.cpp +++ b/trunk/paradiseo-peo/test/t-peo.cpp @@ -1,13 +1,10 @@ - #include -void EAParaEval () -{ - char *tmp="mpiexec -n 4 ./t-EAParaEval @param "; - system(tmp); -} - int main (int __argc, char *__argv[]) { - EAParaEval(); + system("mpdboot"); + system("mpiexec -n 4 ./t-ParallelEval @param "); + system("mpiexec -n 4 ./t-ParallelTransform @param "); + system("mpiexec -n 4 ./t-MultiStart @param "); + system("mpdallexit"); }