Print

Print


On Oct 26, 2009, at 12:56 PM, Adam Spalek wrote:

> Is there an ECJ implementation available to remove individuals based  
> on
> their similarity from the population to increase/maintain diversity?

ECJ doesn't have it by default, no.  Because we don't know what kind  
of individuals you're using beforehand.

> (1) Using Exchanger with custom SelectionMethod ?
> (2) Using BreedingPipeline with custom SelectionMethod ?

The big issue here is the O(n^2) computational complexity involved in  
comparing everyone to everyone and then ranking them based on who's  
"most similar" to whom and by how much.

You could do it in two ways I imagine:

1. If a generated individual is "to similar" to some existing  
individual in the population, dump him and create a new one.  Here  
you'd make a custom BreedingPipeline at the very top of your pipeline  
chain (that is, the opposite end from the selection methods), which  
asks for individuals until it gets one which match your desired  
quality.    You'd have to determine the notion of "quality".

2. Or you could override your Evaluator to first test individuals for  
similarity and for each unacceptably similar group, make all but one  
member of that group have a Very Bad Fitness.

I'd do #1.

Sean