* eoEasyEA: reserving same size allocation for parents and offspring in order to forcast the swapping in replacement operator

This commit is contained in:
Caner Candan 2011-05-13 11:37:49 +02:00
commit 41b73f7834

View file

@ -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> ;