Use the variable selectedNeighbor in moTSexplorer and moRandomWalkExplorer

git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@2561 331e1502-861f-0410-8da2-ba01fb791d7f
This commit is contained in:
verel 2011-12-10 13:08:07 +00:00
commit 856bec93f9
4 changed files with 19 additions and 43 deletions

View file

@ -119,7 +119,6 @@ public:
//perturb solution exept at the first iteration //perturb solution exept at the first iteration
if (!firstIteration) { if (!firstIteration) {
perturb(currentSol); perturb(currentSol);
} }
else else
firstIteration=false; firstIteration=false;

View file

@ -58,6 +58,7 @@ public:
using moNeighborhoodExplorer<Neighbor>::neighborhood; using moNeighborhoodExplorer<Neighbor>::neighborhood;
using moNeighborhoodExplorer<Neighbor>::eval; using moNeighborhoodExplorer<Neighbor>::eval;
using moNeighborhoodExplorer<Neighbor>::currentNeighbor; using moNeighborhoodExplorer<Neighbor>::currentNeighbor;
using moNeighborhoodExplorer<Neighbor>::selectedNeighbor;
/** /**
* Constructor * Constructor
@ -108,10 +109,10 @@ public:
//Test if _solution has a Neighbor //Test if _solution has a Neighbor
if (neighborhood.hasNeighbor(_solution)) { if (neighborhood.hasNeighbor(_solution)) {
//init the first neighbor //init the first neighbor
neighborhood.init(_solution, currentNeighbor); neighborhood.init(_solution, selectedNeighbor);
//eval the _solution moved with the neighbor and stock the result in the neighbor //eval the _solution moved with the neighbor and stock the result in the neighbor
eval(_solution, currentNeighbor); eval(_solution, selectedNeighbor);
isAccept = true; isAccept = true;
} }
@ -130,17 +131,6 @@ public:
return isAccept ; return isAccept ;
}; };
/**
* move the solution with the best neighbor
* @param _solution the solution to move
*/
virtual void move(EOT & _solution) {
//move the solution
currentNeighbor.move(_solution);
//update its fitness
_solution.fitness(currentNeighbor.fitness());
};
/** /**
* accept test if an amelirated neighbor was be found * accept test if an amelirated neighbor was be found
* @param _solution the solution * @param _solution the solution

View file

@ -154,7 +154,6 @@ public:
isAccept = (rng.uniform() < alpha) ; isAccept = (rng.uniform() < alpha) ;
} }
} }
isAccept = true;
return isAccept; return isAccept;
}; };

View file

@ -54,6 +54,7 @@ public:
typedef moNeighborhood<Neighbor> Neighborhood ; typedef moNeighborhood<Neighbor> Neighborhood ;
using moNeighborhoodExplorer<Neighbor>::currentNeighbor; using moNeighborhoodExplorer<Neighbor>::currentNeighbor;
using moNeighborhoodExplorer<Neighbor>::selectedNeighbor;
/** /**
* Constructor * Constructor
@ -108,16 +109,16 @@ public:
virtual void updateParam(EOT& _solution) virtual void updateParam(EOT& _solution)
{ {
if ((*this).moveApplied()) { if ((*this).moveApplied()) {
tabuList.add(_solution, best); tabuList.add(_solution, selectedNeighbor);
intensification.add(_solution, best); intensification.add(_solution, selectedNeighbor);
diversification.add(_solution, best); diversification.add(_solution, selectedNeighbor);
if (_solution.fitness() > bestSoFar.fitness()) if (_solution.fitness() > bestSoFar.fitness())
bestSoFar = _solution; bestSoFar = _solution;
} }
tabuList.update(_solution, best); tabuList.update(_solution, selectedNeighbor);
intensification.update(_solution, best); intensification.update(_solution, selectedNeighbor);
diversification.update(_solution, best); diversification.update(_solution, selectedNeighbor);
aspiration.update(_solution, best); aspiration.update(_solution, selectedNeighbor);
}; };
@ -147,8 +148,8 @@ public:
//Find the first non-tabu element //Find the first non-tabu element
if ( (!tabuList.check(_solution, currentNeighbor)) || aspiration(_solution, currentNeighbor) ) { if ( (!tabuList.check(_solution, currentNeighbor)) || aspiration(_solution, currentNeighbor) ) {
// set best // set selectedNeighbor
best = currentNeighbor; selectedNeighbor = currentNeighbor;
found=true; found=true;
} }
while (neighborhood.cont(_solution) && !found) { while (neighborhood.cont(_solution) && !found) {
@ -158,8 +159,8 @@ public:
eval(_solution, currentNeighbor); eval(_solution, currentNeighbor);
if ( (!tabuList.check(_solution, currentNeighbor)) || aspiration(_solution, currentNeighbor) ) { if ( (!tabuList.check(_solution, currentNeighbor)) || aspiration(_solution, currentNeighbor) ) {
// set best // set selectedNeighbor
best = currentNeighbor; selectedNeighbor = currentNeighbor;
found=true; found=true;
} }
} }
@ -172,9 +173,9 @@ public:
//eval //eval
eval(_solution, currentNeighbor); eval(_solution, currentNeighbor);
//check if the current is better than the best and is not tabu or if it is aspirat (by the aspiration criteria of course) //check if the current is better than the best and is not tabu or if it is aspirat (by the aspiration criteria of course)
if ( (!tabuList.check(_solution, currentNeighbor) || aspiration(_solution, currentNeighbor)) && neighborComparator(best, currentNeighbor)) { if ( (!tabuList.check(_solution, currentNeighbor) || aspiration(_solution, currentNeighbor)) && neighborComparator(selectedNeighbor, currentNeighbor)) {
// set best // set selectedNeighbor
best = currentNeighbor; selectedNeighbor = currentNeighbor;
} }
} }
} }
@ -198,19 +199,6 @@ public:
return true; return true;
}; };
/**
* move the solution with the best neighbor
* @param _solution the solution to move
*/
virtual void move(EOT & _solution) {
//move the solution
best.move(_solution);
//update its fitness
_solution.fitness(best.fitness());
};
/** /**
* accept test if an ameliorated neighbor was found * accept test if an ameliorated neighbor was found
* @param _solution the solution * @param _solution the solution
@ -245,7 +233,7 @@ protected:
moAspiration<Neighbor> & aspiration; moAspiration<Neighbor> & aspiration;
// Best neighbor // Best neighbor
Neighbor best; // Neighbor best;
//Best so far Solution //Best so far Solution
EOT bestSoFar; EOT bestSoFar;