ILS v1 :)
git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1727 331e1502-861f-0410-8da2-ba01fb791d7f
This commit is contained in:
parent
6de0a60f27
commit
6bb2a4a822
21 changed files with 330 additions and 60 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue