diff --git a/trunk/paradiseo-peo/src/core/eoVector_comm.h b/trunk/paradiseo-peo/src/core/eoVector_comm.h index 5e867f1d9..9921c3622 100644 --- a/trunk/paradiseo-peo/src/core/eoVector_comm.h +++ b/trunk/paradiseo-peo/src/core/eoVector_comm.h @@ -43,7 +43,14 @@ template void pack (const eoVector & __v) { - pack (__v.fitness ()) ; + + if ( !__v.invalid() ) + { + pack( (unsigned int) 1 ); + pack (__v.fitness ()) ; + } + else + pack( (unsigned int) 0 ); unsigned len = __v.size (); pack (len); for (unsigned i = 0 ; i < len; i ++) @@ -53,9 +60,15 @@ template void pack (const eoVector & __v) { template void unpack (eoVector & __v) { F fit; - unpack (fit); - __v.fitness (fit); - + unsigned int vfit; + unpack( vfit ); + if ( vfit ) + { + unpack (fit); + __v.fitness (fit); + } + else + __v.invalidate(); unsigned len; unpack (len); __v.resize (len); diff --git a/trunk/paradiseo-peo/src/peoParaSGATransform.h b/trunk/paradiseo-peo/src/peoParaSGATransform.h index 68f503b8b..81f3a724a 100644 --- a/trunk/paradiseo-peo/src/peoParaSGATransform.h +++ b/trunk/paradiseo-peo/src/peoParaSGATransform.h @@ -149,8 +149,8 @@ template< class EOT > void peoParaSGATransform< EOT > :: unpackResult() { :: unpack( pop->operator[]( sidx++ ) ); :: unpack( pop->operator[]( sidx ) ); num_term += 2; - - if( num_term == pop->size() ) { + // Can be used with a odd size + if( num_term == 2*(pop->size()/2) ) { getOwner()->setActive(); resume();