Seja o criador de todas as coisas

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.


Fig.  1


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.


Fig. 2


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.


Fig. 3


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).


Fig.  4


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.


Fig. 5


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.


Fig. 6


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.

Source: https://habr.com/ru/post/pt409979/


All Articles