Eu experimentei o GA na minha juventude. Eu escrevi um simulador em Python que funcionou da seguinte maneira.
Os genes codificaram os pesos de uma rede neural.
As entradas da rede neural eram "antenas" que detectavam toques. Valores mais altos significavam muito próximos e 0 significava não tocar.
As saídas foram para duas "rodas". Se as duas rodas avançavam, o cara avançava. Se as rodas estivessem em direções opostas, o sujeito girava. A força da saída determinou a velocidade do giro da roda.
Um labirinto simples foi gerado. Era realmente simples - até estúpido. Houve o início na parte inferior da tela e um gol no topo, com quatro paredes no meio. Cada parede tinha um espaço retirado aleatoriamente, então sempre havia um caminho.
Comecei caras aleatórios (pensei neles como bugs) no início. Assim que um cara alcançou a meta, ou um limite de tempo foi atingido, a aptidão foi calculada. Era inversamente proporcional à distância da meta naquele momento.
Eu então os emparelhei e os "criei" para criar a próxima geração. A probabilidade de ser escolhido para ser criado foi proporcional à sua adequação. Às vezes, isso significava que alguém era criado repetidamente se possuía uma aptidão relativa muito alta.
Eu pensei que eles desenvolveriam um comportamento de "abraço na parede esquerda", mas eles sempre pareciam seguir algo menos ideal. Em todos os experimentos, os bugs convergiam para um padrão espiral. Eles espiralariam para fora até tocarem uma parede à direita. Eles seguiriam isso e, quando chegassem à brecha, iriam espiralar para baixo (longe da brecha) e dar a volta. Eles faziam uma curva de 270 graus para a esquerda e geralmente entravam na brecha. Isso os levaria através da maioria dos muros, e freqüentemente até o objetivo.
Uma característica que eu adicionei foi colocar um vetor de cor nos genes para rastrear a relação entre indivíduos. Depois de algumas gerações, todos teriam a mesma cor, o que me diz que eu deveria ter uma melhor estratégia de criação.
Eu tentei fazê-los desenvolver uma estratégia melhor. Eu compliquei a rede neural - adicionando uma memória e tudo. Isso não ajudou. Eu sempre vi a mesma estratégia.
Tentei várias coisas, como ter conjuntos de genes separados que só se recombinaram após 100 gerações. Mas nada os levaria a uma estratégia melhor. Talvez fosse impossível.
Outra coisa interessante é representar graficamente a aptidão ao longo do tempo. Havia padrões definidos, como o máximo de condicionamento físico antes de subir. Eu nunca vi um livro de evolução falar sobre essa possibilidade.