[galib] Problem with GAAlleleArray
Ulises Estrada
ulises.estrada at gmail.com
Sat Feb 19 01:10:20 EST 2005
Hi, I'm trying to run a little program using AlleleArrays but there is
something that is not working, from what I understood if I put and
AlleleArray in a genome, the only values that it can take are those
given in the AlleleArray.
So, if I have the following GAAlleleSet:
Allele1 containing {1, 2, 3}
Allele2 {10, 11, 12};
Allele3 {20, 21, 22};
and I do:
GAAlleleSetArray<int> AlelleArray;
AlelleArray.add(Allele1);
AlleleArray.add(Allele2);
AlleleArray.add(Allele3),
the genome's genes will take {1, 2, 3, 10, 11, 12, 13, 20, 21, 22}
values, but when
I run the program it takes only {1, 2, 3} values or the first
AlleleSet given to the AlelleArray.
I show my code next, It seems ok to me, I hope someone would help me.
//------------------------------------------------------------------------------------------------------------------
float Objective2(GAGenome& g){
GA2DArrayAlleleGenome<int> & genome = (GA2DArrayAlleleGenome<int> &)g;
int suma = 0;
for(int i=0; i<genome.width(); i++){
for(int j=0; j<genome.height(); j++){
suma += genome.gene(i,j);
}
}
return suma;
}
int main(int argc, char **argv) {
int width = 10;
int height = 5;
int popsize = 90;
int ngen = 400;
float pmut = 0.001;
float pcross = 0.9;
GAAlleleSet<int> allele1;
for(int i=10; i<=13; i++)
allele1.add(i);
GAAlleleSet<int> allele2;
for(int i=20; i<=23; i++)
allele2.add(i);
GAAlleleSet<int> allele3;
for(int i=0; i<=3; i++)
allele3.add(i);
GAAlleleSet<int> allele4;
for(int i=30; i<=33; i++)
allele4.add(i);
GAAlleleSetArray<int> arreglo;
arreglo.add(allele1);
arreglo.add(allele2);
arreglo.add(allele3);
arreglo.add(allele4);
GA2DArrayAlleleGenome<int> genome2(width, height, arreglo, Objective2);
genome2.initializer(GA2DArrayAlleleGenome<int>::UniformInitializer);
GASteadyStateGA ga(genome2);
ga.pReplacement(0.4);
ga.populationSize(popsize);
ga.nGenerations(ngen);
ga.pMutation(pmut);
ga.pCrossover(pcross);
ga.initialize();
while(!ga.done()){
if(ga.generation()%50 == 0){
cout<< "In generation # " <<
ga.generation() << "\n";
cout<< "Best evaluated: " <<
ga.population().max() << "\n";
cout<< "The genome:" << "\n";
cout<< ga.population().best() << "\n";
}
ga.step();
}
cout << "The GA found:\n" << ga.statistics().bestIndividual() << "\n";
getch();
return 0;
}
//-------------------------------------------------------------------------------------------------------------------
More information about the galib
mailing list