ILS v1 :)

git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1727 331e1502-861f-0410-8da2-ba01fb791d7f
This commit is contained in:
jhumeau 2010-03-29 15:58:25 +00:00
commit 6bb2a4a822
21 changed files with 330 additions and 60 deletions

View file

@ -41,20 +41,21 @@
#include <algo/moLocalSearch.h>
#include <perturb/moPerturbation.h>
#include <acceptCrit/moAcceptanceCriterion.h>
#include <neighborhood/moDummyNeighborhood.h>
#include <neighborhood/moDummyNeighbor.h>
/**
* Explorer for an Iterated Local Search
*/
template< class NHE >
class moILSexplorer : public moNeighborhoodExplorer<typename NHE::Neighborhood>
class moILSexplorer : public moNeighborhoodExplorer<moDummyNeighborhood<moDummyNeighbor<typename NHE::Neighborhood::EOT, typename NHE::Neighborhood::EOT::Fitness> > >
{
public:
typedef typename NHE::Neighborhood Neighborhood ;
typedef typename Neighborhood::EOT EOT ;
typedef typename Neighborhood::Neighbor Neighbor ;
using moNeighborhoodExplorer<Neighborhood>::neighborhood;
using moNeighborhoodExplorer<Neighborhood>::eval;
typedef moDummyNeighbor<EOT,typename EOT::Fitness> dummyNeighbor;
typedef moDummyNeighborhood<dummyNeighbor> dummyNeighborhood;
/**
* Constructor
@ -62,7 +63,7 @@ public:
* @param _perturb a perturbation operator
* @param _acceptCrit a acceptance criteria
*/
moILSexplorer(moLocalSearch<NHE>& _ls, moPerturbation<Neighbor>& _perturb, moAcceptanceCriterion<Neighbor>& _acceptCrit) : ls(_ls), perturb(_perturb), acceptCrit(_acceptCrit){
moILSexplorer(moLocalSearch<NHE>& _ls, moPerturbation<Neighbor>& _perturb, moAcceptanceCriterion<Neighbor>& _acceptCrit) : moNeighborhoodExplorer<dummyNeighborhood>(), ls(_ls), perturb(_perturb), acceptCrit(_acceptCrit){
firstIteration=true;
}
@ -88,7 +89,7 @@ public:
* @param _solution the current solution
*/
virtual void updateParam(EOT & _solution){
if((*this).isMoved()){
if((*this).moveApplied()){
perturb.add(_solution,emptyNeighbor);
acceptCrit.add(_solution,emptyNeighbor);
}
@ -110,8 +111,10 @@ public:
current=_solution;
//perturb solution exept at the first iteration
if(!firstIteration)
if(!firstIteration){
perturb(current);
}
else
firstIteration=false;

View file

@ -40,6 +40,9 @@
#include <neighborhood/moNeighborhood.h>
#include <eval/moEval.h>
//#include <neighborhood/moDummyNeighbor.h>
#include <neighborhood/moDummyNeighborhood.h>
#include <eval/moDummyEval.h>
/**
* Explore the neighborhood
@ -50,8 +53,11 @@ class moNeighborhoodExplorer : public eoUF<typename NH::EOT&, void>
public:
typedef NH Neighborhood ;
typedef typename Neighborhood::EOT EOT ;
typedef typename EOT::Fitness Fitness ;
typedef typename Neighborhood::Neighbor Neighbor ;
moNeighborhoodExplorer():neighborhood(dummyNeighborhood), eval(dummyEval), isMoved(false) {}
/**
* Constructor with a Neighborhood and evaluation function
* @param _neighborhood the neighborhood
@ -123,6 +129,8 @@ public:
}
protected:
moDummyNeighborhood<Neighbor> dummyNeighborhood;
moDummyEval<Neighbor> dummyEval;
Neighborhood & neighborhood;
moEval<Neighbor>& eval;
bool isMoved;

View file

@ -67,7 +67,7 @@ public:
* @param _solNeighborComparator a solution vs neighbor comparator
* @param _nbStep maximum number of step to do
*/
moSAexplorer(Neighborhood& _neighborhood, moEval<Neighbor>& _eval, moSolNeighborComparator<Neighbor>& _solNeighborComparator, moCoolingSchedule<EOT> _coolingSchedule) : moNeighborhoodExplorer<Neighborhood>(_neighborhood, _eval), solNeighborComparator(_solNeighborComparator), coolingSchedule(_coolingSchedule) {
moSAexplorer(Neighborhood& _neighborhood, moEval<Neighbor>& _eval, moSolNeighborComparator<Neighbor>& _solNeighborComparator, moCoolingSchedule<EOT>& _coolingSchedule) : moNeighborhoodExplorer<Neighborhood>(_neighborhood, _eval), solNeighborComparator(_solNeighborComparator), coolingSchedule(_coolingSchedule) {
isAccept = false;
if (!neighborhood.isRandom()) {
@ -168,11 +168,9 @@ private:
// comparator betwenn solution and neighbor
moSolNeighborComparator<Neighbor>& solNeighborComparator;
// current number of step
unsigned int step;
moCoolingSchedule<EOT>& coolingSchedule;
// maximum number of steps to do
unsigned int nbStep;
double temperature;
//Pointer on the best and the current neighbor
Neighbor current;