1. Introdução
Desde muito tempo atrás, quando não havia nada melhor do que o ZX-Spectrum, lembrei-me de um brinquedo no qual era necessário definir um programa para o robô para que ele pudesse derrotar o inimigo em navegação autônoma. E no meu tempo livre de trabalho e descanso, comecei a trabalhar em um programa que, com a ajuda das configurações lidas em um arquivo de texto no formato XML, permite:
- crie um mundo plano, limitado em tamanho pelos recursos do computador. Em vez de uma parede de gelo ao longo da borda, ela aparece da borda oposta; para objetos dentro do mundo, parece contínua.
- adicione um número ilimitado de fontes estacionárias de energia geotérmica
- observe a luz do sol na forma de um ponto que imita o movimento da luminária com as mudanças do dia e do ano.
- descrever minerais com graus variados de "volatilidade", isto é, suscetibilidade a movimentos arbitrários na superfície devido à difusão
- descrever as reações químicas entre substâncias que organismos vivos podem realizar sob a influência de energia
- e, é claro, observe os organismos "vivos".
A principal diferença em relação aos jogos existentes - no modelo, não há final predefinido pelo script.
Mundo modelo
O mundo é mostrado na figura - um ponto grande é a luz solar (se movendo ao longo do tempo), dois pontos menores são fontes de outro tipo de energia chamado geotérmica. A superfície iluminada é predominantemente azul porque contém água em todos os pontos. Pontos de uma cor diferente surgem e desaparecem se, devido à difusão, a concentração relativa do elemento correspondente se tornar temporariamente acima da média.

Para economizar consumo de memória, as quantidades de matéria em cada ponto são armazenadas no tipo float, o que fornece 7 bits significativos. Para o modelo, foram definidas 100 mil unidades em cada ponto da água, 20 mil dióxido de carbono, 10 unidades de hidrogênio (ou seja, dez mil vezes menos que a água) e zero oxigênio e metano. Um exemplo de como é a descrição das substâncias introduzidas no modelo:
<Element name="CarbonDioxide" color="yellow" volatility="0.12" visibility="true"> <rect left="0" top="0" right="max" bottom="max" amount="20000"/> </Element> <Element name="Oxygen" color="green" volatility="0.12" visibility="false"> <rect left="0" top="0" right="max" bottom="max" amount="0"/> </Element> ...
A seguir, foi descrita a reação da formação de metano e água a partir de dióxido de carbono e hidrogênio na presença de energia geotérmica.
<Reaction name="CO2+4H2=CH4+2H2O" geothermalEnergy="0.00001" solarEnergy="0"> <LeftReagent name="CarbonDioxide" amount="1"/> <LeftReagent name="Hydrogen" amount="4"/> <RightReagent name="Methane" amount="1"/> <RightReagent name="Water" amount="2"/> </Reaction>
O primeiro protoorganismo LUCA com essa reação foi plantado dentro de uma das fontes geotérmicas.
<section name="Organisms"> <item name="LUCA" author="DEMI" x="300" y="30" reaction="CO2+4H2=CH4+2H2O"/> </section>
Além disso, um filtro foi incluído no programa para mostrar pontos contendo metano e uma mancha de metano começou a se espalhar pelo corpo. A primeira célula pode receber substâncias apenas a partir do ponto em que está localizada, e a transferência de substâncias é realizada devido à difusão. Se você reduzir a quantidade de substâncias disponíveis, a taxa de propagação dos produtos da reação diminui acentuadamente.

O programa implementa o modo de aproximação, quando o ponto aumenta para um quadrado, que exibe uma lista de substâncias e organismos vivos nele contidos. Se o filtro de vários elementos estiver ativado, a cor do elemento com a maior concentração relativa nesse ponto será usada para colorir o ponto; caso contrário, apenas a água que seria mais visível seria sempre visível.

Selecção
Os materiais de partida são abundantes, mas mais cedo ou mais tarde estarão todos esgotados. Se uma célula "digere com êxito" os alimentos, acumula "gordura" (energia interna) e pode se multiplicar por divisão e sofrer mutações durante a divisão. Ou morrer exausto. Seu comportamento também é herdado e sujeito a mutações, durante as quais uma parte insignificante dos parâmetros do autômato celular muda. Em seguida, mutações controladas serão introduzidas no modelo, quando o usuário indicará apenas para que tipo de mutação ele gostaria de receber. A mutação esperada ocorrerá com alguma probabilidade e as novas espécies devem ser capazes de sobreviver para sofrer mais mutações.
Portanto, temos um tipo de proto-organismo-metanogênio, que precisa de energia geotérmica. Ele se instala na zona de energia geotérmica, e aquelas espécies individuais que a difusão tira dela - perecem. Organismos mortos continuam a ocupar seu lugar por um tempo e, se ninguém os comer, eles desaparecem. O consumo de minerais para o crescimento de organismos não é realizado, respectivamente, quando eles se deterioram, eles simplesmente desaparecem. Após o início da simulação, os organismos se multiplicam rapidamente, ocupando toda a área ao redor da fonte geotérmica. Depois de algum tempo, as células mortas aparecem além da ação da energia geotérmica. É interessante notar que, às vezes, você percebe que os organismos no centro morrem - aqueles que não tinham minerais suficientes comeram tudo nas abordagens. A figura mostra organismos vivos em branco e marrom morto, o azul mostra água, o círculo rosa mostra a área onde a energia geotérmica é sentida (sua intensidade diminui com a distância do centro).

