I'm working on a regression problem. The goal is to have GP evolve a
comparator function for ordering lists.
But the problem is that I changed the way I score the fitness. Originally I
would give a score of 0.0 if the correct result was first in the list. Now
I changed so that the score is the natural log of how far from the first
position that the correct result is in the hopes that a more continuous
fitness score would improve evolution.
The head-scratching problem I have is that with the new fitness score I
always get a evolution that halts after one generation:
Initializing Generation 0
Subpop 0 best fitness of generation: Fitness: Standardized=0.0 Adjusted=1.0
Hits=0
Found Ideal Individual
Subpop 0 best fitness of run: Fitness: Standardized=0.0 Adjusted=1.0 Hits=0
I always had multiple generations previously. And I've debugged the code to
make sure that setStandardizedScore is being passed a value greater than
zero. So why does it say that the standardized score is 0 when I know I'm
passing it non-zero values?
I've attached the entire class for reference. But the gist is that:
sum += 1.0f;
changed to :
sum += (float) Math.log(position + 1);
Courtney Falk