On Oct 26, 2009, at 12:56 PM, Adam Spalek wrote:
> Is there an ECJ implementation available to remove individuals based
> 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.