Simulação de vida de partículas
- Um programa simples que simula vida artificial primitiva usando regras simples de atração e repulsão entre partículas, como átomos.
- Excluindo os elementos de GUI, o código tem menos de uma página.
- É possível conferir abaixo o tutorial em vídeo e as instruções.
Saiba mais (tutorial em vídeo no YouTube)
- Link para o tutorial em vídeo no YouTube.
Demo online (versão em JavaScript)
- Links para demos ao vivo em 2D e 3D.
Interface (versão em C++)
Exemplo de resultado
Alguns padrões interessantes que podem ser reproduzidos
- Não é necessário fazer os parâmetros coincidirem exatamente para reproduzir esses padrões.
- A melhor forma de obter padrões interessantes é primeiro tentar explorar parâmetros aleatórios.
- Ao encontrar um padrão interessante, tente fazer ajustes finos gradualmente.
- De vez em quando, é possível dar grandes saltos nos parâmetros para não ficar preso em máximos locais.
Como usar
- Baixe este repositório, extraia-o, vá até a pasta /particle_life/bin/ e então clique em particle_life.exe.
Código
- O código-fonte é fornecido em C++, JavaScript e Python.
- Link para o tutorial em vídeo no YouTube.
- Se você quiser contribuir com o programa em C++, o algoritmo principal está nas primeiras 100 linhas de "/particle_life/src/ofApp.cpp".
- O restante são componentes de GUI e controles de renderização fornecidos pela biblioteca openFrameworks.
- Para começar, baixe este repositório e a biblioteca openFrameworks, e use o projectGenerator do openFrameworks para importar a pasta /particle_life/ para o projeto.
- Ou crie um novo projeto openFrameworks, adicione ofxGui e depois substitua os arquivos de projeto gerados pela pasta /src/ fornecida aqui.
- Agora é possível compilar o código C++.
Outras portas
- É fornecida uma lista de versões portadas para várias linguagens, como Godot, Rust, Go-1, Go-2, Go-3, Python, Lua, QB64-PE, WebGL, Java, C# Winforms, FreeBasic e outras.
Exemplo de código JavaScript
- É possível conferir um exemplo de código JavaScript e a versão otimizada no arquivo particle_life.html.
Tópicos relacionados
- Explicações sobre simulação de vida de partículas, sopa primordial - evolução, Jogo da Vida de Conway, autômatos celulares, padrões auto-organizados e outros temas.
- Este projeto foi inspirado em Clusters, de Jeffery Ventrella, e por não implementar detecção de colisão, conseguiu simular milhares de partículas em tempo real.
- Ao adicionar controles de GUI para permitir ajuste fino e exploração de parâmetros em tempo real com facilidade, surgem padrões nunca antes vistos a partir de um modelo de relações extremamente simples.
- Este código começou como material educacional e é voltado para não programadores e para o público em geral, para demonstrar que a complexidade pode surgir da simplicidade.
Lista de tarefas
- Adicionar uma função para salvar e carregar parâmetros (para que as pessoas possam compartilhar modelos interessantes com facilidade)
- Função para adicionar mais tipos de partículas (atualmente está fixo em quatro tipos de partículas)
- O maior gargalo atualmente é o loop
for aninhado que calcula as distâncias par a par entre todas as partículas, com complexidade computacional quadrática.
- Como alternativa ao item 3, o cálculo das distâncias par a par é paralelizável o suficiente para ser executado na GPU.
- Adicionar uma função para redimensionar o tamanho da tela e melhorar a verificação de limites (partículas com muitos movimentos rápidos podem sair dos limites da tela).
- Adicionar uma UI mais intuitiva que permita controle mais detalhado dos parâmetros.
- Adicionar um botão aleatório ou, melhor ainda, introduzir uma meta-regra simples que altere continuamente as regras iniciais, para que os padrões não fiquem presos em máximos locais e continuem mudando.
- Uma abordagem melhor seria usar um algoritmo evolutivo para selecionar e otimizar parâmetros, mas para isso seria necessário escrever uma função de aptidão. No momento, não se sabe qual seria a função de aptidão no domínio deste programa.
Opinião do GN⁺
- Este projeto tem grande valor ao mostrar visualmente como fenômenos complexos de vida podem emergir de regras simples.
- Pode ser um material introdutório interessante para engenheiros de software iniciantes com interesse em programação e pesquisa em vida artificial.
- Como há versões portadas para várias linguagens, isso pode ajudar a ampliar a compreensão sobre diferentes linguagens de programação.
1 comentários
Comentários do Hacker News