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}
|
${CTEST_CUSTOM_COVERAGE_EXCLUDE}
|
||||||
"test/"
|
"test/"
|
||||||
"paradiseo-eo/"
|
"paradiseo-eo/"
|
||||||
|
"problems/"
|
||||||
|
"tutorial/"
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@
|
||||||
#include <continuator/moContinuator.h>
|
#include <continuator/moContinuator.h>
|
||||||
#include <neighborhood/moNeighborhood.h>
|
#include <neighborhood/moNeighborhood.h>
|
||||||
#include <eoEvalFunc.h>
|
#include <eoEvalFunc.h>
|
||||||
|
#include <eoOp.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the main algorithm of the local search
|
* the main algorithm of the local search
|
||||||
|
|
|
||||||
|
|
@ -151,20 +151,27 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual bool accept(EOT & _solution) {
|
virtual bool accept(EOT & _solution) {
|
||||||
double alpha=0.0;
|
double alpha=0.0;
|
||||||
|
double fit1, fit2;
|
||||||
if (neighborhood.hasNeighbor(_solution)) {
|
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;
|
isAccept = true;
|
||||||
else {
|
else {
|
||||||
if ( (double)current.fitness() < (double)_solution.fitness()) // this is a maximization
|
fit1=(double)current.fitness();
|
||||||
alpha = exp( ((double) current.fitness() - (double) _solution.fitness()) / temperature );
|
fit2=(double)_solution.fitness();
|
||||||
else // this is a minimization
|
if (fit1 < fit2) // this is a maximization
|
||||||
alpha = exp( ((double) _solution.fitness() - (double) current.fitness()) / temperature );
|
alpha = exp((fit1 - fit2) / temperature );
|
||||||
isAccept = (rng.uniform() < alpha) ;
|
else // this is a minimization
|
||||||
|
alpha = exp((fit2 - fit1) / temperature );
|
||||||
|
isAccept = (rng.uniform() < alpha) ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return isAccept;
|
return isAccept;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
double getTemperature(){
|
||||||
|
return temperature;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// comparator betwenn solution and neighbor
|
// comparator betwenn solution and neighbor
|
||||||
moSolNeighborComparator<Neighbor>& solNeighborComparator;
|
moSolNeighborComparator<Neighbor>& solNeighborComparator;
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,8 @@ SET (TEST_LIST
|
||||||
t-moMonOpPerturb
|
t-moMonOpPerturb
|
||||||
t-moRestartPerturb
|
t-moRestartPerturb
|
||||||
t-moNeighborhoodPerturb
|
t-moNeighborhoodPerturb
|
||||||
|
t-moSAexplorer
|
||||||
|
t-moSA
|
||||||
)
|
)
|
||||||
|
|
||||||
FOREACH (test ${TEST_LIST})
|
FOREACH (test ${TEST_LIST})
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,17 @@ int main(){
|
||||||
|
|
||||||
std::cout << "[t-moDummyNeighborhood] => START" << std::endl;
|
std::cout << "[t-moDummyNeighborhood] => START" << std::endl;
|
||||||
|
|
||||||
|
bitVector sol;
|
||||||
|
moDummyNeighbor<bitVector> n;
|
||||||
|
|
||||||
moDummyNeighborhood<moDummyNeighbor<bitVector> > test;
|
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;
|
std::cout << "[t-moDummyNeighborhood] => OK" << std::endl;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
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