[galib] GA doesn't evaluate all mutated individuals

Liekens, A.M.L. A.M.L.Liekens at tue.nl
Mon Nov 29 11:30:28 EST 2004


in your original e-mail you said you are using co-evolution in your experiments, and that the fitness of weak individuals was too high, correct? Maybe I'm just guessing here, but since GAlib only re-evaluates genomes that have recently changed (mutated, crossed, whatever), and doesn't take changes of the fitness function into account (i.e. your fitness function changes as the other population also evolves), then it's also possible that the individuals remain their fitnesses of some generations ago as they didn't mutate, but the fitness function changes over time. Did you check that this may have been a cause of the errors you've been finding?


-----Original Message-----
From:	galib-bounces at mit.edu on behalf of christian hresko
Sent:	Mon 11/29/04 07:59
To:	galib at mit.edu
Subject:	Re: [galib] GA doesn't evaluate all mutated individuals
hmmm.  maybe there's a bug elsewhere in your code.  i just wrote my own 
mutation operator and it works perfectly.  i converge upon an optimal 
score and all the mean, min and max scores look correct.  i'm also 
using a GASteayStateGA.  are you sure something's not up with your 
objective function or your selection scheme?


On Nov 28, 2004, at 3:57 PM, Daniel Marbach wrote:

>> You might be interested in the following thread on the same subject:
>> http://mailman.mit.edu/pipermail/galib/1999-May/000145.html
> Thanks, but the thread mentioned above discusses always evaluating all 
> the
> individuals - it is clear to me how to do that with evaluate(gaTrue) 
> (I studied
> the documentation...)
> I don't want to evaluate all the individuals, but only those that 
> mutated, i.e.
> those where the mutator returned a value greater than 0. When the 
> mutator
> returns 0, that means that nMut=0, i.e. the genome was not mutated. If 
> no
> crossover was used and no mutation occured, the individual should 
> obviously not
> be re-evaluated (waste of time), so evaulate(gaTrue) is not good in my 
> case.
> As I mentioned, I actually solved my problem by adding the following 
> lines to
> the mutation function of my genome:
>>> if (nMut > 0)
>>>   _evaluated = gaFalse;
> I was just wondering why the galib GA doesn't take care of this (or 
> what I did
> wrong so that it didn't re-evaluate mutated genomes...)
> Greetings,
>   Daniel
>> Daniel Marbach wrote:
>>> Hi,
>>> I'm using galib to co-evoleve configuration and control of modular 
>>> robots.
>> At
>>> the beginning I was very happy with galib, but by now I must say 
>>> that I
>> spent
>>> more time studying the library and customizing stuff than it would 
>>> have
>> taken to
>>> implement the GA from scratch. But that's just because I 
>>> customize/extend
>> almost
>>> everything (Genome, selection, replacement, scaling, mutation...), I
>> believe
>>> galib can be highly beneficial for users with more 'standard' 
>>> genomes.
>>> I had a problem that cost me a lot of time - I don't know if it is a 
>>> bug in
>>> galib or if I
>>> did something wrong:
>>> For a long time, the performance of my GA (a GASteadyStateGA) was 
>>> not very
>> good
>>> and weird things happened (e.g. weak individuals had a high 
>>> fitness). By
>>> coincidence I discovered, that the GA was not always evaluating all 
>>> the
>>> individuals that mutated. Adding the following lines to my mutation
>> function
>>> solved the
>>> problem:
>>> if (nMut > 0)
>>>   _evaluated = gaFalse;
>>> Shouldn't galib do that for me? Or what did I do wrong that I had to 
>>> add
>> these
>>> lines?
>>> Thanks for your help,
>>>   Daniel
>>> PS: My genome class extends GATreeGenome<GARealGenome>.
> _______________________________________________
> galib mailing list
> galib at mit.edu
> http://mailman.mit.edu/mailman/listinfo/galib

galib mailing list
galib at mit.edu

More information about the galib mailing list