MPI Multistart: removed traces and useless comments.
This commit is contained in:
parent
db93ac635b
commit
9a40d6ed04
1 changed files with 14 additions and 65 deletions
|
|
@ -11,7 +11,6 @@ using namespace eo::mpi;
|
||||||
// Use functions from namespace std
|
// Use functions from namespace std
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
class SerializableEOReal: public eoReal<double>, public eoserial::Persistent
|
class SerializableEOReal: public eoReal<double>, public eoserial::Persistent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -19,6 +18,7 @@ public:
|
||||||
SerializableEOReal(unsigned size = 0, double value = 0.0) :
|
SerializableEOReal(unsigned size = 0, double value = 0.0) :
|
||||||
eoReal<double>(size, value)
|
eoReal<double>(size, value)
|
||||||
{
|
{
|
||||||
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
void unpack( const eoserial::Object* obj )
|
void unpack( const eoserial::Object* obj )
|
||||||
|
|
@ -69,48 +69,13 @@ typedef SerializableEOReal Indi;
|
||||||
|
|
||||||
double real_value(const Indi & _indi)
|
double real_value(const Indi & _indi)
|
||||||
{
|
{
|
||||||
double sum = 0;
|
double sum = 0;
|
||||||
for (unsigned i = 0; i < _indi.size(); i++)
|
for (unsigned i = 0; i < _indi.size(); i++)
|
||||||
sum += _indi[i]*_indi[i];
|
sum += _indi[i]*_indi[i];
|
||||||
return (-sum); // maximizing only
|
return (-sum); // maximizing only
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************** PARALLELIZATION JOB *******************************/
|
/************************** PARALLELIZATION JOB *******************************/
|
||||||
/*
|
|
||||||
* This file is a template for a new eo::mpi::Job. You have everything that should be necessary to implement a new
|
|
||||||
* parallelized algorithm.
|
|
||||||
*
|
|
||||||
* Replace MultiStart by the name of your algorithm (for instance: MultiStart, ParallelApply, etc.).
|
|
||||||
*/
|
|
||||||
|
|
||||||
template< class T >
|
|
||||||
struct SerializableBasicType : public eoserial::Persistent
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SerializableBasicType( T & value )
|
|
||||||
{
|
|
||||||
_value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
operator T&()
|
|
||||||
{
|
|
||||||
return _value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void unpack( const eoserial::Object* obj )
|
|
||||||
{
|
|
||||||
eoserial::unpack( *obj, "value", _value );
|
|
||||||
}
|
|
||||||
|
|
||||||
eoserial::Object* pack( void ) const
|
|
||||||
{
|
|
||||||
eoserial::Object* obj = new eoserial::Object;
|
|
||||||
obj->add( "value", eoserial::make( _value ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
T _value;
|
|
||||||
};
|
|
||||||
|
|
||||||
template< class EOT >
|
template< class EOT >
|
||||||
struct MultiStartData
|
struct MultiStartData
|
||||||
|
|
@ -159,17 +124,10 @@ class HandleResponseMultiStart : public HandleResponseFunction< MultiStartData<
|
||||||
|
|
||||||
void operator()( int wrkRank )
|
void operator()( int wrkRank )
|
||||||
{
|
{
|
||||||
std::cout << "Response received." << std::endl;
|
|
||||||
|
|
||||||
EOT individual;
|
EOT individual;
|
||||||
MultiStartData< EOT >& d = *_data;
|
MultiStartData< EOT >& d = *_data;
|
||||||
d.comm.recv( wrkRank, 1, individual );
|
d.comm.recv( wrkRank, 1, individual );
|
||||||
|
|
||||||
std::cout << "Fitness of individual: " << individual.fitness() << std::endl;
|
|
||||||
if ( ! d.firstIndividual ) {
|
|
||||||
std::cout << "Best fitness: " << d.bestFitness << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( d.firstIndividual || individual.fitness() > d.bestFitness )
|
if( d.firstIndividual || individual.fitness() > d.bestFitness )
|
||||||
{
|
{
|
||||||
d.bestFitness = individual.fitness();
|
d.bestFitness = individual.fitness();
|
||||||
|
|
@ -187,12 +145,6 @@ class ProcessTaskMultiStart : public ProcessTaskFunction< MultiStartData< EOT >
|
||||||
|
|
||||||
void operator()()
|
void operator()()
|
||||||
{
|
{
|
||||||
// DEBUG
|
|
||||||
//static int i = 0;
|
|
||||||
//std::cout << Node::comm().rank() << "-" << i++ << " random: " << eo::rng.rand() << std::endl;
|
|
||||||
|
|
||||||
// std::cout << "POP(" << _data->pop.size() << ") : " << _data->pop << std::endl;
|
|
||||||
|
|
||||||
_data->resetAlgo( _data->pop );
|
_data->resetAlgo( _data->pop );
|
||||||
_data->algo( _data->pop );
|
_data->algo( _data->pop );
|
||||||
_data->comm.send( _data->masterRank, 1, _data->pop.best_element() );
|
_data->comm.send( _data->masterRank, 1, _data->pop.best_element() );
|
||||||
|
|
@ -222,13 +174,12 @@ class MultiStartStore : public JobStore< MultiStartData< EOT > >
|
||||||
MultiStartStore(
|
MultiStartStore(
|
||||||
eoAlgo<EOT> & algo,
|
eoAlgo<EOT> & algo,
|
||||||
int masterRank,
|
int masterRank,
|
||||||
// eoInit<EOT>* init = 0
|
|
||||||
ResetAlgo & resetAlgo,
|
ResetAlgo & resetAlgo,
|
||||||
GetSeeds & getSeeds
|
GetSeeds & getSeeds
|
||||||
)
|
)
|
||||||
: _data( Node::comm(), algo, masterRank, resetAlgo ),
|
: _data( Node::comm(), algo, masterRank, resetAlgo ),
|
||||||
_masterRank( masterRank ),
|
_getSeeds( getSeeds ),
|
||||||
_getSeeds( getSeeds )
|
_masterRank( masterRank )
|
||||||
{
|
{
|
||||||
this->_iff = new IsFinishedMultiStart< EOT >;
|
this->_iff = new IsFinishedMultiStart< EOT >;
|
||||||
this->_iff->needDelete(true);
|
this->_iff->needDelete(true);
|
||||||
|
|
@ -250,12 +201,10 @@ class MultiStartStore : public JobStore< MultiStartData< EOT > >
|
||||||
{
|
{
|
||||||
if( seeds.size() < nbWorkers )
|
if( seeds.size() < nbWorkers )
|
||||||
{
|
{
|
||||||
// TODO
|
// Random seeds
|
||||||
// get multiples of the current seed?
|
for( int i = seeds.size(); i < nbWorkers; ++i )
|
||||||
// generate seeds?
|
|
||||||
for( int i = 1; seeds.size() < nbWorkers ; ++i )
|
|
||||||
{
|
{
|
||||||
seeds.push_back( i );
|
seeds.push_back( eo::rng.rand() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -268,7 +217,7 @@ class MultiStartStore : public JobStore< MultiStartData< EOT > >
|
||||||
{
|
{
|
||||||
int seed;
|
int seed;
|
||||||
Node::comm().recv( _masterRank, 1, seed );
|
Node::comm().recv( _masterRank, 1, seed );
|
||||||
std::cout << Node::comm().rank() << "- Seed: " << seed << std::endl;
|
eo::log << eo::debug << Node::comm().rank() << "- Seed: " << seed << std::endl;
|
||||||
eo::rng.reseed( seed );
|
eo::rng.reseed( seed );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -280,7 +229,6 @@ class MultiStartStore : public JobStore< MultiStartData< EOT > >
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MultiStartData< EOT > _data;
|
MultiStartData< EOT > _data;
|
||||||
|
|
||||||
GetSeeds & _getSeeds;
|
GetSeeds & _getSeeds;
|
||||||
int _masterRank;
|
int _masterRank;
|
||||||
};
|
};
|
||||||
|
|
@ -343,6 +291,7 @@ struct MultiplesOfNumber : public MultiStartStore<EOT>::GetSeeds
|
||||||
{
|
{
|
||||||
ret.push_back( (++_i) * _seed );
|
ret.push_back( (++_i) * _seed );
|
||||||
}
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -366,6 +315,7 @@ struct GetRandomSeeds : public MultiStartStore<EOT>::GetSeeds
|
||||||
{
|
{
|
||||||
ret.push_back( eo::rng.rand() );
|
ret.push_back( eo::rng.rand() );
|
||||||
}
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -486,8 +436,7 @@ int main(int argc, char **argv)
|
||||||
// termination condition
|
// termination condition
|
||||||
/////////////////////////////////////
|
/////////////////////////////////////
|
||||||
// stop after MAX_GEN generations
|
// stop after MAX_GEN generations
|
||||||
eoGenContinue<Indi> continuator(MAX_GEN); /** TODO FIXME FIXME BUG HERE!
|
eoGenContinue<Indi> continuator(MAX_GEN);
|
||||||
Continuator thinks it's done! */
|
|
||||||
|
|
||||||
// GENERATION
|
// GENERATION
|
||||||
/////////////////////////////////////////
|
/////////////////////////////////////////
|
||||||
|
|
|
||||||
Reference in a new issue