The GA doesn't work

agna@brawijaya.ac.id agna at brawijaya.ac.id
Sat Mar 29 19:50:20 EST 2003


Dear Sir/Madam, 

I am new user for GAlib.
I've tried using GA1DArrayGenome<float> to create
genome for real number representation since GARealNumber genome
so hard-coded. I don't know what's wrong with myprogram since the GA do 
nothing.  Could you help me ? I attached the source.
Here is the snippet of my program (not all details listed): 

 //Create Target
 int target[len];
 for(i=0;i<len;i++) target[i] = i+1; 

 // Create genome object
 GA1DArrayGenome<int> genome(len,Objective,(void *)target); 

 genome.initializer(IntArrayInitializer);
 genome.mutator(GA1DArrayGenome<int>::SwapMutator);
 genome.crossover(GA1DArrayGenome<int>::OnePointCrossover); 

 GASteadyStateGA ga(genome);
 ga.parameters(params);

 ga.initialize();
 while(!ga.done()) ga.step();
 ga.flushScores();

Best Regards
A Naba 

 
-------------- next part --------------
#include <stdio.h>
#include <iostream.h>
#include <fstream.h>
#include <math.h>
#include <ga/ga.h>

float Objective(GAGenome & c);
void IntArrayInitializer(GAGenome & c);

int main(int argc, char *argv[]){

  int i,len;
  len=6;
  //Create Target
  int target[len]; 
  for(i=0;i<len;i++)
    target[i] = i+1;
 
  // Create genome object  
  GA1DArrayGenome<int> genome(len,Objective,(void *)target);
  
  // to ensure that the target the right one
  cout<< "Check Target : \n";  
  int * initialData = (int *) genome.userData(); 
  for(i=0;i<genome.length();i++)
    cout << initialData[i] << " ";
  cout << endl;
  
  genome.initializer(IntArrayInitializer);  
  genome.mutator(GA1DArrayGenome<int>::SwapMutator);  
  genome.crossover(GA1DArrayGenome<int>::OnePointCrossover);
  
  GAParameterList params;
  GASteadyStateGA::registerDefaultParameters(params);
  params.set(gaNpopulationSize, 100);    // number of individuals in population
  params.set(gaNpCrossover, 0.8);       // likelihood of doing crossover
  params.set(gaNpMutation, 0.01);	// probability of mutation
  params.set(gaNnGenerations, 100);	// number of generations
  params.set(gaNscoreFrequency, 5);	// how often to record scores
  params.set(gaNflushFrequency, 5);    // HOW often to flush scores to file
  params.set(gaNscoreFilename, "bog.dat");
  params.parse(argc, argv, gaFalse);
  
  GASteadyStateGA ga(genome);
  
  ga.parameters(params);
  
  GARankSelector selector;
  ga.selector(selector);
    
  ga.initialize();  // If the genome has its own initializer, do this
  genome =  ga.statistics().bestIndividual(); 
  // Initial Genome after initialized
  cout << "Initial Genome : \n";
  for(i=0;i<genome.length();i++)
    cout << genome[i] << " ";
  cout << endl;


  while(!ga.done()) ga.step();
 
  //ga.evolve();
  ga.flushScores();
 
  genome =  ga.statistics().bestIndividual();
  
  cout << "Best Genome : " << endl;
  for(i=0;i<genome.length();i++)
    cout << genome[i] << " ";
  cout << endl;

  return 0;
}
   
float Objective(GAGenome & c){
  GA1DArrayGenome<int> & genome = (GA1DArrayGenome<int> &) c;
  int * pattern = (int *)c.userData();

  float value = 0.0;
  for(int i=0;i<genome.length();i++)
    value += 1.0/(1.0 + fabs(genome[i]-pattern[i]));

  return(value);
}

void IntArrayInitializer(GAGenome & c){
   GA1DArrayGenome<int> & genome = (GA1DArrayGenome<int> &) c;
   
   for(int i=0;i<genome.length();i++)
     genome[i] = 1;
}
   
   



More information about the galib mailing list