One interesting (I think) thing I didn’t mention in my previous blog entry was determining how to create a new generation of creatures from the previous generation.
My first approach was simply to take the creature that performed best, and use it as the basis for the entire next generation, each of which contained random variations.
This approach was somewhat effective, although it tended to get stuck with a far from perfect solution, but where most small variation on that solution was worse (such as outputting 0.5 regardless of the input). This is known as getting stuck in a “local minima”.
So I tried a different approach where we start out with completely random creatures for the first generation, as before, but instead of just taking the best and losing everything else, we take neighbours and “merge” them, where the better one forms 90% of the children’s make-up, and the worse one the remaining 10%.
This had the effect of being much more resilliant against local minima as it gave more scope for the GA to try different options and where it found a good one, that may not be the best one, it kept it around for the next generation.