From 41b73f7834cf31a8722c5f72167a311891ed535d Mon Sep 17 00:00:00 2001 From: Caner Candan Date: Fri, 13 May 2011 11:37:49 +0200 Subject: [PATCH] * eoEasyEA: reserving same size allocation for parents and offspring in order to forcast the swapping in replacement operator --- eo/src/eoEasyEA.h | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/eo/src/eoEasyEA.h b/eo/src/eoEasyEA.h index eb773969..2c7c5474 100644 --- a/eo/src/eoEasyEA.h +++ b/eo/src/eoEasyEA.h @@ -78,7 +78,8 @@ template class eoEasyEA: public eoAlgo 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 eoEasyEA: public eoAlgo 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 eoEasyEA: public eoAlgo selectTransform (dummySelect, dummyTransform), breed (_breed), mergeReduce (dummyMerge, dummyReduce), - replace (_replace) { + replace (_replace), + isFirstCall(true) + { } */ @@ -131,7 +135,8 @@ template class eoEasyEA: public eoAlgo selectTransform(dummySelect, dummyTransform), breed(_breed), mergeReduce(dummyMerge, dummyReduce), - replace(_replace) + replace(_replace), + isFirstCall(true) {} @@ -149,7 +154,8 @@ template class eoEasyEA: public eoAlgo 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 eoEasyEA: public eoAlgo 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 eoEasyEA: public eoAlgo 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 eoEasyEA: public eoAlgo selectTransform(_select, _transform), breed(selectTransform), mergeReduce(_merge, _reduce), - replace(mergeReduce) + replace(mergeReduce), + isFirstCall(true) {} @@ -210,7 +219,13 @@ template class eoEasyEA: public eoAlgo /// Apply a few generation of evolution to the population. virtual void operator()(eoPop& _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 empty_pop; @@ -293,6 +308,8 @@ template class eoEasyEA: public eoAlgo eoPop offspring; + bool isFirstCall; + // Friend classes friend class eoIslandsEasyEA ; friend class eoDistEvalEasyEA ;