diff --git a/eo/src/eoInit.h b/eo/src/eoInit.h index 58eef63e0..5230b2982 100644 --- a/eo/src/eoInit.h +++ b/eo/src/eoInit.h @@ -29,11 +29,12 @@ #include #include +#include #include "eoOp.h" #include "eoSTLFunctor.h" #include "utils/eoRndGenerators.h" -#include "utils/rnd_generators.h" // for shuffle method +// #include "utils/rnd_generators.h" // for shuffle method #include "eoExceptions.h" @@ -197,7 +198,8 @@ class eoInitPermutation: public eoInit // FIXME inherit from eoInitWithDim chrom[idx] = idx+startFrom; } - UF_random_generator gen(chrom.size()); + std::random_device rd; + std::mt19937 gen(rd()); std::shuffle(chrom.begin(), chrom.end(), gen); chrom.invalidate(); } diff --git a/eo/src/eoPop.h b/eo/src/eoPop.h index fe84aa365..fe91102b3 100644 --- a/eo/src/eoPop.h +++ b/eo/src/eoPop.h @@ -45,7 +45,7 @@ Authors: #include "eoOp.h" // for eoInit #include "eoPersistent.h" #include "eoInit.h" -#include "utils/rnd_generators.h" // for shuffle method +// #include "utils/rnd_generators.h" // for shuffle method #include "eoExceptions.h" /** A std::vector of EO object, to be used in all algorithms diff --git a/eo/src/utils/rnd_generators.h b/eo/src/utils/rnd_generators.h index 01b682b67..aae3e0000 100644 --- a/eo/src/utils/rnd_generators.h +++ b/eo/src/utils/rnd_generators.h @@ -124,6 +124,7 @@ inline bool random_generator::operator()(void) function (see eoPop::shuffle): its operator() takes an unsigned argument m and must return an unsigned uniformly distributed in [0,m} */ +// FIXME this is probably deprecated by the new STL way of managing random generators. template class UF_random_generator { @@ -134,11 +135,11 @@ class UF_random_generator : _max(max), _random(_rng) {} - T operator()() { return _random.random(_max); } - T operator()(T m) { return _random.random(m); } + T operator()() const { return _random.random(_max); } + T operator()(T m) const { return _random.random(m); } - T min() { return 0; } - T max() { return _max; } + T min() const { return 0; } + T max() const { return _max; } private : T _max; diff --git a/moeo/src/selection/moeoNumberUnvisitedSelect.h b/moeo/src/selection/moeoNumberUnvisitedSelect.h index d31fb2ef2..5a23843f7 100644 --- a/moeo/src/selection/moeoNumberUnvisitedSelect.h +++ b/moeo/src/selection/moeoNumberUnvisitedSelect.h @@ -39,6 +39,8 @@ #ifndef _MOEONUMBERUNVISITEDSELECT_H #define _MOEONUMBERUNVISITEDSELECT_H +#include + #include #include @@ -51,10 +53,10 @@ class moeoNumberUnvisitedSelect : public moeoUnvisitedSelect < MOEOT > public: - /** - * Constructor - * @param _number the number of individuals to select - */ + /** + * Constructor + * @param _number the number of individuals to select + */ moeoNumberUnvisitedSelect(unsigned int _number): number(_number){} /** @@ -64,24 +66,25 @@ public: */ std::vector operator()(eoPop < MOEOT > & _src) { - std::vector res; - res.resize(0); + std::vector res; + res.resize(0); for (unsigned int i=0; i<_src.size(); i++) { if (_src[i].flag() == 0) - res.push_back(i); + res.push_back(i); } if(number < res.size()){ - UF_random_generator rndGen(res.size()); - std::random_shuffle(res.begin(), res.end(), rndGen); - res.resize(number); + std::random_device rd; + std::mt19937 gen(rd()); + std::shuffle(res.begin(), res.end(), gen); + res.resize(number); } return res; } private: - /** number of individuals to select */ - unsigned int number; + /** number of individuals to select */ + unsigned int number; };