diff --git a/contribution/branches/MOLS/CMakeLists.txt b/contribution/branches/MOLS/CMakeLists.txt new file mode 100644 index 000000000..3b46805a7 --- /dev/null +++ b/contribution/branches/MOLS/CMakeLists.txt @@ -0,0 +1,120 @@ +###################################################################################### +### CMake basic configuration +###################################################################################### + +# check cmake version compatibility +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + +# regular expression checking +INCLUDE_REGULAR_EXPRESSION("^.*$" "^$") + +# set a language for the entire project. +ENABLE_LANGUAGE(CXX) +ENABLE_LANGUAGE(C) + +##################################################################################### +### Include required modules & utilities +##################################################################################### +INCLUDE(CMakeBackwardCompatibilityCXX) + +INCLUDE(CheckLibraryExists) + +INCLUDE(Dart OPTIONAL) + +# Set a special flag if the environment is windows (should do the same in a config.g file) +IF (WIN32) + ADD_DEFINITIONS(-D_WINDOWS=1) +ENDIF (WIN32) +###################################################################################### + + +##################################################################################### +### Manage the build type +##################################################################################### + +# the user should choose the build type on windows environments,excepted under cygwin (default=none) +SET(CMAKE_DEFAULT_BUILD_TYPE "Debug" CACHE STRING "Variable that stores the default CMake build type" FORCE) + +FIND_PROGRAM(MEMORYCHECK_COMMAND + NAMES purify valgrind + PATHS + "/usr/local/bin /usr/bin [HKEY_LOCAL_MACHINE\\SOFTWARE\\Rational Software\\Purify\\Setup;InstallFolder]" + DOC "Path to the memory checking command, used for memory error detection.") + +IF(NOT CMAKE_BUILD_TYPE) + SET( CMAKE_BUILD_TYPE + ${CMAKE_DEFAULT_BUILD_TYPE} CACHE STRING + "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." + FORCE) +ENDIF(NOT CMAKE_BUILD_TYPE) + +IF(WIN32 AND NOT CYGWIN) + IF(CMAKE_CXX_COMPILER MATCHES cl) + IF(NOT WITH_SHARED_LIBS) + IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + SET(CMAKE_CXX_FLAGS "/nologo /Gy") + SET(CMAKE_CXX_FLAGS_DEBUG "/W3 /MTd /Z7 /Od") + SET(CMAKE_CXX_FLAGS_RELEASE "/w /MT /O2 /wd4530") + 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" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + ENDIF(NOT WITH_SHARED_LIBS) + ENDIF(CMAKE_CXX_COMPILER MATCHES cl) +ELSE(WIN32 AND NOT CYGWIN) + IF(CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -fprofile-arcs -ftest-coverage -Wall -Wextra -Wno-unused-parameter") + SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") + SET(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -O6") + ENDIF(CMAKE_COMPILER_IS_GNUCXX) +ENDIF(WIN32 AND NOT CYGWIN) + +IF(CMAKE_BUILD_TYPE MATCHES Debug) + ADD_DEFINITIONS(-DCMAKE_VERBOSE_MAKEFILE=ON) +ENDIF(CMAKE_BUILD_TYPE MATCHES Debug) + +##################################################################################### + +###################################################################################### +### compilation of examples? +###################################################################################### + +SET(ENABLE_CMAKE_EXAMPLE TRUE CACHE BOOL "Enable copy of benchs and parameters file?") + +####################################################################################### +### Paths to EO, MO and MOEO must be specified above. +####################################################################################### + +SET(PARADISEO_DIR "/home/humeau/Bureau/paradiseo-1.2.1" CACHE PATH "ParadisEO directory" FORCE) + +SET(EO_SRC_DIR "${PARADISEO_DIR}/paradiseo-eo" CACHE PATH "ParadisEO-EO source directory" FORCE) +SET(EO_BIN_DIR "${PARADISEO_DIR}/paradiseo-eo/build" CACHE PATH "ParadisEO-EO binary directory" FORCE) + +SET(MO_SRC_DIR "${PARADISEO_DIR}/paradiseo-mo" CACHE PATH "ParadisMO-MO source directory" FORCE) +SET(MO_BIN_DIR "${PARADISEO_DIR}/paradiseo-mo/build" CACHE PATH "ParadisMO-MO binary directory" FORCE) + +SET(MOEO_SRC_DIR "${PARADISEO_DIR}/paradiseo-moeo" CACHE PATH "ParadisMOEO-MOEO source directory" FORCE) +SET(MOEO_BIN_DIR "${PARADISEO_DIR}/paradiseo-moeo/build" CACHE PATH "ParadisMOEO-MOEO binary directory" FORCE) + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${MOEO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(/home/humeau/workspace/MOLS/src2) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${MOEO_BIN_DIR}/lib) + +###################################################################################### +### 3) Define your targets and link the librairies +###################################################################################### + +ADD_SUBDIRECTORY(src2) +ADD_SUBDIRECTORY(test) \ No newline at end of file diff --git a/contribution/branches/MOLS/test/CTestConfig.cmake b/contribution/branches/MOLS/CTestConfig.cmake similarity index 100% rename from contribution/branches/MOLS/test/CTestConfig.cmake rename to contribution/branches/MOLS/CTestConfig.cmake diff --git a/contribution/branches/MOLS/src2/CMakeLists.txt b/contribution/branches/MOLS/src2/CMakeLists.txt new file mode 100644 index 000000000..81b08ff43 --- /dev/null +++ b/contribution/branches/MOLS/src2/CMakeLists.txt @@ -0,0 +1 @@ +#Dummy file diff --git a/contribution/branches/MOLS/src2/moeoExhaustiveNeighborhoodExplorer.h b/contribution/branches/MOLS/src2/moeoExhaustiveNeighborhoodExplorer.h index 5fba4ab55..90a35d070 100644 --- a/contribution/branches/MOLS/src2/moeoExhaustiveNeighborhoodExplorer.h +++ b/contribution/branches/MOLS/src2/moeoExhaustiveNeighborhoodExplorer.h @@ -45,6 +45,7 @@ #include #include #include +#include /** * TODO diff --git a/contribution/branches/MOLS/src2/moeoNumberUnvisitedSelect.h b/contribution/branches/MOLS/src2/moeoNumberUnvisitedSelect.h index bad7aa24e..be48109cb 100644 --- a/contribution/branches/MOLS/src2/moeoNumberUnvisitedSelect.h +++ b/contribution/branches/MOLS/src2/moeoNumberUnvisitedSelect.h @@ -41,6 +41,7 @@ #include #include +#include /** * TODO diff --git a/contribution/branches/MOLS/src2/moeoSubNeighborhoodExplorer.h b/contribution/branches/MOLS/src2/moeoSubNeighborhoodExplorer.h index fb42d8914..ee1659966 100644 --- a/contribution/branches/MOLS/src2/moeoSubNeighborhoodExplorer.h +++ b/contribution/branches/MOLS/src2/moeoSubNeighborhoodExplorer.h @@ -45,6 +45,7 @@ #include #include #include +#include /** * TODO @@ -88,7 +89,8 @@ private: tmp--; } while (nextMove(move, _src[_i]) && (tmp > 0)); - _src[_i].flag(1); + if(!nextMove(move, _src[_i])) + _src[_i].flag(1); } /** Move */ Move move; diff --git a/contribution/branches/MOLS/test/CMakeLists.txt b/contribution/branches/MOLS/test/CMakeLists.txt index 344d9a15d..de4d030f2 100644 --- a/contribution/branches/MOLS/test/CMakeLists.txt +++ b/contribution/branches/MOLS/test/CMakeLists.txt @@ -1,123 +1,8 @@ -###################################################################################### -### CMake basic configuration -###################################################################################### - -# check cmake version compatibility -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) - -# regular expression checking -INCLUDE_REGULAR_EXPRESSION("^.*$" "^$") - -# set a language for the entire project. -ENABLE_LANGUAGE(CXX) -ENABLE_LANGUAGE(C) - -##################################################################################### -### Include required modules & utilities -##################################################################################### -INCLUDE(CMakeBackwardCompatibilityCXX) - -INCLUDE(CheckLibraryExists) - -INCLUDE(Dart OPTIONAL) - -# Set a special flag if the environment is windows (should do the same in a config.g file) -IF (WIN32) - ADD_DEFINITIONS(-D_WINDOWS=1) -ENDIF (WIN32) -###################################################################################### - - -##################################################################################### -### Manage the build type -##################################################################################### - -# the user should choose the build type on windows environments,excepted under cygwin (default=none) -SET(CMAKE_DEFAULT_BUILD_TYPE "Debug" CACHE STRING "Variable that stores the default CMake build type" FORCE) - -FIND_PROGRAM(MEMORYCHECK_COMMAND - NAMES purify valgrind - PATHS - "/usr/local/bin /usr/bin [HKEY_LOCAL_MACHINE\\SOFTWARE\\Rational Software\\Purify\\Setup;InstallFolder]" - DOC "Path to the memory checking command, used for memory error detection.") - -IF(NOT CMAKE_BUILD_TYPE) - SET( CMAKE_BUILD_TYPE - ${CMAKE_DEFAULT_BUILD_TYPE} CACHE STRING - "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." - FORCE) -ENDIF(NOT CMAKE_BUILD_TYPE) - -IF(WIN32 AND NOT CYGWIN) - IF(CMAKE_CXX_COMPILER MATCHES cl) - IF(NOT WITH_SHARED_LIBS) - IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") - SET(CMAKE_CXX_FLAGS "/nologo /Gy") - SET(CMAKE_CXX_FLAGS_DEBUG "/W3 /MTd /Z7 /Od") - SET(CMAKE_CXX_FLAGS_RELEASE "/w /MT /O2 /wd4530") - 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" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") - ENDIF(NOT WITH_SHARED_LIBS) - ENDIF(CMAKE_CXX_COMPILER MATCHES cl) -ELSE(WIN32 AND NOT CYGWIN) - IF(CMAKE_COMPILER_IS_GNUCXX) - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -fprofile-arcs -ftest-coverage -Wall -Wextra -Wno-unused-parameter") - SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") - SET(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -O6") - ENDIF(CMAKE_COMPILER_IS_GNUCXX) -ENDIF(WIN32 AND NOT CYGWIN) - -IF(CMAKE_BUILD_TYPE MATCHES Debug) - ADD_DEFINITIONS(-DCMAKE_VERBOSE_MAKEFILE=ON) -ENDIF(CMAKE_BUILD_TYPE MATCHES Debug) - -##################################################################################### - -###################################################################################### -### compilation of examples? -###################################################################################### - -SET(ENABLE_CMAKE_EXAMPLE TRUE CACHE BOOL "Enable copy of benchs and parameters file?") - -####################################################################################### -### Paths to EO, MO and MOEO must be specified above. -####################################################################################### - -SET(PARADISEO_DIR "/home/humeau/Bureau/paradiseo-1.2.1" CACHE PATH "ParadisEO directory" FORCE) - -SET(EO_SRC_DIR "${PARADISEO_DIR}/paradiseo-eo" CACHE PATH "ParadisEO-EO source directory" FORCE) -SET(EO_BIN_DIR "${PARADISEO_DIR}/paradiseo-eo/build" CACHE PATH "ParadisEO-EO binary directory" FORCE) - -SET(MO_SRC_DIR "${PARADISEO_DIR}/paradiseo-mo" CACHE PATH "ParadisMO-MO source directory" FORCE) -SET(MO_BIN_DIR "${PARADISEO_DIR}/paradiseo-mo/build" CACHE PATH "ParadisMO-MO binary directory" FORCE) - -SET(MOEO_SRC_DIR "${PARADISEO_DIR}/paradiseo-moeo" CACHE PATH "ParadisMOEO-MOEO source directory" FORCE) -SET(MOEO_BIN_DIR "${PARADISEO_DIR}/paradiseo-moeo/build" CACHE PATH "ParadisMOEO-MOEO binary directory" FORCE) - -###################################################################################### -### 1) Include the sources -###################################################################################### - -INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) -INCLUDE_DIRECTORIES(${MOEO_SRC_DIR}/src) -INCLUDE_DIRECTORIES(/home/humeau/workspace/MOLS/src2) -INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) - -###################################################################################### -### 2) Specify where CMake can find the libraries -###################################################################################### - -LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${MOEO_BIN_DIR}/lib) - -###################################################################################### -### 3) Define your targets and link the librairies -###################################################################################### - SET (TEST_LIST t-moeoExhaustiveUnvisitedSelect t-moeoNumberUnvisitedSelect + t-moeoExhaustiveNeighborhoodExplorer + t-moeoSubNeighborhoodExplorer ) FOREACH (test ${TEST_LIST}) diff --git a/contribution/branches/MOLS/test/t-moeoExhaustiveNeighborhoodExplorer.cpp b/contribution/branches/MOLS/test/t-moeoExhaustiveNeighborhoodExplorer.cpp new file mode 100644 index 000000000..b7df873f8 --- /dev/null +++ b/contribution/branches/MOLS/test/t-moeoExhaustiveNeighborhoodExplorer.cpp @@ -0,0 +1,194 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Lille-Nord Europe, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Arnaud Liefooghe +* Jeremie Humeau +* +* 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 +* +*/ +//----------------------------------------------------------------------------- +// t-moeoExhaustiveNeighborhoodExplorer.cpp +//----------------------------------------------------------------------------- + +#include +#include +#include +#include +#include +#include +#include +//----------------------------------------------------------------------------- + +class ObjectiveVectorTraits : public moeoObjectiveVectorTraits +{ +public: + static bool minimizing (int i) + { + return true; + } + static bool maximizing (int i) + { + return false; + } + static unsigned int nObjectives () + { + return 2; + } +}; + +typedef moeoRealObjectiveVector < ObjectiveVectorTraits > ObjectiveVector; + +typedef MOEO < ObjectiveVector, double, double > Solution; + +class testMove : public moMove < Solution > +{ +public : + + void operator () (Solution & _solution) + { + Solution sol=_solution; + counter++; + } + + void setCounter(unsigned int i){ + counter=i; + } + + unsigned int getCounter(){ + return counter; + } + +private: + unsigned int counter; + +} ; + +class testMoveInit : public moMoveInit +{ +public : + void operator () (testMove & _move, const Solution & _solution) + { + _move.setCounter(0); + const Solution sol(_solution); + } +} ; + +class testMoveNext : public moNextMove +{ +public : + + testMoveNext(unsigned int _counter=0):counter(_counter){}; + + bool operator () (testMove & _move, const Solution & _solution) + { + testMove move(_move); + const Solution sol(_solution); + return _move.getCounter() < 5; + } + +private: + unsigned int counter; +} ; + +class testMoveIncrEval : public moMoveIncrEval +{ +public : + ObjectiveVector operator () (const testMove & _move, const Solution & _solution) + { + ObjectiveVector objVec= _solution.objectiveVector(); + objVec[0]+=2; + objVec[1]+=2; + return objVec; + } +} ; + +//----------------------------------------------------------------------------- + +int main() +{ + std::cout << "[moeoExhaustiveNeighborhoodExplorer]\n\n"; + + // objective vectors + ObjectiveVector obj0, obj1; + obj0[0]=0; + obj0[1]=1; + obj1[0]=10; + obj1[1]=11; + eoPop < Solution > src; + eoPop < Solution > dest; + std::vector < unsigned int > select; + src.resize(5); + src[2].objectiveVector(obj0); + src[4].objectiveVector(obj1); + src[0].flag(0); + src[1].flag(0); + src[2].flag(0); + src[3].flag(0); + src[4].flag(0); + dest.resize(0); + select.resize(2); + select[0]=2; + select[1]=4; + + testMoveInit init; + testMoveNext next; + testMoveIncrEval incr; + + moeoExhaustiveNeighborhoodExplorer < testMove > explorer(init, next, incr); + + explorer(src, select, dest); + assert(dest.size()==10); + assert(src[0].flag()==0); + assert(src[1].flag()==0); + assert(src[2].flag()==1); + assert(src[3].flag()==0); + assert(src[4].flag()==1); + for(int i=0 ; i< 10 ; i++) + assert(dest[i].flag()==0); + assert(dest[0].objectiveVector()[0]==2); + assert(dest[1].objectiveVector()[1]==3); + assert(dest[2].objectiveVector()[0]==2); + assert(dest[3].objectiveVector()[1]==3); + assert(dest[4].objectiveVector()[0]==2); + + assert(dest[5].objectiveVector()[0]==12); + assert(dest[6].objectiveVector()[1]==13); + assert(dest[7].objectiveVector()[0]==12); + assert(dest[8].objectiveVector()[1]==13); + assert(dest[9].objectiveVector()[0]==12); + + + std::cout << "OK" << std::endl; + return EXIT_SUCCESS; + +} + +//----------------------------------------------------------------------------- diff --git a/contribution/branches/MOLS/test/t-moeoSubNeighborhoodExplorer.cpp b/contribution/branches/MOLS/test/t-moeoSubNeighborhoodExplorer.cpp new file mode 100644 index 000000000..67c427cab --- /dev/null +++ b/contribution/branches/MOLS/test/t-moeoSubNeighborhoodExplorer.cpp @@ -0,0 +1,217 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Lille-Nord Europe, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Arnaud Liefooghe +* Jeremie Humeau +* +* 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 +* +*/ +//----------------------------------------------------------------------------- +// t-moeoSubNeighborhoodExplorer.cpp +//----------------------------------------------------------------------------- + +#include +#include +#include +#include +#include +#include +#include +//----------------------------------------------------------------------------- + +class ObjectiveVectorTraits : public moeoObjectiveVectorTraits +{ +public: + static bool minimizing (int i) + { + return true; + } + static bool maximizing (int i) + { + return false; + } + static unsigned int nObjectives () + { + return 2; + } +}; + +typedef moeoRealObjectiveVector < ObjectiveVectorTraits > ObjectiveVector; + +typedef MOEO < ObjectiveVector, double, double > Solution; + +class testMove : public moMove < Solution > +{ +public : + + void operator () (Solution & _solution) + { + Solution sol=_solution; + counter++; + } + + void setCounter(unsigned int i){ + counter=i; + } + + unsigned int getCounter(){ + return counter; + } + +private: + unsigned int counter; + +} ; + +class testMoveInit : public moMoveInit +{ +public : + void operator () (testMove & _move, const Solution & _solution) + { + _move.setCounter(0); + const Solution sol(_solution); + } +} ; + +class testMoveNext : public moNextMove +{ +public : + + testMoveNext(unsigned int _counter=0):counter(_counter){}; + + bool operator () (testMove & _move, const Solution & _solution) + { + testMove move(_move); + const Solution sol(_solution); + return _move.getCounter() < 5; + } + +private: + unsigned int counter; +} ; + +class testMoveIncrEval : public moMoveIncrEval +{ +public : + ObjectiveVector operator () (const testMove & _move, const Solution & _solution) + { + ObjectiveVector objVec= _solution.objectiveVector(); + objVec[0]+=2; + objVec[1]+=2; + return objVec; + } +} ; + +//----------------------------------------------------------------------------- + +int main() +{ + std::cout << "[moeoSubNeighborhoodExplorer]\n\n"; + + // objective vectors + ObjectiveVector obj0, obj1; + obj0[0]=0; + obj0[1]=1; + obj1[0]=10; + obj1[1]=11; + eoPop < Solution > src; + eoPop < Solution > dest; + std::vector < unsigned int > select; + src.resize(5); + src[2].objectiveVector(obj0); + src[4].objectiveVector(obj1); + src[0].flag(0); + src[1].flag(0); + src[2].flag(0); + src[3].flag(0); + src[4].flag(0); + dest.resize(0); + select.resize(2); + select[0]=2; + select[1]=4; + + testMoveInit init; + testMoveNext next; + testMoveIncrEval incr; + + moeoSubNeighborhoodExplorer < testMove > explorer(init, next, incr, 6); + + explorer(src, select, dest); + assert(dest.size()==10); + assert(src[0].flag()==0); + assert(src[1].flag()==0); + assert(src[2].flag()==1); + assert(src[3].flag()==0); + assert(src[4].flag()==1); + for(int i=0 ; i< 10 ; i++) + assert(dest[i].flag()==0); + assert(dest[0].objectiveVector()[0]==2); + assert(dest[1].objectiveVector()[1]==3); + assert(dest[2].objectiveVector()[0]==2); + assert(dest[3].objectiveVector()[1]==3); + assert(dest[4].objectiveVector()[0]==2); + + assert(dest[5].objectiveVector()[0]==12); + assert(dest[6].objectiveVector()[1]==13); + assert(dest[7].objectiveVector()[0]==12); + assert(dest[8].objectiveVector()[1]==13); + assert(dest[9].objectiveVector()[0]==12); + + src[2].flag(0); + src[4].flag(0); + dest.resize(0); + + moeoSubNeighborhoodExplorer < testMove > explorer2(init, next, incr, 3); + + explorer2(src, select, dest); + assert(dest.size()==6); + assert(src[0].flag()==0); + assert(src[1].flag()==0); + assert(src[2].flag()==0); + assert(src[3].flag()==0); + assert(src[4].flag()==0); + for(int i=0 ; i< 6 ; i++) + assert(dest[i].flag()==0); + assert(dest[0].objectiveVector()[0]==2); + assert(dest[1].objectiveVector()[1]==3); + assert(dest[2].objectiveVector()[0]==2); + + assert(dest[3].objectiveVector()[0]==12); + assert(dest[4].objectiveVector()[1]==13); + assert(dest[5].objectiveVector()[0]==12); + + + std::cout << "OK" << std::endl; + return EXIT_SUCCESS; + +} + +//-----------------------------------------------------------------------------