test added
git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1749 331e1502-861f-0410-8da2-ba01fb791d7f
This commit is contained in:
parent
0ff7bb2cf5
commit
674d9964f0
7 changed files with 179 additions and 6 deletions
|
|
@ -2,4 +2,6 @@ SET(CTEST_CUSTOM_COVERAGE_EXCLUDE
|
|||
${CTEST_CUSTOM_COVERAGE_EXCLUDE}
|
||||
"test/"
|
||||
"paradiseo-eo/"
|
||||
"problems/"
|
||||
"tutorial/"
|
||||
)
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#include <continuator/moContinuator.h>
|
||||
#include <neighborhood/moNeighborhood.h>
|
||||
#include <eoEvalFunc.h>
|
||||
#include <eoOp.h>
|
||||
|
||||
/**
|
||||
* the main algorithm of the local search
|
||||
|
|
|
|||
|
|
@ -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<Neighbor>& solNeighborComparator;
|
||||
|
|
|
|||
|
|
@ -70,6 +70,8 @@ SET (TEST_LIST
|
|||
t-moMonOpPerturb
|
||||
t-moRestartPerturb
|
||||
t-moNeighborhoodPerturb
|
||||
t-moSAexplorer
|
||||
t-moSA
|
||||
)
|
||||
|
||||
FOREACH (test ${TEST_LIST})
|
||||
|
|
|
|||
|
|
@ -38,8 +38,17 @@ int main(){
|
|||
|
||||
std::cout << "[t-moDummyNeighborhood] => START" << std::endl;
|
||||
|
||||
bitVector sol;
|
||||
moDummyNeighbor<bitVector> n;
|
||||
|
||||
moDummyNeighborhood<moDummyNeighbor<bitVector> > 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;
|
||||
|
|
|
|||
65
trunk/paradiseo-mo/test/t-moSA.cpp
Normal file
65
trunk/paradiseo-mo/test/t-moSA.cpp
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
<t-moSA.cpp>
|
||||
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 <iostream>
|
||||
#include <cstdlib>
|
||||
#include <cassert>
|
||||
|
||||
#include <algo/moSA.h>
|
||||
#include "moTestClass.h"
|
||||
#include <problems/eval/oneMaxFullEval.h>
|
||||
#include <coolingSchedule/moSimpleCoolingSchedule.h>
|
||||
#include <continuator/moTrueContinuator.h>
|
||||
#include <comparator/moSolNeighborComparator.h>
|
||||
|
||||
int main(){
|
||||
|
||||
std::cout << "[t-moSA] => START" << std::endl;
|
||||
|
||||
bitNeighborhood nh(4);
|
||||
oneMaxFullEval<bitVector> fullEval;
|
||||
evalOneMax eval(4);
|
||||
|
||||
//test first constructor
|
||||
moSA<bitNeighbor> test1(nh, fullEval, eval);
|
||||
|
||||
//test second constructor
|
||||
moSimpleCoolingSchedule<bitVector> cool(10, 0.9, 100, 0.01);
|
||||
moSA<bitNeighbor> test2(nh, fullEval, eval, cool);
|
||||
|
||||
//test third constructor
|
||||
moTrueContinuator<bitNeighbor> cont;
|
||||
moSolNeighborComparator<bitNeighbor> comp;
|
||||
moSA<bitNeighbor> test3(nh, fullEval, eval, cool, comp, cont);
|
||||
|
||||
std::cout << "[t-moSA] => OK" << std::endl;
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
87
trunk/paradiseo-mo/test/t-moSAexplorer.cpp
Normal file
87
trunk/paradiseo-mo/test/t-moSAexplorer.cpp
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
<t-moSAexplorer.cpp>
|
||||
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 <iostream>
|
||||
#include <cstdlib>
|
||||
#include <cassert>
|
||||
|
||||
#include "moTestClass.h"
|
||||
#include <explorer/moSAexplorer.h>
|
||||
#include <coolingSchedule/moSimpleCoolingSchedule.h>
|
||||
|
||||
int main(){
|
||||
|
||||
std::cout << "[t-moSAexplorer] => START" << std::endl;
|
||||
|
||||
eoBit<eoMinimizingFitness> sol(4, true);
|
||||
sol.fitness(4);
|
||||
bitNeighborhood nh(4);
|
||||
bitNeighborhood emptyNH(0);
|
||||
evalOneMax eval(4);
|
||||
moSolNeighborComparator<bitNeighbor> sncomp;
|
||||
moSimpleCoolingSchedule<bitVector> cool(10,0.1,2,0.1);
|
||||
|
||||
moSAexplorer<bitNeighbor> test1(emptyNH, eval, sncomp, cool);
|
||||
moSAexplorer<bitNeighbor> 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;
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue