Tous les *VNselect compilent et marchent

git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1929 331e1502-861f-0410-8da2-ba01fb791d7f
This commit is contained in:
verel 2010-08-29 13:03:23 +00:00
commit 7870d8dcfe

View file

@ -2,7 +2,7 @@
<moRndVectorVNSelection.h>
Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010
Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau
Sebastien Verel, Arnaud Liefooghe, Jeremie 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,
@ -44,7 +44,7 @@ class moRndVectorVNSelection: public moVectorVNSelection<EOT>{
public:
moRndVectorVNSelection(eoMonOp<EOT>& _firstLS, eoMonOp<EOT>& _firstShake, bool _cycle):moVectorVNSelection<EOT>(_firstLS, _firstShake), cycle(_cycle){}
moRndVectorVNSelection(eoMonOp<EOT>& _firstLS, eoMonOp<EOT>& _firstShake, bool _cycle = true):moVectorVNSelection<EOT>(_firstLS, _firstShake), cycle(_cycle){}
/**
* Return the class id.
@ -58,36 +58,37 @@ public:
* test if there is still some neighborhood to explore
* @return true if there is some neighborhood to explore
*/
virtual bool cont(EOT& _solution, eoMonOp<EOT>& _shake, eoMonOp<EOT>& _ls){
return (cycle || (current <= (LSvector.size()-2)));
virtual bool cont(EOT& _solution){
return ( cycle || (currentOrder <= (order.size() - 2)) );
}
/**
* put the current neighborhood on the first one
*/
virtual void init(EOT& _solution, eoMonOp<EOT>& _shake, eoMonOp<EOT>& _ls){
if(order.size()==0){
virtual void init(EOT& _solution) {
if(order.size() == 0)
for(unsigned int i = 0; i < LSvector.size(); i++)
order.push_back(i);
}
std::random_shuffle(order.begin(), order.end(), gen);
current=0;
_ls=*(LSvector[order[current]]);
_shake=*(shakeVector[order[current]]);
currentOrder = 0;
current = order[currentOrder];
}
/**
* put the current neighborhood on the next one
*/
virtual void next(EOT& _solution, eoMonOp<EOT>& _shake, eoMonOp<EOT>& _ls){
current= (current+1) % LSvector.size();
_ls=*(LSvector[order[current]]);
_shake=*(shakeVector[order[current]]);
virtual void next(EOT& _solution){
currentOrder = (currentOrder + 1) % order.size();
current = order[currentOrder];
}
private:
bool cycle;
unsigned int currentOrder;
std::vector<unsigned int> order;
UF_random_generator<unsigned int> gen;