* eoEasyEA: reserving same size allocation for parents and offspring in order to forcast the swapping in replacement operator
This commit is contained in:
parent
6d8b66d345
commit
41b73f7834
1 changed files with 26 additions and 9 deletions
|
|
@ -78,7 +78,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
||||||
selectTransform(dummySelect, dummyTransform),
|
selectTransform(dummySelect, dummyTransform),
|
||||||
breed(_breed),
|
breed(_breed),
|
||||||
mergeReduce(dummyMerge, dummyReduce),
|
mergeReduce(dummyMerge, dummyReduce),
|
||||||
replace(_replace)
|
replace(_replace),
|
||||||
|
isFirstCall(true)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
/** Ctor taking a breed and merge, an overload of ctor to define an offspring size */
|
/** Ctor taking a breed and merge, an overload of ctor to define an offspring size */
|
||||||
|
|
@ -95,7 +96,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
||||||
selectTransform(dummySelect, dummyTransform),
|
selectTransform(dummySelect, dummyTransform),
|
||||||
breed(_breed),
|
breed(_breed),
|
||||||
mergeReduce(dummyMerge, dummyReduce),
|
mergeReduce(dummyMerge, dummyReduce),
|
||||||
replace(_replace)
|
replace(_replace),
|
||||||
|
isFirstCall(true)
|
||||||
{
|
{
|
||||||
offspring.reserve(_offspringSize); // This line avoids an incremental resize of offsprings.
|
offspring.reserve(_offspringSize); // This line avoids an incremental resize of offsprings.
|
||||||
}
|
}
|
||||||
|
|
@ -113,7 +115,9 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
||||||
selectTransform (dummySelect, dummyTransform),
|
selectTransform (dummySelect, dummyTransform),
|
||||||
breed (_breed),
|
breed (_breed),
|
||||||
mergeReduce (dummyMerge, dummyReduce),
|
mergeReduce (dummyMerge, dummyReduce),
|
||||||
replace (_replace) {
|
replace (_replace),
|
||||||
|
isFirstCall(true)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
@ -131,7 +135,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
||||||
selectTransform(dummySelect, dummyTransform),
|
selectTransform(dummySelect, dummyTransform),
|
||||||
breed(_breed),
|
breed(_breed),
|
||||||
mergeReduce(dummyMerge, dummyReduce),
|
mergeReduce(dummyMerge, dummyReduce),
|
||||||
replace(_replace)
|
replace(_replace),
|
||||||
|
isFirstCall(true)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -149,7 +154,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
||||||
selectTransform(_select, _transform),
|
selectTransform(_select, _transform),
|
||||||
breed(selectTransform),
|
breed(selectTransform),
|
||||||
mergeReduce(dummyMerge, dummyReduce),
|
mergeReduce(dummyMerge, dummyReduce),
|
||||||
replace(_replace)
|
replace(_replace),
|
||||||
|
isFirstCall(true)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
/// Ctor eoBreed, eoMerge and eoReduce.
|
/// Ctor eoBreed, eoMerge and eoReduce.
|
||||||
|
|
@ -166,7 +172,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
||||||
selectTransform(dummySelect, dummyTransform),
|
selectTransform(dummySelect, dummyTransform),
|
||||||
breed(_breed),
|
breed(_breed),
|
||||||
mergeReduce(_merge, _reduce),
|
mergeReduce(_merge, _reduce),
|
||||||
replace(mergeReduce)
|
replace(mergeReduce),
|
||||||
|
isFirstCall(true)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
/// Ctor eoSelect, eoTransform, and eoReplacement
|
/// Ctor eoSelect, eoTransform, and eoReplacement
|
||||||
|
|
@ -183,7 +190,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
||||||
selectTransform(_select, _transform),
|
selectTransform(_select, _transform),
|
||||||
breed(selectTransform),
|
breed(selectTransform),
|
||||||
mergeReduce(dummyMerge, dummyReduce),
|
mergeReduce(dummyMerge, dummyReduce),
|
||||||
replace(_replace)
|
replace(_replace),
|
||||||
|
isFirstCall(true)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
/// Ctor eoSelect, eoTransform, eoMerge and eoReduce.
|
/// Ctor eoSelect, eoTransform, eoMerge and eoReduce.
|
||||||
|
|
@ -201,7 +209,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
||||||
selectTransform(_select, _transform),
|
selectTransform(_select, _transform),
|
||||||
breed(selectTransform),
|
breed(selectTransform),
|
||||||
mergeReduce(_merge, _reduce),
|
mergeReduce(_merge, _reduce),
|
||||||
replace(mergeReduce)
|
replace(mergeReduce),
|
||||||
|
isFirstCall(true)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -210,7 +219,13 @@ 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)
|
||||||
{
|
{
|
||||||
_pop.reserve(offspring.capacity());
|
if (isFirstCall)
|
||||||
|
{
|
||||||
|
size_t total_capacity = _pop.capacity() + offspring.capacity();
|
||||||
|
_pop.reserve(total_capacity);
|
||||||
|
offspring.reserve(total_capacity);
|
||||||
|
isFirstCall = false;
|
||||||
|
}
|
||||||
|
|
||||||
eoPop<EOT> empty_pop;
|
eoPop<EOT> empty_pop;
|
||||||
|
|
||||||
|
|
@ -293,6 +308,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
||||||
|
|
||||||
eoPop<EOT> offspring;
|
eoPop<EOT> offspring;
|
||||||
|
|
||||||
|
bool isFirstCall;
|
||||||
|
|
||||||
// Friend classes
|
// Friend classes
|
||||||
friend class eoIslandsEasyEA <EOT> ;
|
friend class eoIslandsEasyEA <EOT> ;
|
||||||
friend class eoDistEvalEasyEA <EOT> ;
|
friend class eoDistEvalEasyEA <EOT> ;
|
||||||
|
|
|
||||||
Reference in a new issue