* eoEPReduce: moved the vector tmPop in attribute in order to keep memory capacity and avoir allocation/deallocation at each call to this function

This commit is contained in:
Caner Candan 2011-05-13 11:53:47 +02:00
commit cdd2a0dc5f

View file

@ -149,12 +149,17 @@ typedef typename EOT::Fitness Fitness;
// { // {
// std::cout << scores[j].first << " " << *scores[j].second << std::endl; // std::cout << scores[j].first << " " << *scores[j].second << std::endl;
// } // }
eoPop<EOT> tmPop;
tmPop.reserve(presentSize);
tmPop.clear();
for (j=0; j<_newsize; j++) for (j=0; j<_newsize; j++)
{ {
tmPop.push_back(*scores[j].second); tmPop.push_back(*scores[j].second);
} }
_newgen.swap(tmPop); _newgen.swap(tmPop);
// erase does not work, but I'm sure there is a way in STL to mark // erase does not work, but I'm sure there is a way in STL to mark
// and later delete all inside a std::vector ?????? // and later delete all inside a std::vector ??????
// this would avoid all copies here // this would avoid all copies here
@ -165,6 +170,7 @@ typedef typename EOT::Fitness Fitness;
} }
private: private:
unsigned t_size; unsigned t_size;
eoPop<EOT> tmPop;
}; };
/** a truncate class that does not sort, but repeatidely kills the worse. /** a truncate class that does not sort, but repeatidely kills the worse.
@ -220,7 +226,9 @@ public:
if (oldSize < _newsize) if (oldSize < _newsize)
throw std::logic_error("eoDetTournamentTruncate: Cannot truncate to a larger size!\n"); throw std::logic_error("eoDetTournamentTruncate: Cannot truncate to a larger size!\n");
// Now OK to erase some losers // Now OK to erase some losers
std::cout << "oldSize - _newsize: " << oldSize - _newsize << std::endl;
for (unsigned i=0; i<oldSize - _newsize; i++) for (unsigned i=0; i<oldSize - _newsize; i++)
{ {
//OLDCODE EOT & eo = inverse_deterministic_tournament<EOT>(_newgen, t_size); //OLDCODE EOT & eo = inverse_deterministic_tournament<EOT>(_newgen, t_size);