found a bug in eoProportionalOp, hope this helps...
This commit is contained in:
parent
ea2e369542
commit
01727c5a5d
2 changed files with 20 additions and 14 deletions
|
|
@ -131,7 +131,7 @@ class eoSequentialOp : public eoOpContainer<EOT>
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/** The proportinoal verions: easy! */
|
/** The proportional versions: easy! */
|
||||||
template <class EOT>
|
template <class EOT>
|
||||||
class eoProportionalOp : public eoOpContainer<EOT>
|
class eoProportionalOp : public eoOpContainer<EOT>
|
||||||
{
|
{
|
||||||
|
|
@ -144,6 +144,7 @@ class eoProportionalOp : public eoOpContainer<EOT>
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
(*ops[i])(_pop);
|
(*ops[i])(_pop);
|
||||||
|
++_pop;
|
||||||
}
|
}
|
||||||
catch( typename eoPopulator<EOT>::OutOfIndividuals&)
|
catch( typename eoPopulator<EOT>::OutOfIndividuals&)
|
||||||
{}
|
{}
|
||||||
|
|
|
||||||
|
|
@ -28,17 +28,22 @@
|
||||||
#define eoPerf2Worth_h
|
#define eoPerf2Worth_h
|
||||||
|
|
||||||
#include <utils/eoParam.h>
|
#include <utils/eoParam.h>
|
||||||
|
#include <eoPop.h>
|
||||||
|
#include <eoFunctor.h>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
/** Base class to transform raw fitnesses into fitness for selection
|
/** Base class to transform raw fitnesses into fitness for selection
|
||||||
|
|
||||||
@see eoSelectFromWorth
|
@see eoSelectFromWorth
|
||||||
*/
|
*/
|
||||||
template <class EOT, class WorthT = double>
|
template <class EOT, class WorthT = double>
|
||||||
class eoPerf2Worth : public eoUF<const eoPop<EOT>&, void>, public eoValueParam<vector<WorthT> >
|
class eoPerf2Worth : public eoUF<const eoPop<EOT>&, void>, public eoValueParam<std::vector<WorthT> >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
eoPerf2Worth(std::string _description = "Worths"):eoValueParam<vector<WorthT> >(vector<WorthT>(0),
|
eoPerf2Worth(std::string _description = "Worths"):eoValueParam<std::vector<WorthT> >(std::vector<WorthT>(0),
|
||||||
_description) {}
|
_description) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -46,7 +51,7 @@ class eoPerf2Worth : public eoUF<const eoPop<EOT>&, void>, public eoValueParam<v
|
||||||
*/
|
*/
|
||||||
virtual void sort_pop(eoPop<EOT>& _pop)
|
virtual void sort_pop(eoPop<EOT>& _pop)
|
||||||
{ // start with a vector of indices
|
{ // start with a vector of indices
|
||||||
vector<unsigned> indices(_pop.size());
|
std::vector<unsigned> indices(_pop.size());
|
||||||
|
|
||||||
unsigned i;
|
unsigned i;
|
||||||
for (i = 0; i < _pop.size();++i)
|
for (i = 0; i < _pop.size();++i)
|
||||||
|
|
@ -58,7 +63,7 @@ class eoPerf2Worth : public eoUF<const eoPop<EOT>&, void>, public eoValueParam<v
|
||||||
|
|
||||||
eoPop<EOT> tmp_pop;
|
eoPop<EOT> tmp_pop;
|
||||||
tmp_pop.resize(_pop.size());
|
tmp_pop.resize(_pop.size());
|
||||||
vector<WorthT> tmp_worths(value().size());
|
std::vector<WorthT> tmp_worths(value().size());
|
||||||
|
|
||||||
for (i = 0; i < _pop.size(); ++i)
|
for (i = 0; i < _pop.size(); ++i)
|
||||||
{
|
{
|
||||||
|
|
@ -75,7 +80,7 @@ class eoPerf2Worth : public eoUF<const eoPop<EOT>&, void>, public eoValueParam<v
|
||||||
class compare_worth
|
class compare_worth
|
||||||
{
|
{
|
||||||
public :
|
public :
|
||||||
compare_worth(const vector<WorthT>& _worths) : worths(_worths) {}
|
compare_worth(const std::vector<WorthT>& _worths) : worths(_worths) {}
|
||||||
|
|
||||||
bool operator()(unsigned a, unsigned b) const
|
bool operator()(unsigned a, unsigned b) const
|
||||||
{
|
{
|
||||||
|
|
@ -84,7 +89,7 @@ class eoPerf2Worth : public eoUF<const eoPop<EOT>&, void>, public eoValueParam<v
|
||||||
|
|
||||||
private :
|
private :
|
||||||
|
|
||||||
const vector<WorthT>& worths;
|
const std::vector<WorthT>& worths;
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual void resize(eoPop<EOT>& _pop, unsigned sz)
|
virtual void resize(eoPop<EOT>& _pop, unsigned sz)
|
||||||
|
|
@ -151,7 +156,7 @@ class eoPerf2WorthCached : public eoPerf2Worth<EOT, WorthT>
|
||||||
*/
|
*/
|
||||||
virtual void sort_pop(eoPop<EOT>& _pop)
|
virtual void sort_pop(eoPop<EOT>& _pop)
|
||||||
{ // start with a vector of indices
|
{ // start with a vector of indices
|
||||||
vector<unsigned> indices(_pop.size());
|
std::vector<unsigned> indices(_pop.size());
|
||||||
|
|
||||||
unsigned i;
|
unsigned i;
|
||||||
for (i = 0; i < _pop.size();++i)
|
for (i = 0; i < _pop.size();++i)
|
||||||
|
|
@ -163,12 +168,12 @@ class eoPerf2WorthCached : public eoPerf2Worth<EOT, WorthT>
|
||||||
|
|
||||||
eoPop<EOT> tmp_pop;
|
eoPop<EOT> tmp_pop;
|
||||||
tmp_pop.resize(_pop.size());
|
tmp_pop.resize(_pop.size());
|
||||||
vector<WorthT> tmp_worths(value().size());
|
std::vector<WorthT> tmp_worths(value().size());
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
vector<EOT::Fitness> tmp_cache(_pop.size());
|
std::vector<EOT::Fitness> tmp_cache(_pop.size());
|
||||||
#else
|
#else
|
||||||
vector<typename EOT::Fitness> tmp_cache(_pop.size());
|
std::vector<typename EOT::Fitness> tmp_cache(_pop.size());
|
||||||
#endif
|
#endif
|
||||||
for (i = 0; i < _pop.size(); ++i)
|
for (i = 0; i < _pop.size(); ++i)
|
||||||
{
|
{
|
||||||
|
|
@ -188,7 +193,7 @@ class eoPerf2WorthCached : public eoPerf2Worth<EOT, WorthT>
|
||||||
class compare_worth
|
class compare_worth
|
||||||
{
|
{
|
||||||
public :
|
public :
|
||||||
compare_worth(const vector<WorthT>& _worths) : worths(_worths) {}
|
compare_worth(const std::vector<WorthT>& _worths) : worths(_worths) {}
|
||||||
|
|
||||||
bool operator()(unsigned a, unsigned b) const
|
bool operator()(unsigned a, unsigned b) const
|
||||||
{
|
{
|
||||||
|
|
@ -197,7 +202,7 @@ class eoPerf2WorthCached : public eoPerf2Worth<EOT, WorthT>
|
||||||
|
|
||||||
private :
|
private :
|
||||||
|
|
||||||
const vector<WorthT>& worths;
|
const std::vector<WorthT>& worths;
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual void resize(eoPop<EOT>& _pop, unsigned sz)
|
virtual void resize(eoPop<EOT>& _pop, unsigned sz)
|
||||||
|
|
@ -208,7 +213,7 @@ class eoPerf2WorthCached : public eoPerf2Worth<EOT, WorthT>
|
||||||
}
|
}
|
||||||
|
|
||||||
private :
|
private :
|
||||||
vector <typename EOT::Fitness> fitness_cache;
|
std::vector <typename EOT::Fitness> fitness_cache;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Reference in a new issue