Adding eoEasyEA constructor allowing to precise which eoPopEvalFunc should be used
This commit is contained in:
parent
fed65c4f08
commit
6ac423bf22
1 changed files with 40 additions and 0 deletions
|
|
@ -102,6 +102,33 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
||||||
offspring.reserve(_offspringSize); // This line avoids an incremental resize of offsprings.
|
offspring.reserve(_offspringSize); // This line avoids an incremental resize of offsprings.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Ctor allowing to specify which pop eval function we're going to use.
|
||||||
|
*
|
||||||
|
* Ctor taking a breed and merge, an overload of ctor to define an offspring size, and
|
||||||
|
* the pop eval function used. This allows to precise if we would like to use the
|
||||||
|
* parallel evaluation, for instance.
|
||||||
|
*/
|
||||||
|
eoEasyEA(
|
||||||
|
eoContinue<EOT>& _continuator,
|
||||||
|
eoEvalFunc<EOT>& _eval,
|
||||||
|
eoPopEvalFunc<EOT>& _pop_eval,
|
||||||
|
eoBreed<EOT>& _breed,
|
||||||
|
eoReplacement<EOT>& _replace,
|
||||||
|
unsigned _offspringSize
|
||||||
|
) : continuator(_continuator),
|
||||||
|
eval (_eval),
|
||||||
|
loopEval(_eval),
|
||||||
|
popEval(_pop_eval),
|
||||||
|
selectTransform(dummySelect, dummyTransform),
|
||||||
|
breed(_breed),
|
||||||
|
mergeReduce(dummyMerge, dummyReduce),
|
||||||
|
replace(_replace),
|
||||||
|
isFirstCall(true)
|
||||||
|
{
|
||||||
|
offspring.reserve(_offspringSize); // This line avoids an incremental resize of offsprings.
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
eoEasyEA(eoContinue <EOT> & _continuator,
|
eoEasyEA(eoContinue <EOT> & _continuator,
|
||||||
eoPopEvalFunc <EOT> & _pop_eval,
|
eoPopEvalFunc <EOT> & _pop_eval,
|
||||||
|
|
@ -219,6 +246,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
||||||
/// Apply a few generation of evolution to the population.
|
/// Apply a few generation of evolution to the population.
|
||||||
virtual void operator()(eoPop<EOT>& _pop)
|
virtual void operator()(eoPop<EOT>& _pop)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
eo::log << "[EasyEA] Call to operator()" << std::endl;
|
||||||
if (isFirstCall)
|
if (isFirstCall)
|
||||||
{
|
{
|
||||||
size_t total_capacity = _pop.capacity() + offspring.capacity();
|
size_t total_capacity = _pop.capacity() + offspring.capacity();
|
||||||
|
|
@ -227,22 +256,33 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
||||||
isFirstCall = false;
|
isFirstCall = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO TODOB delete all log traces
|
||||||
|
std::cout << "[EasyEA] After is first call." << std::endl;
|
||||||
|
|
||||||
eoPop<EOT> empty_pop;
|
eoPop<EOT> empty_pop;
|
||||||
|
std::cout << "[EasyEA] After empty_pop." << std::endl;
|
||||||
|
|
||||||
popEval(empty_pop, _pop); // A first eval of pop.
|
popEval(empty_pop, _pop); // A first eval of pop.
|
||||||
|
std::cout << "[EasyEA] After pop_eval." << std::endl;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
std::cout << "[EasyEA] Beginning try." << std::endl;
|
||||||
unsigned pSize = _pop.size();
|
unsigned pSize = _pop.size();
|
||||||
|
std::cout << "[EasyEA] psize determinated." << std::endl;
|
||||||
offspring.clear(); // new offspring
|
offspring.clear(); // new offspring
|
||||||
|
std::cout << "[EasyEA] offspring cleared." << std::endl;
|
||||||
|
|
||||||
breed(_pop, offspring);
|
breed(_pop, offspring);
|
||||||
|
|
||||||
|
std::cout << "[EasyEA] After breed, evaluating pop." << std::endl;
|
||||||
popEval(_pop, offspring); // eval of parents + offspring if necessary
|
popEval(_pop, offspring); // eval of parents + offspring if necessary
|
||||||
|
|
||||||
|
std::cout << "[EasyEA] After evaluation, replacing pop." << std::endl;
|
||||||
replace(_pop, offspring); // after replace, the new pop. is in _pop
|
replace(_pop, offspring); // after replace, the new pop. is in _pop
|
||||||
|
std::cout << "[EasyEA] After replacing, continuator." << std::endl;
|
||||||
|
|
||||||
if (pSize > _pop.size())
|
if (pSize > _pop.size())
|
||||||
throw std::runtime_error("Population shrinking!");
|
throw std::runtime_error("Population shrinking!");
|
||||||
|
|
|
||||||
Reference in a new issue