Experimento para Desktop
Este experimento carrega WebAssembly e processa redes neurais em tempo real. Para uma experiência completa, recomendamos acessar de um computador.
Dino IA
O Dinossauro do Google com Inteligência Artificial
O que você pode testar
- Treinar uma população NEAT
- Observar gerações evoluindo
- Jogar no modo humano
- Ativar/desativar o modo Bazuca
O que está acontecendo?
Como funciona o NEAT?
NEAT (NeuroEvolution of Augmenting Topologies) não utiliza gradiente descendente como modelos tradicionais. Em vez disso, ele cria um algoritmo genético que evolui a própria estrutura da rede neural, começando de forma muito simples e adicionando nós e conexões conforme necessário.
O que a IA enxerga?
A IA não vê o jogo como uma imagem. Ela recebe números que representam o estado do ambiente (um vetor numérico).
Entradas Originais
- • Posição vertical do dinossauro
- • Velocidade do jogo
- • Distância do obstáculo mais próximo
- • Tipo e largura do obstáculo
- • Distância e tipo do segundo obstáculo
- • Se o dino está pulando
+ Entradas Extras
- • Munição disponível
- • Se a bazuca está sacada
Como ela decide?
Os números entram na rede neural, passam pelas camadas ocultas onde são multiplicados por pesos, e saem no final indicando qual ação o dinossauro deve tomar naquele exato milissegundo.
Como sabemos quem foi melhor?
A métrica de Fitness
O "Fitness" é o termômetro de sucesso do algoritmo genético. No nosso caso, é a pontuação de sobrevivência de cada dinossauro — quanto mais ele sobrevive e corre, maior o seu fitness. IAs com alto fitness têm maior probabilidade de serem selecionadas como "pais" para transmitir seus genes (pesos e bias da rede) para a próxima geração, garantindo a evolução contínua da espécie.
E quando o jogo ficou fácil...
MODO BAZUCA
Criamos um problema novo para testar a IA: um Cacto Gigante impossível de pular. A única forma de sobreviver é usando uma arma.
Estratégia Complexa
A IA precisa aprender a economizar munição, decidir o momento exato de atirar e que gastar tiros em obstáculos normais é um erro fatal.
Novas Dimensões
Isso adiciona 2 novas entradas à rede neural (munição e estado da arma) e 1 nova saída (atirar), expandindo imensamente a topologia da rede evolutiva.
A verdadeira corrida armamentista...
MODO VELOCIDADE INFINITA
Diferente do jogo original que possui um limite máximo, ativando este modo o dinossauro continua acelerando para sempre.
Reflexos Sobre-Humanos
Em velocidades extremas, o tempo de reação necessário é de milissegundos. A IA é levada ao limite absoluto de processamento para tomar decisões precisas a tempo.
O Caos Inevitável
Sem limite de velocidade, eventualmente o tempo de reação será menor do que a própria taxa de quadros (FPS) do jogo, tornando a sobrevivência fisicamente impossível.
Personalidades Emergentes
Observamos que as IAs desenvolvem padrões comportamentais distintos. Essas personalidades não foram programadas manualmente, elas são rótulos que aplicamos depois, apenas observando o comportamento que evoluiu naturalmente.
Exterminador
Usa a bazuca de forma extremamente eficaz contra gigantes.
Gatilho Fácil
Atira compulsivamente desperdiçando munição.
Furtivo
Prefere passar o máximo de tempo abaixado, quase rastejando.
Calculista
Pula sempre na mesma distância exata e precisa.
Medroso
Pula muito cedo, bem antes do obstáculo.
Kamikaze
Pula no exato último milissegundo, passando raspando da morte.
O Aprendiz
Ainda está descobrindo como jogar e cometendo erros básicos.
Memory Card
O treinamento não precisa morrer quando você fecha o navegador.
Implementamos um sistema de Memory Card NEAT que serializa toda a população evolutiva em um arquivo JSON. Você pode salvar a evolução, recarregar depois e continuar o treinamento preservando toda a diversidade genética (as "espécies" e suas mutações) intacta.
Como Python está rodando no navegador?
Jogos feitos em Python e PyGame normalmente requerem a instalação da linguagem no seu PC. Para tornar este experimento acessível, compilamos o projeto para WebAssembly.
DQN e PPO no Desktop
O NEAT é o foco desta versão Web, mas o projeto completo do LabTech em Python vai muito além. No código fonte (Desktop), implementamos também algoritmos de Deep Q-Network (DQN) e Proximal Policy Optimization (PPO) usando PyTorch.
Diferente do NEAT, que evolui topologias via algoritmos genéticos, o DQN e o PPO são abordagens puras de Aprendizado por Reforço (Reinforcement Learning), calculando recompensas e atualizando tensores via backpropagation. Devido ao alto peso de processamento matricial e dependência de bibliotecas como o PyTorch, esses modelos rodam estritamente no ambiente Desktop e serão o tema central dos próximos experimentos.
Resultados e Aprendizados
- Pular é fácil, abaixar é o desafio. A IA pode aprender a pular cactos rapidamente, mas abaixar para passar sob os pássaros é muito mais complexo. Como a mutação genética é imprevisível, a variação é enorme: algumas populações podem dominar o movimento na geração 10, enquanto outras podem demorar mais de 100 gerações.
- Especiação protege inovação. Espécies geneticamente separadas mantêm soluções inovadoras vivas. Dinossauros que preferem se abaixar para desviar dos pássaros, por exemplo, inicialmente possuem fitness baixo e seriam extintos sem a proteção da especiação.
- Velocidade ilimitada é caótica. Quando o jogo não tem limite de velocidade e continua acelerando, eventualmente o tempo de reação necessário é tão curto que nenhuma IA sobrevive, gerando uma "corrida armamentista".