From b1c7e1f256d73fab9605475fe5ebfd03220f2d52 Mon Sep 17 00:00:00 2001 From: quemy Date: Thu, 21 Nov 2013 12:40:24 +0100 Subject: [PATCH] Wrapper on eoFitContinue in order to allow islands to stop as soon as an island found a good solution --- CMakeLists.txt | 10 +-- eo/src/serial/CMakeLists.txt | 4 +- moeo/src/CMakeLists.txt | 2 +- smp/src/CMakeLists.txt | 1 + smp/src/sharedFitContinue.cpp | 47 +++++++++++ smp/src/sharedFitContinue.h | 78 +++++++++++++++++++ smp/src/smp.h | 2 + smp/test/CMakeLists.txt | 1 + smp/test/t-smpSharedFitContinue.cpp | 116 ++++++++++++++++++++++++++++ smp/tutorial/Lesson3/CMakeLists.txt | 1 + 10 files changed, 254 insertions(+), 8 deletions(-) create mode 100644 smp/src/sharedFitContinue.cpp create mode 100644 smp/src/sharedFitContinue.h create mode 100644 smp/test/t-smpSharedFitContinue.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index f279e5a3e..9253f007d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,12 +77,12 @@ set( MPI_BIN_DIR "${CMAKE_BINARY_DIR}" CACHE INTERNAL "ParadisEO-MPI binary dir set(EO_ONLY "false" CACHE BOOL "Only build EO and not the other modules") -set(ENABLE_OPENMP "false" CACHE BOOL "Build EO with the OpenMP support (shared-memory parallel evaluators on multi-core)") -set(ENABLE_GNUPLOT "false" CACHE BOOL "Build EO with the GNUplot support (real-time convergence plotting)") -set(EDO "false" CACHE BOOL "Build the EDO module") +set(ENABLE_OPENMP "true" CACHE BOOL "Build EO with the OpenMP support (shared-memory parallel evaluators on multi-core)") +set(ENABLE_GNUPLOT "true" CACHE BOOL "Build EO with the GNUplot support (real-time convergence plotting)") +set(EDO "true" CACHE BOOL "Build the EDO module") set(EDO_USE_LIB "Eigen3" CACHE STRING "Which linear algebra library to use to build EDO ('UBlas' or 'Eigen3', Eigen3 is recommended)") -set(SMP "false" CACHE BOOL "Build the SMP module") -set(MPI "false" CACHE BOOL "Build the MPI module") +set(SMP "true" CACHE BOOL "Build the SMP module") +set(MPI "true" CACHE BOOL "Build the MPI module") ## EO Module set(EO_MODULE_NAME "Evolving Object") diff --git a/eo/src/serial/CMakeLists.txt b/eo/src/serial/CMakeLists.txt index efc9f42e2..d7a6fb574 100644 --- a/eo/src/serial/CMakeLists.txt +++ b/eo/src/serial/CMakeLists.txt @@ -20,10 +20,10 @@ set(EOSERIAL_SOURCES ) add_library(eoserial STATIC ${EOSERIAL_SOURCES}) -install(TARGETS eoserial ARCHIVE DESTINATION lib COMPONENT libraries) +install(TARGETS eoserial ARCHIVE DESTINATION ${LIB} COMPONENT libraries) file(GLOB HDRS *.h) -install(FILES ${HDRS} DESTINATION include/eo/serial COMPONENT headers) +install(FILES ${HDRS} DESTINATION include${INSTALL_SUB_DIR}/eo/serial COMPONENT headers) ###################################################################################### ### 3) Optionnal diff --git a/moeo/src/CMakeLists.txt b/moeo/src/CMakeLists.txt index 6c645008b..a696cdbb5 100644 --- a/moeo/src/CMakeLists.txt +++ b/moeo/src/CMakeLists.txt @@ -36,7 +36,7 @@ install(FILES ${HDRS} DESTINATION include${INSTALL_SUB_DIR}/moeo COMPONENT heade ### 4) Install directories ###################################################################################### -install(DIRECTORY acceptCrit algo archive comparator core distance diversity do explorer fitness hybridization metric replacement scalarStuffs selection utils +install(DIRECTORY acceptCrit algo archive continue comparator core distance diversity do explorer fitness hybridization metric replacement scalarStuffs selection utils DESTINATION include${INSTALL_SUB_DIR}/moeo COMPONENT headers FILES_MATCHING PATTERN "*.h" diff --git a/smp/src/CMakeLists.txt b/smp/src/CMakeLists.txt index 1135119a0..07cde8272 100644 --- a/smp/src/CMakeLists.txt +++ b/smp/src/CMakeLists.txt @@ -32,6 +32,7 @@ set (SMP_FILE topology/customStochasticTopology.cpp notifier.cpp islandModelWrapper.h + sharedFitContinue.h ) add_library(smp STATIC ${SMP_FILE}) diff --git a/smp/src/sharedFitContinue.cpp b/smp/src/sharedFitContinue.cpp new file mode 100644 index 000000000..30e53ac3d --- /dev/null +++ b/smp/src/sharedFitContinue.cpp @@ -0,0 +1,47 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2013 + +Alexandre Quemy - INSA Rouen + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +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". + +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 +*/ + +template +bool paradiseo::smp::SharedFitContinue::operator()(const eoPop& _pop) +{ + if(found) + return false; + else + { + found = fit(_pop); + return found; + } +} + +template +std::string paradiseo::smp::SharedFitContinue::className(void) const +{ + return "smp::SharedFitContinue"; +} + diff --git a/smp/src/sharedFitContinue.h b/smp/src/sharedFitContinue.h new file mode 100644 index 000000000..b2c26d063 --- /dev/null +++ b/smp/src/sharedFitContinue.h @@ -0,0 +1,78 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2012 + +Alexandre Quemy - INSA Rouen + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +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". + +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 +*/ + +#ifndef SMP_SHARED_FIT_CONTINUE_H_ +#define SMP_SHARED_FIT_CONTINUE_H_ + +#include + +#include +#include + +namespace paradiseo +{ +namespace smp +{ + +/** SharedFitContinue + +Wrapper on the eoFitContinue in order to allow the island model to stop as soon as an island found a good solution. + +@see smp::Island, eoFitContinue +*/ + +template +class SharedFitContinue : public eoContinue +{ +public: + + typedef typename EOT::Fitness Fitness; + + SharedFitContinue(const Fitness _optimum) : + fit(_optimum), + found(false) + {}; + + virtual bool operator() ( const eoPop& _pop ); + + virtual std::string className(void) const; + +protected: + eoFitContinue fit; + std::atomic found; + +}; + +#include + +} + +} + +#endif diff --git a/smp/src/smp.h b/smp/src/smp.h index c2bbcdada..7bfb17864 100644 --- a/smp/src/smp.h +++ b/smp/src/smp.h @@ -52,5 +52,7 @@ Contact: paradiseo-help@lists.gforge.inria.fr #include #include +// Continuators +#include #endif diff --git a/smp/test/CMakeLists.txt b/smp/test/CMakeLists.txt index b855a1e4f..a31fbcef3 100644 --- a/smp/test/CMakeLists.txt +++ b/smp/test/CMakeLists.txt @@ -21,6 +21,7 @@ set (TEST_LIST t-smpMI_Heterogeneous t-smpMI_Wrapper t-smpCustomTopo + t-smpSharedFitContinue ) ###################################################################################### diff --git a/smp/test/t-smpSharedFitContinue.cpp b/smp/test/t-smpSharedFitContinue.cpp new file mode 100644 index 000000000..56afa7cbb --- /dev/null +++ b/smp/test/t-smpSharedFitContinue.cpp @@ -0,0 +1,116 @@ +#include +#include + +#include "smpTestClass.h" + +using namespace paradiseo::smp; +using namespace std; + +int main(void) +{ + // Defining parameters + typedef struct { + unsigned popSize = 1000; + unsigned tSize = 2; + double pCross = 0.8; + double pMut = 0.7; + unsigned maxGen = 1000; + } Param; + + Param param; + + // Fixing the seed + rng.reseed(42); + + // Load instance + loadInstances("t-data.dat", n, bkv, a, b); + + //Common part to all islands + IndiEvalFunc plainEval; + IndiInit chromInit; + eoDetTournamentSelect selectOne(param.tSize); + eoSelectPerc select(selectOne);// by default rate==1 + IndiXover Xover; // CROSSOVER + IndiSwapMutation mutationSwap; // MUTATION + eoSGATransform transform(Xover, param.pCross, mutationSwap, param.pMut); + eoPlusReplacement replace; + + SharedFitContinue cont(5000); + + // MODEL + // Topologies + Topology topo; + IslandModel model(topo); + + // ISLAND 1 + // // Algorithm part + eoPop pop(param.popSize, chromInit); + // // Emigration policy + // // // Element 1 + eoPeriodicContinue criteria(5); + eoDetTournamentSelect selectOne1(20); + eoSelectNumber who(selectOne1, 3); + + MigPolicy migPolicy; + migPolicy.push_back(PolicyElement(who, criteria)); + + // // Integration policy + eoPlusReplacement intPolicy; + + Island test(pop, intPolicy, migPolicy, cont, plainEval, select, transform, replace); + + // ISLAND 1 + // // Algorithm part + eoPop pop2(30, chromInit); + // // Emigration policy + // // // Element 1 + eoPeriodicContinue criteria_2(5); + eoDetTournamentSelect selectOne_2(25); + eoSelectNumber who_2(selectOne_2, 5); + + MigPolicy migPolicy_2; + migPolicy_2.push_back(PolicyElement(who_2, criteria_2)); + + // // Integration policy + eoPlusReplacement intPolicy_2; + + Island test2(pop2, intPolicy_2, migPolicy_2, cont, plainEval, select, transform, replace); + + // Island 3 + // // Algorithm part + eoPop pop3(30, chromInit); + // // Emigration policy + // // // Element 1 + eoPeriodicContinue criteria_3(10); + eoDetTournamentSelect selectOne_3(15); + eoSelectNumber who_3(selectOne_3, 1); + + MigPolicy migPolicy_3; + migPolicy.push_back(PolicyElement(who_3, criteria_3)); + + // // Integration policy + eoPlusReplacement intPolicy_3; + + Island test3(pop3, intPolicy_3, migPolicy_3, cont, plainEval, select, transform, replace); + + + try + { + + model.add(test); + model.add(test2); + model.add(test3); + + model(); + + cout << test.getPop() << endl; + cout << test2.getPop() << endl; + cout << test3.getPop() << endl; + } + catch(exception& e) + { + cout << "Exception: " << e.what() << '\n'; + } + + return 0; +} diff --git a/smp/tutorial/Lesson3/CMakeLists.txt b/smp/tutorial/Lesson3/CMakeLists.txt index 9e199afd4..363e5d956 100644 --- a/smp/tutorial/Lesson3/CMakeLists.txt +++ b/smp/tutorial/Lesson3/CMakeLists.txt @@ -6,6 +6,7 @@ set(files lesson3_heterogeneous + #mo-tsp ) ######################################################################################