diff --git a/trunk/paradiseo-mo/CTestCustom.cmake b/trunk/paradiseo-mo/CTestCustom.cmake index 399b1bc46..61bcd9133 100644 --- a/trunk/paradiseo-mo/CTestCustom.cmake +++ b/trunk/paradiseo-mo/CTestCustom.cmake @@ -2,4 +2,6 @@ SET(CTEST_CUSTOM_COVERAGE_EXCLUDE ${CTEST_CUSTOM_COVERAGE_EXCLUDE} "test/" "paradiseo-eo/" +"problems/" +"tutorial/" ) diff --git a/trunk/paradiseo-mo/src/algo/moLocalSearch.h b/trunk/paradiseo-mo/src/algo/moLocalSearch.h index 80cbd64c7..3e5da168d 100644 --- a/trunk/paradiseo-mo/src/algo/moLocalSearch.h +++ b/trunk/paradiseo-mo/src/algo/moLocalSearch.h @@ -39,6 +39,7 @@ #include #include #include +#include /** * the main algorithm of the local search diff --git a/trunk/paradiseo-mo/src/explorer/moSAexplorer.h b/trunk/paradiseo-mo/src/explorer/moSAexplorer.h index 05bc893c8..ca1b17735 100644 --- a/trunk/paradiseo-mo/src/explorer/moSAexplorer.h +++ b/trunk/paradiseo-mo/src/explorer/moSAexplorer.h @@ -151,20 +151,27 @@ public: */ virtual bool accept(EOT & _solution) { double alpha=0.0; + double fit1, fit2; if (neighborhood.hasNeighbor(_solution)) { - if (solNeighborComparator(_solution, current)) // accept if the current neighbor is better than the solution + if (solNeighborComparator(_solution, current)) // accept if the current neighbor is better than the solution isAccept = true; else { - if ( (double)current.fitness() < (double)_solution.fitness()) // this is a maximization - alpha = exp( ((double) current.fitness() - (double) _solution.fitness()) / temperature ); - else // this is a minimization - alpha = exp( ((double) _solution.fitness() - (double) current.fitness()) / temperature ); - isAccept = (rng.uniform() < alpha) ; + fit1=(double)current.fitness(); + fit2=(double)_solution.fitness(); + if (fit1 < fit2) // this is a maximization + alpha = exp((fit1 - fit2) / temperature ); + else // this is a minimization + alpha = exp((fit2 - fit1) / temperature ); + isAccept = (rng.uniform() < alpha) ; } } return isAccept; }; + double getTemperature(){ + return temperature; + } + private: // comparator betwenn solution and neighbor moSolNeighborComparator& solNeighborComparator; diff --git a/trunk/paradiseo-mo/test/CMakeLists.txt b/trunk/paradiseo-mo/test/CMakeLists.txt index 671561aa4..b9f3718e2 100644 --- a/trunk/paradiseo-mo/test/CMakeLists.txt +++ b/trunk/paradiseo-mo/test/CMakeLists.txt @@ -70,6 +70,8 @@ SET (TEST_LIST t-moMonOpPerturb t-moRestartPerturb t-moNeighborhoodPerturb + t-moSAexplorer + t-moSA ) FOREACH (test ${TEST_LIST}) diff --git a/trunk/paradiseo-mo/test/t-moDummyNeighborhood.cpp b/trunk/paradiseo-mo/test/t-moDummyNeighborhood.cpp index 8a520e52b..111610a3c 100644 --- a/trunk/paradiseo-mo/test/t-moDummyNeighborhood.cpp +++ b/trunk/paradiseo-mo/test/t-moDummyNeighborhood.cpp @@ -38,8 +38,17 @@ int main(){ std::cout << "[t-moDummyNeighborhood] => START" << std::endl; + bitVector sol; + moDummyNeighbor n; + moDummyNeighborhood > test; + assert(!test.hasNeighbor(sol)); + assert(!test.cont(sol)); + test.init(sol,n); + test.next(sol,n); + + std::cout << "[t-moDummyNeighborhood] => OK" << std::endl; return EXIT_SUCCESS; diff --git a/trunk/paradiseo-mo/test/t-moSA.cpp b/trunk/paradiseo-mo/test/t-moSA.cpp new file mode 100644 index 000000000..5682bc697 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moSA.cpp @@ -0,0 +1,65 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, 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 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 +*/ + +#include +#include +#include + +#include +#include "moTestClass.h" +#include +#include +#include +#include + +int main(){ + + std::cout << "[t-moSA] => START" << std::endl; + + bitNeighborhood nh(4); + oneMaxFullEval fullEval; + evalOneMax eval(4); + + //test first constructor + moSA test1(nh, fullEval, eval); + + //test second constructor + moSimpleCoolingSchedule cool(10, 0.9, 100, 0.01); + moSA test2(nh, fullEval, eval, cool); + + //test third constructor + moTrueContinuator cont; + moSolNeighborComparator comp; + moSA test3(nh, fullEval, eval, cool, comp, cont); + + std::cout << "[t-moSA] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moSAexplorer.cpp b/trunk/paradiseo-mo/test/t-moSAexplorer.cpp new file mode 100644 index 000000000..793f4ff9d --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moSAexplorer.cpp @@ -0,0 +1,87 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, 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 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 +*/ + +#include +#include +#include + +#include "moTestClass.h" +#include +#include + +int main(){ + + std::cout << "[t-moSAexplorer] => START" << std::endl; + + eoBit sol(4, true); + sol.fitness(4); + bitNeighborhood nh(4); + bitNeighborhood emptyNH(0); + evalOneMax eval(4); + moSolNeighborComparator sncomp; + moSimpleCoolingSchedule cool(10,0.1,2,0.1); + + moSAexplorer test1(emptyNH, eval, sncomp, cool); + moSAexplorer test2(nh, eval, sncomp, cool); + + //test d'un voisinage vide + test1.initParam(sol); + test1(sol); + assert(!test1.accept(sol)); + assert(test1.getTemperature()==10.0); + + //test d'un voisinage "normal" + test2.initParam(sol); + test2(sol); + assert(test2.accept(sol)); + test2.updateParam(sol); + assert(test2.isContinue(sol)); + test2.move(sol); + assert(sol.fitness()==3); + unsigned int ok=0; + unsigned int ko=0; + for(unsigned int i=0; i<1000; i++){ + test2(sol); + if(test2.isContinue(sol)) + test2.updateParam(sol); + if(test2.accept(sol)) + ok++; + else + ko++; + test2.move(sol); + } + assert((ok>0) && (ko>0)); + + + + std::cout << "[t-moSAexplorer] => OK" << std::endl; + + return EXIT_SUCCESS; +} +