[galib] population.touch(), and best-of-generation statistics.

James McDermott jamesmichaelmcdermott at gmail.com
Fri Feb 24 09:45:55 EST 2006


Hi list,
I have a GALib program where the objective function uses userData.Sometimes, between generations, I need to be able to change somevalues in userData, and of course after doing that I need to touch()the population (so that individuals are re-evaluated, using the newuserData, next time):
  GAPopulation pop = ga.population();  ga.initialize();
  for (int i = 0; i < n; i++) {      ga.step();      if (some_condition) {          update_user_data();          pop.touch();      }      cout << "best individual: " << objective_function(pop.best()) << endl;  }

Now this works ok - it runs and the fitnesses reported are correct.But for some reason the values saved by the statistics object arewrong - they seem as if the population was never re-evaluated.
Has anyone seen anything like this? I've tried things likestats.update(pop) and pop.evaluate(gaTrue), but neither helps.
Side question: why can't I write:
ga.population.touch();
instead of:
GAPopulation pop = ga.population(); pop.touch();
Could this be connected to the problem?
James



More information about the galib mailing list