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> <moRndVectorVNSelection.h>
Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 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 This software is governed by the CeCILL license under French law and
abiding by the rules of distribution of free software. You can ue, abiding by the rules of distribution of free software. You can ue,
@ -44,7 +44,7 @@ class moRndVectorVNSelection: public moVectorVNSelection<EOT>{
public: 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. * Return the class id.
@ -58,36 +58,37 @@ public:
* test if there is still some neighborhood to explore * test if there is still some neighborhood to explore
* @return true if there is some neighborhood to explore * @return true if there is some neighborhood to explore
*/ */
virtual bool cont(EOT& _solution, eoMonOp<EOT>& _shake, eoMonOp<EOT>& _ls){ virtual bool cont(EOT& _solution){
return (cycle || (current <= (LSvector.size()-2))); return ( cycle || (currentOrder <= (order.size() - 2)) );
} }
/** /**
* put the current neighborhood on the first one * put the current neighborhood on the first one
*/ */
virtual void init(EOT& _solution, eoMonOp<EOT>& _shake, eoMonOp<EOT>& _ls){ virtual void init(EOT& _solution) {
if(order.size()==0){ if(order.size() == 0)
for(unsigned int i = 0; i < LSvector.size(); i++) for(unsigned int i = 0; i < LSvector.size(); i++)
order.push_back(i); order.push_back(i);
}
std::random_shuffle(order.begin(), order.end(), gen); std::random_shuffle(order.begin(), order.end(), gen);
current=0;
_ls=*(LSvector[order[current]]); currentOrder = 0;
_shake=*(shakeVector[order[current]]); current = order[currentOrder];
} }
/** /**
* put the current neighborhood on the next one * put the current neighborhood on the next one
*/ */
virtual void next(EOT& _solution, eoMonOp<EOT>& _shake, eoMonOp<EOT>& _ls){ virtual void next(EOT& _solution){
current= (current+1) % LSvector.size(); currentOrder = (currentOrder + 1) % order.size();
_ls=*(LSvector[order[current]]);
_shake=*(shakeVector[order[current]]); current = order[currentOrder];
} }
private: private:
bool cycle; bool cycle;
unsigned int currentOrder;
std::vector<unsigned int> order; std::vector<unsigned int> order;
UF_random_generator<unsigned int> gen; UF_random_generator<unsigned int> gen;