* 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),
|
||||
breed(_breed),
|
||||
mergeReduce(dummyMerge, dummyReduce),
|
||||
replace(_replace)
|
||||
replace(_replace),
|
||||
isFirstCall(true)
|
||||
{}
|
||||
|
||||
/** 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),
|
||||
breed(_breed),
|
||||
mergeReduce(dummyMerge, dummyReduce),
|
||||
replace(_replace)
|
||||
replace(_replace),
|
||||
isFirstCall(true)
|
||||
{
|
||||
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),
|
||||
breed (_breed),
|
||||
mergeReduce (dummyMerge, dummyReduce),
|
||||
replace (_replace) {
|
||||
replace (_replace),
|
||||
isFirstCall(true)
|
||||
{
|
||||
|
||||
}
|
||||
*/
|
||||
|
|
@ -131,7 +135,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
|||
selectTransform(dummySelect, dummyTransform),
|
||||
breed(_breed),
|
||||
mergeReduce(dummyMerge, dummyReduce),
|
||||
replace(_replace)
|
||||
replace(_replace),
|
||||
isFirstCall(true)
|
||||
{}
|
||||
|
||||
|
||||
|
|
@ -149,7 +154,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
|||
selectTransform(_select, _transform),
|
||||
breed(selectTransform),
|
||||
mergeReduce(dummyMerge, dummyReduce),
|
||||
replace(_replace)
|
||||
replace(_replace),
|
||||
isFirstCall(true)
|
||||
{}
|
||||
|
||||
/// Ctor eoBreed, eoMerge and eoReduce.
|
||||
|
|
@ -166,7 +172,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
|||
selectTransform(dummySelect, dummyTransform),
|
||||
breed(_breed),
|
||||
mergeReduce(_merge, _reduce),
|
||||
replace(mergeReduce)
|
||||
replace(mergeReduce),
|
||||
isFirstCall(true)
|
||||
{}
|
||||
|
||||
/// Ctor eoSelect, eoTransform, and eoReplacement
|
||||
|
|
@ -183,7 +190,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
|||
selectTransform(_select, _transform),
|
||||
breed(selectTransform),
|
||||
mergeReduce(dummyMerge, dummyReduce),
|
||||
replace(_replace)
|
||||
replace(_replace),
|
||||
isFirstCall(true)
|
||||
{}
|
||||
|
||||
/// Ctor eoSelect, eoTransform, eoMerge and eoReduce.
|
||||
|
|
@ -201,7 +209,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
|||
selectTransform(_select, _transform),
|
||||
breed(selectTransform),
|
||||
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.
|
||||
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;
|
||||
|
||||
|
|
@ -293,6 +308,8 @@ template<class EOT> class eoEasyEA: public eoAlgo<EOT>
|
|||
|
||||
eoPop<EOT> offspring;
|
||||
|
||||
bool isFirstCall;
|
||||
|
||||
// Friend classes
|
||||
friend class eoIslandsEasyEA <EOT> ;
|
||||
friend class eoDistEvalEasyEA <EOT> ;
|
||||
|
|
|
|||
Reference in a new issue