diff --git a/eo/test/mpi/t-mpi-multistart.cpp b/eo/test/mpi/t-mpi-multistart.cpp index d08d75f6..91db72e3 100644 --- a/eo/test/mpi/t-mpi-multistart.cpp +++ b/eo/test/mpi/t-mpi-multistart.cpp @@ -338,6 +338,44 @@ struct ReuseOriginalPopEA: public MultiStartStore::ResetAlgo eoEvalFunc& _eval; }; +template< class EOT > +struct ReuseSamePopEA : public MultiStartStore::ResetAlgo +{ + ReuseSamePopEA( + eoGenContinue& continuator, + const eoPop& originalPop, + eoEvalFunc& eval + ) : + _continuator( continuator ), + _originalPop( originalPop ), + _firstTime( true ), + _initial( continuator.totalGenerations() ) + { + for( unsigned i = 0, size = originalPop.size(); + i < size; ++i ) + { + eval(_originalPop[i]); + } + } + + void operator()( eoPop& pop ) + { + if( _firstTime ) + { + pop = _originalPop; + _firstTime = false; + } + _continuator.totalGenerations( _initial ); + } + + protected: + + eoGenContinue& _continuator; + eoPop _originalPop; + bool _firstTime; + int _initial; +}; + int main(int argc, char **argv) { Node::init( argc, argv ); @@ -436,7 +474,7 @@ int main(int argc, char **argv) eval, continuator); DynamicAssignmentAlgorithm assignmentAlgo; - ReuseOriginalPopEA< Indi > resetAlgo( continuator, pop, eval ); + ReuseSamePopEA< Indi > resetAlgo( continuator, pop, eval ); GetRandomSeeds< Indi > getSeeds( SEED ); MultiStartStore< Indi > store(