Commit 7fe05bf9 authored by Frédéric Krüger's avatar Frédéric Krüger
Browse files

Mise a jour des exemples

parent 4a2ad6ec
...@@ -640,7 +640,7 @@ ...@@ -640,7 +640,7 @@
Reduce parents operator: Tournament 4 Reduce parents operator: Tournament 4
Surviving parents: 50% Surviving parents: 50%
Reduce offspring operator: Tournament 2 Reduce offspring operator: Tournament 2
Surviving offspring: 96% Surviving offspring: 50%
Final reduce operator: Tournament 2 Final reduce operator: Tournament 2
Elitism: Weak Elitism: Weak
......
...@@ -176,6 +176,7 @@ CPPFLAGS+= ...@@ -176,6 +176,7 @@ CPPFLAGS+=
Remote island model: false Remote island model: false
IP file: ip.txt //File containing all the remote island's IP IP file: ip.txt //File containing all the remote island's IP
Server port:2929
Migration probability : 1.0 Migration probability : 1.0
Save population: false Save population: false
......
...@@ -73,9 +73,6 @@ float gauss() ...@@ -73,9 +73,6 @@ float gauss()
\end \end
\After everything else function: \After everything else function:
ofstream SaveFile("save.csv", ios::app);
SaveFile << bBest->fitness << ";" << endl;
SaveFile.close();
\end \end
\At the beginning of each generation function: \At the beginning of each generation function:
...@@ -172,6 +169,7 @@ CPPFLAGS+= ...@@ -172,6 +169,7 @@ CPPFLAGS+=
Remote island model: false Remote island model: false
IP file: ip.txt //File containing all the remote island's IP IP file: ip.txt //File containing all the remote island's IP
Server port: 2929
Migration probability : 0.8 Migration probability : 0.8
Save population: false Save population: false
......
/*_________________________________________________________
/*_________________________________________________________
This is a standard GP implementation on EASEA, This is a standard GP implementation on EASEA,
aimed for regression. aimed for regression.
...@@ -10,7 +12,7 @@ ...@@ -10,7 +12,7 @@
__________________________________________________________*/ __________________________________________________________*/
\User declarations : \User declarations :
#define PI (3.141592653589793)
\end \end
\User functions: \User functions:
...@@ -27,17 +29,17 @@ __________________________________________________________*/ ...@@ -27,17 +29,17 @@ __________________________________________________________*/
int generateData(float*** inputs, float** outputs){ int generateData(float*** inputs, float** outputs){
int i=0; int i=0;
(*inputs) = new float*[gNO_FITNESS_CASES]; (*inputs) = new float*[NO_FITNESS_CASES];
(*outputs) = new float[gNO_FITNESS_CASES]; (*outputs) = new float[NO_FITNESS_CASES];
for( i=0 ; i<gNO_FITNESS_CASES ; i++ ){ for( i=0 ; i<NO_FITNESS_CASES ; i++ ){
(*inputs)[i]=new float[VAR_LEN]; (*inputs)[i]=new float[VAR_LEN];
float x = random(-10.,+10.); float x = random(-10.,+10.);
(*inputs)[i][0] = x; (*inputs)[i][0] = x;
(*outputs)[i] = POLY(x); (*outputs)[i] = POLY(x);
} }
return gNO_FITNESS_CASES; return NO_FITNESS_CASES;
} }
...@@ -60,7 +62,6 @@ void free_data(){ ...@@ -60,7 +62,6 @@ void free_data(){
\After everything else function: \After everything else function:
{ {
toDotFile( ((IndividualImpl*)EA->population->Best)->root, "best", 0); toDotFile( ((IndividualImpl*)EA->population->Best)->root, "best", 0);
toString(((IndividualImpl*)EA->population->Best)->root);
free_data(); free_data();
} }
\end \end
...@@ -89,9 +90,7 @@ GenomeClass { ...@@ -89,9 +90,7 @@ GenomeClass {
} }
\end \end
\GenomeClass::display:{ \GenomeClass::display:
cout << *this << endl;
}
\end \end
\GenomeClass::initialiser : \GenomeClass::initialiser :
...@@ -137,11 +136,12 @@ ERROR = powf(expected_value-EVOLVED_VALUE,2); ...@@ -137,11 +136,12 @@ ERROR = powf(expected_value-EVOLVED_VALUE,2);
\end \end
\GenomeClass::evaluator accumulator : \GenomeClass::evaluator accumulator :
return sqrtf(ERROR/gNO_FITNESS_CASES); return sqrtf(ERROR/NO_FITNESS_CASES);
\end \end
\User Makefile options: \User Makefile options:
CXXFLAGS+=#-I/usr/local/cuda/common/inc/ -I/usr/local/cuda/include/
CXXFLAGS+=-I/usr/local/cuda/common/inc/ -I/usr/local/cuda/include/
LDFLAGS+= LDFLAGS+=
\end \end
...@@ -177,5 +177,5 @@ LDFLAGS+= ...@@ -177,5 +177,5 @@ LDFLAGS+=
nb of GPUs : 1 nb of GPUs : 1
size of prog buffer : 20000000 size of prog buffer : 20000000
nb of fitness cases : 4096 nb of fitness cases : 128
\end \end
...@@ -69,10 +69,6 @@ float gauss() ...@@ -69,10 +69,6 @@ float gauss()
\After everything else function: \After everything else function:
//cout << "After everything else function called" << endl; //cout << "After everything else function called" << endl;
cout << "Best individual " << bBest->fitness << endl;
ofstream SaveFile("save.csv", ios::app);
SaveFile << bBest->fitness << ";" << endl;
SaveFile.close();
\end \end
\At the beginning of each generation function: \At the beginning of each generation function:
...@@ -169,6 +165,7 @@ CPPFLAGS+= ...@@ -169,6 +165,7 @@ CPPFLAGS+=
Remote island model: false Remote island model: false
IP file: ip.txt //File containing all the remote island's IP IP file: ip.txt //File containing all the remote island's IP
Server port:2929
Migration probability : 1.0 Migration probability : 1.0
Save population: false Save population: false
......
127.0.0.1:2929
127.0.0.1:2930
...@@ -48,7 +48,7 @@ __device__ __host__ inline float Weierstrass(float x[SIZE], int n) // Weierstra ...@@ -48,7 +48,7 @@ __device__ __host__ inline float Weierstrass(float x[SIZE], int n) // Weierstra
float res = 0.; float res = 0.;
float val[SIZE]; float val[SIZE];
float b=2.; float b=2.;
float h = 0.25; float h = 0.35;
for (int i = 0;i<n; i++) { for (int i = 0;i<n; i++) {
val[i] = 0.; val[i] = 0.;
...@@ -164,14 +164,13 @@ return NbMut; ...@@ -164,14 +164,13 @@ return NbMut;
\end \end
\User Makefile options: \User Makefile options:
CPPFLAGS+=
\end \end
\Default run parameters : // Please let the parameters appear in this order \Default run parameters : // Please let the parameters appear in this order
Number of generations : 100 // NB_GEN Number of generations : 100 // NB_GEN
Time limit: 0 // In seconds, 0 to deactivate Time limit: 0 // In seconds, 0 to deactivate
Population size : 100 //POP_SIZE Population size : 2048 //POP_SIZE
Offspring size : 100 // 40% Offspring size : 2048 // 40%
Mutation probability : 1 // MUT_PROB Mutation probability : 1 // MUT_PROB
Crossover probability : 1 // XOVER_PROB Crossover probability : 1 // XOVER_PROB
Evaluator goal : minimise // Maximise Evaluator goal : minimise // Maximise
...@@ -186,15 +185,16 @@ CPPFLAGS+= ...@@ -186,15 +185,16 @@ CPPFLAGS+=
Elite: 1 Elite: 1
Print stats: true //Default: 1 Print stats: true //Default: 1
Generate csv stats file:false Generate csv stats file:false
Generate gnuplot script:true Generate gnuplot script:false
Generate R script:true Generate R script:false
Plot stats:false //Default: 0 Plot stats:true //Default: 0
Remote island model: true Remote island model: true
IP file: ip.txt //File containing all the remote island's IP IP file: ip.txt //File containing all the remote island's IP
Migration probability: 0.1 Server port : 2929
Migration probability: 0.33
Save population: true Save population: false
Start from file:false Start from file:false
\end \end
/*_________________________________________________________
Test functions
log normal adaptive mutation
Selection operator: Tournament
__________________________________________________________*/
\User declarations :
#define SIZE 100
#define X_MIN -1.
#define X_MAX 1.
#define ITER 120
#define Abs(x) ((x) < 0 ? -(x) : (x))
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)<(y)?(x):(y))
#define SIGMA 1. /* mutation parameter */
#define PI 3.141592654
float pMutPerGene=0.1;
struct gpuOptions;
\end
\User functions:
//fitness function
#include <math.h>
__device__ __host__ inline static float SQR(float d)
{
return (d*d);
}
__device__ __host__ inline float rosenbrock( float const *x)
{
float qualitaet;
int i;
int DIM = SIZE;
qualitaet = 0.0;
for( i = DIM-2; i >= 0; --i)
qualitaet += 100.*SQR(SQR(x[i])-x[i+1]) + SQR(1.-x[i]);
return ( qualitaet);
} /* f_rosenbrock() */
__device__ __host__ inline float Weierstrass(float *x, int n) // Weierstrass multimidmensionnel h = 0.25
{
float res = 0.;
float val[SIZE];
float b=2.;
float h = 0.25;
for (int i = 0;i<n; i++) {
val[i] = 0.;
for (int k=0;k<ITER;k++)
val[i] += pow(b,-(float)k*h) * sin(pow(b,(float)k)*x[i]);
res += Abs(val[i]);
}
return (res);
}
float gauss()
/* Generates a normally distributed random value with variance 1 and 0 mean.
Algorithm based on "gasdev" from Numerical recipes' pg. 203. */
{
int iset = 0;
float gset = 0.0;
float v1 = 0.0, v2 = 0.0, r = 0.0;
float factor = 0.0;
if (iset) {
iset = 0;
return gset;
}
else {
do {
v1 = (float)random(0.,1.) * 2.0 - 1.0;
v2 = (float)random(0.,1.) * 2.0 - 1.0;
r = v1 * v1 + v2 * v2;
}
while (r > 1.0);
factor = sqrt (-2.0 * log (r) / r);
gset = v1 * factor;
iset = 1;
return (v2 * factor);
}
}
\end
\GenomeClass::display:
/*for(int i=0; i<SIZE; i++){
cout << Genome.x[i] << ":" << Genome.sigma[i] << "|";
}*/
\end
\Before everything else function:
\end
\After everything else function:
\end
\At the beginning of each generation function:
//cout << "At the beginning of each generation function called" << endl;
\end
\At the end of each generation function:
//cout << "At the end of each generation function called" << endl;
\end
\At each generation before reduce function:
//cout << "At each generation before replacement function called" << endl;
\end
\User classes :
GenomeClass {
float x[SIZE];
float sigma[SIZE]; // auto-adaptative mutation parameter
}
\end
\GenomeClass::initialiser : // "initializer" is also accepted
for(int i=0; i<SIZE; i++ ) {
Genome.x[i] = (float)random(X_MIN,X_MAX);
Genome.sigma[i]=(float)random(0.,0.5);
}
\end
\GenomeClass::crossover :
for (int i=0; i<SIZE; i++)
{
float alpha = (float)random(0.,1.); // barycentric crossover
child.x[i] = alpha*parent1.x[i] + (1.-alpha)*parent2.x[i];
}
\end
\GenomeClass::mutator : // Must return the number of mutations
int NbMut=0;
float pond = 1./sqrt((float)SIZE);
for (int i=0; i<SIZE; i++)
if (tossCoin(pMutPerGene)){
NbMut++;
Genome.sigma[i] = Genome.sigma[i] * exp(SIGMA*pond*(float)gauss());
Genome.sigma[i] = MIN(0.5,Genome.sigma[0]);
Genome.sigma[i] = MAX(0.,Genome.sigma[0]);
Genome.x[i] += Genome.sigma[i]*(float)gauss();
Genome.x[i] = MIN(X_MAX,Genome.x[i]); // pour eviter les depassements
Genome.x[i] = MAX(X_MIN,Genome.x[i]);
}
return NbMut;
\end
\GenomeClass::evaluator : // Returns the score
float Score= 0.0;
Score= Weierstrass(Genome.x, SIZE);
//Score= rosenbrock(Genome.x);
return Score;
\end
\User Makefile options:
CPPFLAGS+=
\end
\Default run parameters : // Please let the parameters appear in this order
Number of generations : 100 // NB_GEN
Time limit: 0 // In seconds, 0 to deactivate
Population size : 3840 //POP_SIZE
Offspring size : 3840 // 40%
Mutation probability : 1 // MUT_PROB
Crossover probability : 1 // XOVER_PROB
Evaluator goal : minimise // Maximise
Selection operator: Tournament 2.0
Surviving parents: 3840//percentage or absolute
Surviving offspring: 3840
Reduce parents operator: Tournament 2.0
Reduce offspring operator: Tournament 2
Final reduce operator: Tournament 2
Elitism: Strong //Weak or Strong
Elite: 5
Print stats:true //Default: 1
Plot stats:false //Default: 0
Generate csv stats file:false
Generate gnuplot script:false
Generate R script:false
\end
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment