Bugfix: a reference can't be reinitialized. Different vectors weren't recopied after evaluation.
This commit is contained in:
parent
603268b053
commit
581b24af18
2 changed files with 13 additions and 9 deletions
|
|
@ -26,7 +26,7 @@ namespace eo
|
||||||
// long _maxTime = 0,
|
// long _maxTime = 0,
|
||||||
int _packetSize
|
int _packetSize
|
||||||
) :
|
) :
|
||||||
data( _pop ), func( _proc ), index( 0 ), size( _pop.size() ), packetSize( _packetSize ), masterRank( _masterRank ), comm( Node::comm() )
|
_data( &_pop ), func( _proc ), index( 0 ), size( _pop.size() ), packetSize( _packetSize ), masterRank( _masterRank ), comm( Node::comm() )
|
||||||
{
|
{
|
||||||
if ( _packetSize <= 0 )
|
if ( _packetSize <= 0 )
|
||||||
{
|
{
|
||||||
|
|
@ -39,7 +39,7 @@ namespace eo
|
||||||
{
|
{
|
||||||
index = 0;
|
index = 0;
|
||||||
size = _pop.size();
|
size = _pop.size();
|
||||||
data = _pop;
|
_data = &_pop;
|
||||||
assignedTasks.clear();
|
assignedTasks.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -48,7 +48,12 @@ namespace eo
|
||||||
delete [] tempArray;
|
delete [] tempArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<EOT> & data;
|
std::vector<EOT>& data()
|
||||||
|
{
|
||||||
|
return *_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<EOT> * _data;
|
||||||
eoUF<EOT&, void> & func;
|
eoUF<EOT&, void> & func;
|
||||||
int index;
|
int index;
|
||||||
int size;
|
int size;
|
||||||
|
|
@ -71,7 +76,6 @@ namespace eo
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
// futureIndex, index, packetSize, size, comm, assignedTasks, data
|
|
||||||
void operator()(int wrkRank)
|
void operator()(int wrkRank)
|
||||||
{
|
{
|
||||||
int futureIndex;
|
int futureIndex;
|
||||||
|
|
@ -92,7 +96,7 @@ namespace eo
|
||||||
d->assignedTasks[ wrkRank ].index = d->index;
|
d->assignedTasks[ wrkRank ].index = d->index;
|
||||||
d->assignedTasks[ wrkRank ].size = sentSize;
|
d->assignedTasks[ wrkRank ].size = sentSize;
|
||||||
|
|
||||||
d->comm.send( wrkRank, 1, & ( (d->data)[ d->index ] ) , sentSize );
|
d->comm.send( wrkRank, 1, & ( (d->data())[ d->index ] ) , sentSize );
|
||||||
d->index = futureIndex;
|
d->index = futureIndex;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -110,7 +114,7 @@ namespace eo
|
||||||
|
|
||||||
void operator()(int wrkRank)
|
void operator()(int wrkRank)
|
||||||
{
|
{
|
||||||
d->comm.recv( wrkRank, 1, & (d->data[ d->assignedTasks[wrkRank].index ] ), d->assignedTasks[wrkRank].size );
|
d->comm.recv( wrkRank, 1, & (d->data()[ d->assignedTasks[wrkRank].index ] ), d->assignedTasks[wrkRank].size );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -99,10 +99,10 @@ struct CatBestAnswers : public eo::mpi::HandleResponseParallelApply<EOT>
|
||||||
(*_wrapped)( wrkRank );
|
(*_wrapped)( wrkRank );
|
||||||
for(int i = index; i < index+size; ++i)
|
for(int i = index; i < index+size; ++i)
|
||||||
{
|
{
|
||||||
if( best.fitness() < d->data[ i ].fitness() )
|
if( best.fitness() < d->data()[ i ].fitness() )
|
||||||
{
|
{
|
||||||
eo::log << eo::quiet << "Better solution found:" << d->data[i].fitness() << std::endl;
|
eo::log << eo::quiet << "Better solution found:" << d->data()[i].fitness() << std::endl;
|
||||||
best = d->data[ i ];
|
best = d->data()[ i ];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Reference in a new issue