Inspirado com esse programa, resolvi criar uma versão minha desse, com algumas modificações, que ao meu ver deixam a coisa um pouco mais interessante.
Na minha versão cada célula tem um código genético como a versão original, uma array, que serve de memória, inicialmente preenchida por zeros, um valor que determina a posição atual da memória (memoria[valor]), outro valor que determina a energia que essa célula tem e outro valor que determina o tempo restante de vida dessa célula (valor que é igual para todas as células). Há 9 tipos de "opcodes genéticos", que são executados a cada turno do programa. Tais comandos são: adiciona ou subtrai 1 do index da memória; adiciona ou subtrai 1 do valor da memória em que o index aponta; abre ou fecha um loop while; verifica se a célula em frente é compatível (a compatibilidade é verificada pegando 4 index randômicos e verifica-se se o valor do código genético nesses endereços são iguais entre as 2 células), se for compatível o valor no endereço atual da memória é igual a 1, se não for compatível ou for um espaço vazio o endereço da memória é 0; o endereço da memória é igual a rotação (0 - de frente para direita, 1 - para cima, 2 - para esquerda e 3 - para baixo); e por ultimo um comando que lê o valor que está no endereço atual da memória. Dependendo o valor que estiver nesse endereço a célula toma alguma ação, consumindo energia.
Se o for valor no endereço atual da memória for:
- A célula gira no sentido horário.
- A célula gira no sentido anti-horário.
- A célula move um pixel para a direção que está virada.
- A célula move um pixel para a direção contrária a que está virada.
- A célula cria uma cópia quase(mutação) idêntica de si mesma à sua frente e dá 1/5 de sua energia para ela.
- A célula pega metade da energia da célula à sua frente.
- A célula tenta dividir sua energia com a célula à frente, é somada a energia dessas 2 células e é dividia entre as duas (média aritmética).
A cada turno é verificado o tempo de vida e a quantidade de energia de cada célula, se em um momento a célula tiver idade maior que um valor predeterminado ou sua energia for menor ou igual a zero, essa célula será deletada. Energia é adicionada ao sistema criando novas células com código genético randômico a cada turno.
![]() |
20 minutos de simulação, e já é possível ver uma colônia com um padrão bem evidente. |
Imagens:
![]() |
2 espécies evidentes ainda se expandindo. |
Código fonte no github (Sobre GPLv3 - Mateus Zitelli).