new style peo
git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1021 331e1502-861f-0410-8da2-ba01fb791d7f
This commit is contained in:
parent
ef8ef3f3b2
commit
edb6d65a7b
34 changed files with 407 additions and 386 deletions
|
|
@ -80,10 +80,10 @@ COMM_ID getKey (const Communicable * __comm)
|
||||||
}
|
}
|
||||||
|
|
||||||
void Communicable :: lock ()
|
void Communicable :: lock ()
|
||||||
{
|
{
|
||||||
|
|
||||||
sem_wait (& sem_lock);
|
sem_wait (& sem_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Communicable :: unlock ()
|
void Communicable :: unlock ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -39,13 +39,16 @@
|
||||||
|
|
||||||
void CompleteTopology :: setNeighbors (Cooperative * __mig,
|
void CompleteTopology :: setNeighbors (Cooperative * __mig,
|
||||||
std :: vector <Cooperative *> & __from,
|
std :: vector <Cooperative *> & __from,
|
||||||
std :: vector <Cooperative *> & __to) {
|
std :: vector <Cooperative *> & __to)
|
||||||
|
{
|
||||||
|
|
||||||
__from.clear () ;
|
__from.clear () ;
|
||||||
__to.clear () ;
|
__to.clear () ;
|
||||||
|
|
||||||
for (unsigned i = 0; i < mig.size (); i ++) {
|
for (unsigned i = 0; i < mig.size (); i ++)
|
||||||
if (mig [i] != __mig) {
|
{
|
||||||
|
if (mig [i] != __mig)
|
||||||
|
{
|
||||||
__from.push_back (mig [i]);
|
__from.push_back (mig [i]);
|
||||||
__to.push_back (mig [i]);
|
__to.push_back (mig [i]);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,13 +39,14 @@
|
||||||
|
|
||||||
#include "topology.h"
|
#include "topology.h"
|
||||||
|
|
||||||
class CompleteTopology : public Topology {
|
class CompleteTopology : public Topology
|
||||||
|
{
|
||||||
|
|
||||||
public :
|
public :
|
||||||
|
|
||||||
void setNeighbors (Cooperative * __mig,
|
void setNeighbors (Cooperative * __mig,
|
||||||
std :: vector <Cooperative *> & __from,
|
std :: vector <Cooperative *> & __from,
|
||||||
std :: vector <Cooperative *> & __to);
|
std :: vector <Cooperative *> & __to);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -41,13 +41,16 @@
|
||||||
|
|
||||||
void RandomTopology :: setNeighbors (Cooperative * __mig,
|
void RandomTopology :: setNeighbors (Cooperative * __mig,
|
||||||
std :: vector <Cooperative *> & __from,
|
std :: vector <Cooperative *> & __from,
|
||||||
std :: vector <Cooperative *> & __to) {
|
std :: vector <Cooperative *> & __to)
|
||||||
|
{
|
||||||
|
|
||||||
__from.clear () ;
|
__from.clear () ;
|
||||||
__to.clear () ;
|
__to.clear () ;
|
||||||
|
|
||||||
for (unsigned i = 0; i < mig.size (); i ++) {
|
for (unsigned i = 0; i < mig.size (); i ++)
|
||||||
if (mig [i] != __mig && rng.uniform() < 0.5 ) {
|
{
|
||||||
|
if (mig [i] != __mig && rng.uniform() < 0.5 )
|
||||||
|
{
|
||||||
__from.push_back (mig [i]);
|
__from.push_back (mig [i]);
|
||||||
__to.push_back (mig [i]);
|
__to.push_back (mig [i]);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,13 +39,14 @@
|
||||||
|
|
||||||
#include "topology.h"
|
#include "topology.h"
|
||||||
|
|
||||||
class RandomTopology : public Topology {
|
class RandomTopology : public Topology
|
||||||
|
{
|
||||||
|
|
||||||
public :
|
public :
|
||||||
|
|
||||||
void setNeighbors (Cooperative * __mig,
|
void setNeighbors (Cooperative * __mig,
|
||||||
std :: vector <Cooperative *> & __from,
|
std :: vector <Cooperative *> & __from,
|
||||||
std :: vector <Cooperative *> & __to);
|
std :: vector <Cooperative *> & __to);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -41,29 +41,35 @@ StarTopology :: StarTopology () : center( NULL ) {}
|
||||||
|
|
||||||
void StarTopology :: setNeighbors (Cooperative * __mig,
|
void StarTopology :: setNeighbors (Cooperative * __mig,
|
||||||
std :: vector <Cooperative *> & __from,
|
std :: vector <Cooperative *> & __from,
|
||||||
std :: vector <Cooperative *> & __to) {
|
std :: vector <Cooperative *> & __to)
|
||||||
|
{
|
||||||
|
|
||||||
assert( center != NULL );
|
assert( center != NULL );
|
||||||
|
|
||||||
__from.clear () ;
|
__from.clear () ;
|
||||||
__to.clear () ;
|
__to.clear () ;
|
||||||
|
|
||||||
if ( __mig == center ) {
|
if ( __mig == center )
|
||||||
|
{
|
||||||
|
|
||||||
for (unsigned i = 0; i < mig.size (); i ++) {
|
for (unsigned i = 0; i < mig.size (); i ++)
|
||||||
if (mig [i] != center) {
|
{
|
||||||
|
if (mig [i] != center)
|
||||||
|
{
|
||||||
__from.push_back (mig [i]);
|
__from.push_back (mig [i]);
|
||||||
__to.push_back (mig [i]);
|
__to.push_back (mig [i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
__from.push_back (center);
|
__from.push_back (center);
|
||||||
__to.push_back (center);
|
__to.push_back (center);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void StarTopology :: setCenter (Cooperative& __center) {
|
void StarTopology :: setCenter (Cooperative& __center)
|
||||||
|
{
|
||||||
|
|
||||||
center = &__center;
|
center = &__center;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,9 +39,10 @@
|
||||||
|
|
||||||
#include "topology.h"
|
#include "topology.h"
|
||||||
|
|
||||||
class StarTopology : public Topology {
|
class StarTopology : public Topology
|
||||||
|
{
|
||||||
|
|
||||||
public :
|
public :
|
||||||
|
|
||||||
StarTopology ();
|
StarTopology ();
|
||||||
|
|
||||||
|
|
@ -51,9 +52,9 @@ public :
|
||||||
|
|
||||||
void setCenter (Cooperative& __center);
|
void setCenter (Cooperative& __center);
|
||||||
|
|
||||||
private :
|
private :
|
||||||
|
|
||||||
Cooperative* center;
|
Cooperative* center;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -43,10 +43,10 @@ Topology :: ~ Topology ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void Topology :: add (Cooperative & __mig)
|
void Topology :: add (Cooperative & __mig)
|
||||||
{
|
{
|
||||||
|
|
||||||
mig.push_back (& __mig) ;
|
mig.push_back (& __mig) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
Topology :: operator std :: vector <Cooperative *>& ()
|
Topology :: operator std :: vector <Cooperative *>& ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,11 @@ struct SyncCompare
|
||||||
std::vector< SyncEntry >::const_iterator itA = syncA.begin();
|
std::vector< SyncEntry >::const_iterator itA = syncA.begin();
|
||||||
std::vector< SyncEntry >::const_iterator itB = syncB.begin();
|
std::vector< SyncEntry >::const_iterator itB = syncB.begin();
|
||||||
|
|
||||||
while ( itA != syncA.end() && (*itA).runner == (*itB).runner ) { itA++; itB++; }
|
while ( itA != syncA.end() && (*itA).runner == (*itB).runner )
|
||||||
|
{
|
||||||
|
itA++;
|
||||||
|
itB++;
|
||||||
|
}
|
||||||
|
|
||||||
return ( (itA == syncA.end()) ) ? false : ( (*itA).runner < (*itB).runner );
|
return ( (itA == syncA.end()) ) ? false : ( (*itA).runner < (*itB).runner );
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,8 @@ int main (int __argc, char *__argv[])
|
||||||
eoSegmentCrossover<Indi> crossover;
|
eoSegmentCrossover<Indi> crossover;
|
||||||
eoUniformMutation<Indi> mutation(0.01);
|
eoUniformMutation<Indi> mutation(0.01);
|
||||||
peoTransform<Indi> transform(crossover,0.8,mutation,0.3);
|
peoTransform<Indi> transform(crossover,0.8,mutation,0.3);
|
||||||
/*p*/eoPop < Indi > pop;
|
/*p*/
|
||||||
|
eoPop < Indi > pop;
|
||||||
pop.append (10, random);
|
pop.append (10, random);
|
||||||
eoPlusReplacement<Indi> replace;
|
eoPlusReplacement<Indi> replace;
|
||||||
eoRandomSelect<Indi> mig_select_one;
|
eoRandomSelect<Indi> mig_select_one;
|
||||||
|
|
@ -90,7 +91,8 @@ int main (int __argc, char *__argv[])
|
||||||
eoSegmentCrossover<Indi> crossover2;
|
eoSegmentCrossover<Indi> crossover2;
|
||||||
eoUniformMutation<Indi> mutation2(0.01);
|
eoUniformMutation<Indi> mutation2(0.01);
|
||||||
peoTransform<Indi> transform2(crossover2,0.8,mutation2,0.3);
|
peoTransform<Indi> transform2(crossover2,0.8,mutation2,0.3);
|
||||||
/*p*/eoPop < Indi > pop2;
|
/*p*/
|
||||||
|
eoPop < Indi > pop2;
|
||||||
pop2.append (10, random2);
|
pop2.append (10, random2);
|
||||||
eoPlusReplacement<Indi> replace2;
|
eoPlusReplacement<Indi> replace2;
|
||||||
eoRandomSelect<Indi> mig_select_one2;
|
eoRandomSelect<Indi> mig_select_one2;
|
||||||
|
|
|
||||||
|
|
@ -40,12 +40,12 @@
|
||||||
#include <peo>
|
#include <peo>
|
||||||
|
|
||||||
struct Algorithm
|
struct Algorithm
|
||||||
{
|
{
|
||||||
void operator()(double & _d)
|
void operator()(double & _d)
|
||||||
{
|
{
|
||||||
_d = _d * _d;
|
_d = _d * _d;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
int main (int __argc, char * * __argv)
|
int main (int __argc, char * * __argv)
|
||||||
{
|
{
|
||||||
|
|
@ -56,7 +56,7 @@ int main (int __argc, char * * __argv)
|
||||||
std::vector < double > v;
|
std::vector < double > v;
|
||||||
if (getNodeRank()==1)
|
if (getNodeRank()==1)
|
||||||
std::cout<<"\n\nBefore :";
|
std::cout<<"\n\nBefore :";
|
||||||
for(unsigned i = 0; i< 10; i++)
|
for (unsigned i = 0; i< 10; i++)
|
||||||
{
|
{
|
||||||
v.push_back(i);
|
v.push_back(i);
|
||||||
if (getNodeRank()==1)
|
if (getNodeRank()==1)
|
||||||
|
|
@ -71,7 +71,7 @@ int main (int __argc, char * * __argv)
|
||||||
if (getNodeRank()==1)
|
if (getNodeRank()==1)
|
||||||
{
|
{
|
||||||
std::cout<<"\n\nAfter :\n";
|
std::cout<<"\n\nAfter :\n";
|
||||||
for(unsigned i = 0; i< 10; i++)
|
for (unsigned i = 0; i< 10; i++)
|
||||||
std::cout<<v[i]<<"\n";
|
std::cout<<v[i]<<"\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ double f (const Indi & _indi)
|
||||||
return (-sum);
|
return (-sum);
|
||||||
}
|
}
|
||||||
struct Algorithm
|
struct Algorithm
|
||||||
{
|
{
|
||||||
Algorithm( peoPopEval < Indi > & _eval): eval( _eval ){}
|
Algorithm( peoPopEval < Indi > & _eval): eval( _eval ){}
|
||||||
void operator()(eoPop < Indi > & _pop)
|
void operator()(eoPop < Indi > & _pop)
|
||||||
{
|
{
|
||||||
|
|
@ -53,7 +53,7 @@ struct Algorithm
|
||||||
eval(empty_pop, _pop);
|
eval(empty_pop, _pop);
|
||||||
}
|
}
|
||||||
peoPopEval < Indi > & eval;
|
peoPopEval < Indi > & eval;
|
||||||
};
|
};
|
||||||
|
|
||||||
int main (int __argc, char *__argv[])
|
int main (int __argc, char *__argv[])
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ double f (const Indi & _indi)
|
||||||
return (-sum);
|
return (-sum);
|
||||||
}
|
}
|
||||||
struct Algorithm
|
struct Algorithm
|
||||||
{
|
{
|
||||||
Algorithm( eoEvalFunc < Indi > & _eval, eoSelect < Indi > & _select, peoTransform < Indi > & _transform):
|
Algorithm( eoEvalFunc < Indi > & _eval, eoSelect < Indi > & _select, peoTransform < Indi > & _transform):
|
||||||
loopEval(_eval),
|
loopEval(_eval),
|
||||||
eval(loopEval),
|
eval(loopEval),
|
||||||
|
|
@ -66,7 +66,7 @@ struct Algorithm
|
||||||
eoPopEvalFunc < Indi > & eval;
|
eoPopEvalFunc < Indi > & eval;
|
||||||
eoSelectTransform < Indi > selectTransform;
|
eoSelectTransform < Indi > selectTransform;
|
||||||
eoBreed < Indi > & breed;
|
eoBreed < Indi > & breed;
|
||||||
};
|
};
|
||||||
|
|
||||||
int main (int __argc, char *__argv[])
|
int main (int __argc, char *__argv[])
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ void EdgeXover :: build_map (const Route & __par1, const Route & __par2)
|
||||||
}
|
}
|
||||||
|
|
||||||
void EdgeXover :: remove_entry (unsigned __vertex, std :: vector <std :: set <unsigned> > & __map)
|
void EdgeXover :: remove_entry (unsigned __vertex, std :: vector <std :: set <unsigned> > & __map)
|
||||||
{
|
{
|
||||||
|
|
||||||
std :: set <unsigned> & neigh = __map [__vertex] ;
|
std :: set <unsigned> & neigh = __map [__vertex] ;
|
||||||
|
|
||||||
|
|
@ -72,7 +72,7 @@ void EdgeXover :: remove_entry (unsigned __vertex, std :: vector <std :: set <un
|
||||||
it ++)
|
it ++)
|
||||||
__map [* it].erase (__vertex) ;
|
__map [* it].erase (__vertex) ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EdgeXover :: add_vertex (unsigned __vertex, Route & __child)
|
void EdgeXover :: add_vertex (unsigned __vertex, Route & __child)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue