From ae6cec9026e8a26e41c371017552db927f3bcc0c Mon Sep 17 00:00:00 2001 From: canape Date: Fri, 26 Oct 2007 15:05:32 +0000 Subject: [PATCH] Lesson 6 : parallel transformation git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@747 331e1502-861f-0410-8da2-ba01fb791d7f --- trunk/paradiseo-peo/tutorial/CMakeLists.txt | 2 +- .../tutorial/Lesson6/CMakeLists.txt | 99 +++++++ .../tutorial/Lesson6/lesson.param | 12 + trunk/paradiseo-peo/tutorial/Lesson6/main.cpp | 135 ++++++++++ .../Lesson6/paradiseo-peo.lsn.doxyfile | 241 ++++++++++++++++++ .../paradiseo-peo/tutorial/Lesson6/schema.xml | 18 ++ 6 files changed, 506 insertions(+), 1 deletion(-) create mode 100644 trunk/paradiseo-peo/tutorial/Lesson6/CMakeLists.txt create mode 100644 trunk/paradiseo-peo/tutorial/Lesson6/lesson.param create mode 100644 trunk/paradiseo-peo/tutorial/Lesson6/main.cpp create mode 100644 trunk/paradiseo-peo/tutorial/Lesson6/paradiseo-peo.lsn.doxyfile create mode 100644 trunk/paradiseo-peo/tutorial/Lesson6/schema.xml diff --git a/trunk/paradiseo-peo/tutorial/CMakeLists.txt b/trunk/paradiseo-peo/tutorial/CMakeLists.txt index 5ea3c70e7..75912cafb 100644 --- a/trunk/paradiseo-peo/tutorial/CMakeLists.txt +++ b/trunk/paradiseo-peo/tutorial/CMakeLists.txt @@ -11,6 +11,6 @@ SET(TSP_BINARY_DIR ${ParadisEO-PEO_BINARY_DIR}/tutorial/examples/tsp) ### 2) Where must cmake go now ? ###################################################################################### -SUBDIRS(examples Lesson1 Lesson2 Lesson3 Lesson4 Lesson5 Walkthrough) +SUBDIRS(examples Lesson1 Lesson2 Lesson3 Lesson4 Lesson5 Lesson6 Walkthrough) ###################################################################################### diff --git a/trunk/paradiseo-peo/tutorial/Lesson6/CMakeLists.txt b/trunk/paradiseo-peo/tutorial/Lesson6/CMakeLists.txt new file mode 100644 index 000000000..d4e2ec44f --- /dev/null +++ b/trunk/paradiseo-peo/tutorial/Lesson6/CMakeLists.txt @@ -0,0 +1,99 @@ + +###################################################################################### +### 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/Lesson6/lesson.param ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson6/schema.xml) + +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson6/lesson.param + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson6) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson6/schema.xml + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson6) + +###################################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src ${MO_SRC_DIR}/src ${ParadisEO-PEO_SOURCE_DIR}/src ${TSP_SRC_DIR}) + +###################################################################################### + + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +IF(NOT WIN32 OR CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${ParadisEO-PEO_BINARY_DIR}/lib ${TSP_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} ${TSP_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE}) +ENDIF(WIN32 AND NOT CYGWIN) +###################################################################################### + + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +ADD_EXECUTABLE(tspExample main.cpp) +ADD_DEPENDENCIES(tspExample tsp peo rmc_mpi) +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define properties +###################################################################################### + +SET(LESSON6_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(tspExample PROPERTIES VERSION "${LESSON6_VERSION}") +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(tspExample ${XML2_LIBS} tsp 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/Lesson6/lesson.param b/trunk/paradiseo-peo/tutorial/Lesson6/lesson.param new file mode 100644 index 000000000..eb843c65f --- /dev/null +++ b/trunk/paradiseo-peo/tutorial/Lesson6/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/tutorial/Lesson6/main.cpp b/trunk/paradiseo-peo/tutorial/Lesson6/main.cpp new file mode 100644 index 000000000..5287a4fec --- /dev/null +++ b/trunk/paradiseo-peo/tutorial/Lesson6/main.cpp @@ -0,0 +1,135 @@ +/* +* +* 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 +*/ + +#include "route.h" +#include "route_init.h" +#include "route_eval.h" + +#include "order_xover.h" +#include "city_swap.h" + +#include "param.h" + +#include "merge_route_eval.h" +#include "part_route_eval.h" + + +#include + + +#define POP_SIZE 10 +#define NUM_GEN 100 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.01 + + +int main( int __argc, char** __argv ) { + + // initializing the ParadisEO-PEO environment + peo :: init( __argc, __argv ); + + + // processing the command line specified parameters + loadParameters( __argc, __argv ); + + // init, eval operators, EA operators ------------------------------------------------------------------------------------------------------------- + + RouteInit route_init; // random init object - creates random Route objects + RouteEval full_eval; // evaluator object - offers a fitness value for a specified Route object + OrderXover crossover; // crossover operator - creates two offsprings out of two specified parents + CitySwap mutation; // mutation operator - randomly mutates one gene for a specified individual + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + // evolutionary algorithm components -------------------------------------------------------------------------------------------------------------- + + /* + * You can change the size of the population thanks POP_SIZE + * + */ + + eoPop< Route > population( POP_SIZE, route_init ); + + /* + * If you want to use a parallel evaluation : peoParaPopEval< Route > eaPopEval( full_eval ); + * Else, you can use a sequential evaluation : peoSeqPopEval< Route > eaPopEval( full_eval ); + * + */ + peoParaPopEval< Route > eaPopEval( full_eval ); + + /* + * Continuation criterion + */ + eoGenContinue< Route > eaCont( NUM_GEN ); + eoCheckPoint< Route > eaCheckpointContinue( eaCont ); + + /* + * Selection strategy + */ + eoRankingSelect< Route > selectionStrategy; + eoSelectNumber< Route > eaSelect( selectionStrategy, POP_SIZE ); + + /* With this transform operator, you can use a parallel crossover and a parallel mutation + * + * Unfortunately, if you don't use a crossover which creates two children with two parents, + * you can't use this operator. + * In this case, you should send a mail to : paradiseo-help@lists.gforge.inria.fr + * + */ + peoParaSGATransform< Route > eaTransform( crossover, CROSS_RATE, mutation, MUT_RATE ); // ParadisEO transform operator (please remark the peo prefix) - wraps an e EO transform object + + /* + * Replacement strategy + */ + eoPlusReplacement< Route > eaReplace; + + + // ParadisEO-PEO evolutionary algorithm ----------------------------------------------------------------------------------------------------------- + + peoEA< Route > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace ); + + eaAlg( population ); // specifying the initial population for the algorithm, to be iteratively evolved + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + peo :: run( ); + peo :: finalize( ); + + if(getNodeRank()==1) + std::cout<<"\n\nPopulation :\n"< + + + + + + + + 1 + + + + + + + + +