Várias fontes de energia geotérmica são descritas no mundo, o primeiro protoorganismo foi plantado em uma delas. Quando a simulação durou o suficiente (várias horas), fiquei surpreso ao descobrir que a fonte vizinha também estava preenchida - algum corpo teve a sorte de consegui-la viva.
Não importa o tamanho do mundo, se apenas uma reação ocorrer, todo o dióxido de carbono (ou hidrogênio) será consumido mais cedo ou mais tarde, após o que todos os organismos morrerão de fome, deixando para trás vastas reservas de metano.
A imagem inclui uma exibição de um organismo vivo e metano (um ponto violeta que cresceu em torno de uma fonte geotérmica) com uma luz de fundo do Sol (os primeiros raios começam a atingir o ponto de metano no início da manhã, o sol está à direita e o preto é exibido porque apenas metano e vida são exibidos organismos) e depois de ligar a iluminação total.

Dada uma distribuição muito pobre de recursos minerais, a população está à beira da sobrevivência - não mais do que algumas dezenas de indivíduos. A figura mostra uma opção quando inicialmente havia apenas duas reações em cada ponto do hidrogênio.

O arquivo Snapshoot2017.rar contém um arquivo executável compilado para Windows e arquivos de suporte para ele. Nenhuma instalação é necessária, ele não deixa nenhum vestígio de seu trabalho - para iniciá-lo, basta descompactá-lo e excluí-lo. Para alterar as configurações padrão - o arquivo ThemeAero / template.demi pode ser aberto em um editor de texto simples. Os controles são descritos na seção apropriada do wiki do projeto.
Planos adicionais
A seleção de organismos com base em seus atos de sorte e variabilidade. Agora precisamos avançar para a evolução, enquanto manual. Adicione uma mutação ao arquivo de configuração - um organismo com uma reação reversa que não requer energia externa, mas é muito menos eficaz. Agora, quando um protoorganismo é dividido, uma espécie filha surge ocasionalmente, que não está mais ligada a uma fonte de energia geotérmica, mas que precisa de um produto da atividade vital de primeiro tipo. O resultado deve ser um equilíbrio entre as duas espécies.
Em seguida, temos energia solar inexplorada. Somente um organismo pode estar localizado em um ponto do espaço, o que os faz competir não apenas pela energia e pela matéria, mas também pelo espaço.
Conclusão
No momento, a principal dificuldade é escolher uma proporção dos objetos existentes no modelo para que ele permaneça estável e interessante. Essa é a proporção dos volumes de substâncias minerais, energias, velocidades, reações metabólicas e, em seguida, as tarefas do campo da "natureza viva" - como garantir a codificação dos autômatos celulares. Mais precisamente, precisamos apenas de dados sobre o mundo circundante de forma adaptada. O "DNA" deve ser compacto, capaz de mutações atômicas não destrutivas, descrever tanto a estrutura do corpo (um conjunto de células - sistema nervoso, receptor, músculo, armadura, etc.) quanto o algoritmo de sua ação.
Em um futuro distante, o modelo poderá ser distribuído - cada usuário tem seu próprio jardim, onde cria seus próprios organismos, espalhando-se pelo distrito e para onde o gado de seus vizinhos fica. A inclinação pode ser medida como a prevalência de uma espécie.
Para mim, este projeto é entretenimento e não pretendo obter nenhum benefício. E o objetivo do artigo é procurar pessoas interessadas nesta área, que possam compartilhar suas melhores práticas e idéias.
No programa, o modelo é tecnicamente calculado em um encadeamento separado, sua velocidade pode ser estimada pela rapidez com que o tempo do modelo passa e, portanto, não depende de qual escala e com que detalhes a imagem é desenhada na tela. Há também um fluxo separado que renderiza uma imagem do mundo do modelo. Sua velocidade é maior, menos pontos do modelo são exibidos - por exemplo, quando um pequeno número de pontos é colocado na tela com alta ampliação, o fps é maior do que quando o mundo inteiro está no monitor amplo a uma distância máxima na tela. A velocidade de exibição, limitada a 60 qps, é exibida no canto superior esquerdo, não faz mais sentido.
PS: O modelo é de código aberto sob a GNU GPL Versão 3, 29 de junho de 2007 e está disponível para download para qualquer pessoa que queira experimentar ou criar garfos. Montado com a biblioteca ClanLib de plataforma cruzada no MS VS2015. O arquivo binário para o sistema operacional Windows está no arquivo morto - ele não é instalado, mas simplesmente é iniciado após a descompactação. Presumo que a compilação para outras plataformas não cause problemas. O Template.xml pode ser editado em um editor de texto adequado; alguma documentação está no github na seção wiki.