diff --git a/contribution/branches/MOLS/CMakeLists.txt b/contribution/branches/MOLS/CMakeLists.txt index ffad7cc86..5f93cc1b4 100644 --- a/contribution/branches/MOLS/CMakeLists.txt +++ b/contribution/branches/MOLS/CMakeLists.txt @@ -15,6 +15,8 @@ INCLUDE_REGULAR_EXPRESSION("^.*$" "^$") ENABLE_LANGUAGE(CXX) ENABLE_LANGUAGE(C) +INCLUDE(Dart OPTIONAL) + ##################################################################################### diff --git a/contribution/branches/MOLS/CTestConfig.cmake b/contribution/branches/MOLS/CTestConfig.cmake new file mode 100644 index 000000000..465d208d6 --- /dev/null +++ b/contribution/branches/MOLS/CTestConfig.cmake @@ -0,0 +1,7 @@ +set(CTEST_PROJECT_NAME "ParadisEO") +set(CTEST_NIGHTLY_START_TIME "00:00:00 EST") + +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "cdash.inria.fr") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=ParadisEO") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/contribution/branches/MOLS/doc/CMakeLists.txt b/contribution/branches/MOLS/doc/CMakeLists.txt new file mode 100644 index 000000000..f87f5c14c --- /dev/null +++ b/contribution/branches/MOLS/doc/CMakeLists.txt @@ -0,0 +1 @@ +# TODO \ No newline at end of file diff --git a/contribution/branches/MOLS/install.cmake b/contribution/branches/MOLS/install.cmake index aaae37849..87386f5c6 100644 --- a/contribution/branches/MOLS/install.cmake +++ b/contribution/branches/MOLS/install.cmake @@ -1,20 +1,14 @@ # Here, specify PARADISEO_DIR : the directory where ParadisEO has been installed -SET(PARADISEO_DIR "/home/jeremie/workspace/ParadisEO" CACHE PATH "ParadisEO directory" FORCE) +SET(PARADISEO_DIR "/home/humeau/workspace/ParadisEO" CACHE PATH "ParadisEO directory" FORCE) # Here, specify SOURCES_DIR : the directory where the example sources have been deposed. -SET(SOURCES_DIR "/home/jeremie/workspace/Tutos_META08/src" CACHE PATH "TP sources directory, where install.cmake is" FORCE) - - - +SET(SOURCES_DIR "/home/humeau/workspace/MOLS/src" CACHE PATH "TP sources directory, where install.cmake is" FORCE) ########################################################################################################################################### # PLEASE DO NOT MODIFY WHAT IS BELOW ########################################################################################################################################### - - - ### ParadisEO Install Configuration ########################################################################################################################################### SET(PARADISEO_EO_SRC_DIR "${PARADISEO_DIR}/paradiseo-eo" CACHE PATH "ParadisEO-EO source directory" FORCE) diff --git a/contribution/branches/MOLS/src/CMakeLists.txt b/contribution/branches/MOLS/src/CMakeLists.txt new file mode 100644 index 000000000..f87f5c14c --- /dev/null +++ b/contribution/branches/MOLS/src/CMakeLists.txt @@ -0,0 +1 @@ +# TODO \ No newline at end of file diff --git a/contribution/branches/MOLS/src/moeoPopLS.h b/contribution/branches/MOLS/src/moeoPopLS.h new file mode 100644 index 000000000..54cbeabe6 --- /dev/null +++ b/contribution/branches/MOLS/src/moeoPopLS.h @@ -0,0 +1,51 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* Jérémie 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 +* +*/ +//----------------------------------------------------------------------------- + +#ifndef MOEOPOPLS_H_ +#define MOEOPOPLS_H_ + +#include + +/** + * Abstract class for Population based multi-objective local search. + */ +template < class Move > +class moeoPopLS : public moeoPopAlgo < typename Move::EOType > + {}; + +#endif /*MOEOPOPLS_H_*/ diff --git a/contribution/branches/MOLS/src/moeoPopNeighborhoodExplorer.h b/contribution/branches/MOLS/src/moeoPopNeighborhoodExplorer.h new file mode 100644 index 000000000..be28214f8 --- /dev/null +++ b/contribution/branches/MOLS/src/moeoPopNeighborhoodExplorer.h @@ -0,0 +1,52 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Arnaud Liefooghe +* Jérémie 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 +* +*/ +//----------------------------------------------------------------------------- + +#ifndef _MOEOPOPNEIGHBORHOODEXPLORER_H +#define _MOEOPOPNEIGHBORHOODEXPLORER_H + +#include +#include + +/** + * TODO + */ +template < class Move > +class moeoPopNeighborhoodExplorer : public eoBF &, eoPop < typename Move::EOType > &, void> +{}; + +#endif /*MOEONEIGHBORHOODEXPLORER_H_*/ diff --git a/contribution/branches/MOLS/src/moeoUnifiedDominanceBasedLS.h b/contribution/branches/MOLS/src/moeoUnifiedDominanceBasedLS.h new file mode 100644 index 000000000..ee26277a5 --- /dev/null +++ b/contribution/branches/MOLS/src/moeoUnifiedDominanceBasedLS.h @@ -0,0 +1,149 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Arnaud Liefooghe +* Jérémie 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 +* +*/ +//----------------------------------------------------------------------------- + +#ifndef _MOEOUNIFIEDDOMINANCEBASEDLS_H +#define _MOEOUNIFIEDDOMINANCEBASEDLS_H + +#include +#include +#include +#include + +/** + * An easy class to design multi-objective evolutionary algorithms. + */ +template < class Move > +class moeoUnifiedDominanceBasedLS : public moeoPopLS < Move > +{ + //! Alias for the type + typedef typename Move::EOType MOEOT; + +public: + + moeoUnifiedDominanceBasedLS( + eoContinue < MOEOT > & _continuator, + //moeoContinue < MOEOT > & _naturalContinuator, + eoEvalFunc < MOEOT > & _full_evaluation, + eoPopEvalFunc < MOEOT > & _popEval, + moeoArchive < MOEOT > & _archive, + moeoPopNeighborhoodExplorer < Move > & _explorer + ):continuator(_continuator), naturalContinuator(defaultContinuator), full_evaluation(_full_evaluation), popEval(_popEval), archive(_archive), explorer(_explorer) + {} + + moeoUnifiedDominanceBasedLS( + eoContinue < MOEOT > & _continuator + ):continuator(_continuator), naturalContinuator(defaultContinuator), full_evaluation(dummyEval),loopEval(dummyEval), popEval(loopEval), archive(defaultArchive), explorer(defaultPerturb) + {} + + /** + * Applies a few generation of evolution to the population _pop. + * @param _pop the population + */ + virtual void operator()(eoPop < MOEOT > & _pop) + { + eoPop < MOEOT > empty_pop; + popEval(empty_pop, _pop);// A first eval of pop. + + archive(_pop); + + do{ + //"perturber" la population + explorer(archive, _pop); + //mise à jour de la pop ou archive + archive(_pop); + } + while(continuator(_pop) && naturalContinuator(archive)); + } + +protected: + + eoContinue < MOEOT > & continuator; + + template + class moeoContinue : public eoUF < eoPop < MOEOT > &, bool > + { + public: + + moeoContinue(){} + + virtual bool operator()(eoPop < MOEOT > & _pop){ + bool res = false; + unsigned int i=0; + while(!res && i < _pop.size()){ + res = _pop[i].getFlag() == 0; + i++; + } + return res; + } + }; + + moeoContinue < MOEOT > defaultContinuator; + + moeoContinue < MOEOT > & naturalContinuator; + + /** a dummy eval */ + class eoDummyEval : public eoEvalFunc < MOEOT > + { + public: + void operator()(MOEOT &) {} + } + dummyEval; + + eoEvalFunc < MOEOT > & full_evaluation; + eoPopLoopEval < MOEOT > loopEval; + eoPopEvalFunc < MOEOT > & popEval; + + moeoUnboundedArchive < MOEOT > defaultArchive; + moeoArchive < MOEOT > & archive; + + class moeoDummyPerturb : public moeoPopNeighborhoodExplorer < Move > + { + typedef typename Move::EOType MOEOT; + + public: + moeoDummyPerturb(){} + + void operator()(eoPop < MOEOT > & _pop1, eoPop < MOEOT > & _pop2){} + + } + defaultPerturb; + moeoPopNeighborhoodExplorer < Move > & explorer; + +}; + +#endif /*MOEOUNIFIEDDOMINANCEBASEDLS_H_*/ diff --git a/contribution/branches/MOLS/test/CMakeLists.txt b/contribution/branches/MOLS/test/CMakeLists.txt new file mode 100644 index 000000000..eb7f74ff3 --- /dev/null +++ b/contribution/branches/MOLS/test/CMakeLists.txt @@ -0,0 +1,55 @@ +############################################################################### +## +## CMakeLists file for ParadisEO-MOEO/test +## +############################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${PARADISEO_EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${PARADISEO_MO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${PARADISEO_MOEO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) +INCLUDE_DIRECTORIES(${SOURCES_DIR}) + + +###################################################################################### + + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +LINK_DIRECTORIES(${PARADISEO_EO_BIN_DIR}/lib ${PARADISEO_MOEO_BIN_DIR}/lib) + +###################################################################################### + + + +###################################################################################### +### 3) Define your targets and link the librairies +###################################################################################### + +SET (TEST_LIST + t-moeoUnifiedDominanceBasedLS +) + +FOREACH (test ${TEST_LIST}) + SET ("T_${test}_SOURCES" "${test}.cpp") +ENDFOREACH (test) + +FOREACH (test ${TEST_LIST}) + ADD_EXECUTABLE(${test} ${T_${test}_SOURCES}) + ADD_TEST(${test} ${test}) +ENDFOREACH (test) + +# Link the librairies +FOREACH (test ${TEST_LIST}) + TARGET_LINK_LIBRARIES(${test} eoutils eo moeo) +ENDFOREACH (test) + +###################################################################################### + diff --git a/contribution/branches/MOLS/test/t-moeoUnifiedDominanceBasedLS.cpp b/contribution/branches/MOLS/test/t-moeoUnifiedDominanceBasedLS.cpp new file mode 100644 index 000000000..8c4d87aa9 --- /dev/null +++ b/contribution/branches/MOLS/test/t-moeoUnifiedDominanceBasedLS.cpp @@ -0,0 +1,71 @@ +#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; + +class Solution : public moeoRealVector < ObjectiveVector, double, double > +{ +public: + Solution() : moeoRealVector < ObjectiveVector, double, double > (1) {} +}; + +class dummyMove : public moMove < Solution > +{ +public : + void operator () (Solution & _solution){} +} ; + + +int main() +{ + + // objective vectors + ObjectiveVector obj0, obj1, obj2, obj3, obj4, obj5, obj6; + obj0[0] = 2; + obj0[1] = 5; + obj1[0] = 3; + obj1[1] = 3; + obj2[0] = 4; + obj2[1] = 1; + obj3[0] = 5; + obj3[1] = 5; + + // population + eoPop < Solution > pop; + pop.resize(4); + pop[0].objectiveVector(obj0); // class 1 + pop[1].objectiveVector(obj1); // class 1 + pop[2].objectiveVector(obj2); // class 1 + pop[3].objectiveVector(obj3); // class 3 + + eoTimeContinue < Solution > continuator(5); + + moeoUnifiedDominanceBasedLS < dummyMove > algo(continuator); + + algo(pop); + + std::cout << "OK c'est bon" << std::endl; + return EXIT_SUCCESS; +}