Back on topic: I tried to evolve some AI to play the number guessing game once. You know; guess a number between 0 and 30, then I say higher or lower until you get the number (or until I guess sick of you getting it wrong).
My program would put some numbers into an array, with the first number being an upper bound, and the next number saying 'higher or lower'.
My little AIs had a whole lot of commands at their disposal like 'read from memory[#number]' and 'multiply by #number' and 'subtract #number' and 'goto command #number' 'guess #number'. They got about 10 guesses,
There were thousands of these little guys, generated randomly, which then mutated and reproduced randomly with the help of a score that was given to them based on how well they played the game.
The end result was never very good. They would very quickly evolve into a program something like this:
static int guess = 0;
Which scored pretty well, but obviously isn't very smart. They only ever then evolved into variations on that. Like starting at the maximum and counting downwards, or counting up by 4 instead of 3. The range in each game (the upper bound of the correct number) was random, but if I changed the range that upper bound could take, the AIs would evolve to a more suitable counting index, but that's it.
It is easy to get the that simple AI, and that simple AI is pretty good, but the problem is that the next better solution is so completely different from what they already had that they never find it. As soon as they break away from their incrementing guesses, then they don't score as well and start dieing off before they reach the next best solution.
In programming, evolution is pretty hard. I mean, slipping a goto into the middle of a piece of code is only a small mutation, but it can completely change what the program does.
Also, with such a 'binary' game, it's hard to make a continuem of goodness which the AIs can evolve along. I mean, it's very hard for the AIs to actually work out what they are meant to do! They think they have found a good result, but they don't know what the goal is.
It's been a few years since I did all that, I've got some new ideas on evolutionary programming now. One day I'll try them out, and I hope I can get something a bit smarter!
(note, I've never actually done any research on evolutionary programming; so I really don't have a clue as to what is a good way to do it, I'm just making it up as I go along).