RE: [neat] Re: Updated experiment status page
- In one e-mail, Ken wrote:
>Hey John, this is a really cool experiment and setup.Thanks! :)
>I wonder, can you also give the # of generations since last improvement?I've added code that will track when an improvement is made. I'll have to
>That would be interesting.
manually reduce the current (bogus) maximum in order to make use of it,
though. The current maximum was before I fixed a bug in the fitness
evaluator that was converting errors to integers when it wasn't supposed to.
>Also, a fitness over generations graph would be great though it would takeI've added code to track the fitness from generation to generation so I can
generate the graph. And I've downloaded a perl module for generating the
graph itself. Once I have enough data to actually graph something, I'll
And in another e-mail, Ken wrote:
>Can you explain a little about the graph...Sure. Each gray vertical bar is one fitness value. Height represents
relative fitness. The shortest bar (1 pixel) represents the worst fitness
of any network in the population, and the top (200) represents the best
fitness in the population. The networks are grouped by topology, in the
order in which they were created (older topologies first). The wider,
darker bar represents the average for all the members of the topology
Note how the graph is mostly flat near the top except for a few scattered
exceptions? That is an indicator that something isn't quite right...most of
the networks have nearly the same fitness, but a few are WILDLY bad. Those
exceptions artificially increase the dynamic range of the graph, hiding the
real dynamic range of the results. My guess as to where those bad networks
come from is the min/max weight values used when creating all-new weights,
as opposed to minor tweaks. It would create a new weight between min and
max. But min/max might be way off from what is actually appropriate,
because once min/max goes up, it never goes back down. So I changed that...
I re-calculate the min/max weight values with each generation based on
actual min/max connection weights. And I only look at the connections of
those networks that scored better than average for their topology.
And that's the other thing I added: Before, there was a chance that a
really unfit network might breed. No longer. I now only include networks
that are higher than the average for consideration for breeding.
The hope is that between those two changes, the dynamic range might actually
scale back a bit so we can actually see the variance between the specimens.
If not, then I'll probably choose a different graph layout.
>I think it would be great to have aI figured I'd do a combination of the two. Typical non-peak fitnesses in
>graph of generational average fitnesses, or better max fitnesses.
one color, new max values in another color that makes them stand out, so you
can see whenever it makes a forward motion. But at this point, it's not
making much progress. It's still in the 'not much better than random'
stage. It'll take some time for the random fluctuations in fitness to keep
from making it look like it is improving, so that current topologies die