Experimento para Desktop

Este experimento carrega WebAssembly e processa redes neurais em tempo real. Para uma experiência completa, recomendamos acessar de um computador.

Veja uma população de redes neurais aprender a jogar o Dino através de evolução. Neste experimento, dezenas de dinossauros controlados por IAs jogam simultaneamente. Os melhores sobrevivem, se reproduzem e sofrem mutações.
Exp #001

Dino IA

O Dinossauro do Google com Inteligência Artificial

Python NEAT Redes Neurais Alg. Evolutivos PyGame WebAssembly

O que você pode testar

  • Treinar uma população NEAT
  • Observar gerações evoluindo
  • Jogar no modo humano
  • Ativar/desativar o modo Bazuca
IMPORTANTE: Versão Web (NEAT) DQN e PPO fazem parte do projeto Desktop e não estão disponíveis nesta build Web.

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.

População
Joga
Fitness
Seleção
Mutação
Nova Geração

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
Modo Bazuca

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

Correr
Pular
Abaixar
Atirar

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.

Python PyGame Pygbag WebAssembly Browser

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".
Ver código no GitHub Assistir ao Vídeo