Como funciona a IA que aprende a jogar Flappy Bird
++ Neste projeto, mostramos como uma inteligência artificial aprende a jogar Flappy Bird usando redes neurais e algoritmos evolutivos (NEAT). + Ao longo de várias gerações, os pássaros virtuais aprendem a pular na hora certa e evitam obstáculos, evoluindo até se tornarem praticamente imortais. +
+Estrutura geral do sistema
+O sistema é composto por duas partes principais:
+-
+
-
+ O jogo Flappy Bird:
+ reproduzido em Python usando a biblioteca
pygame. + O jogo controla o movimento do pássaro, canos e pontuação. +-
+
- O pássaro pode subir ou cair a cada frame. +
- O jogo registra pontuação, colisões e distância percorrida. +
+ -
+ A IA que joga automaticamente:
+ cada pássaro é uma rede neural que decide quando pular.
+
-
+
- Cada geração possui dezenas ou centenas de pássaros. +
- Inicialmente, eles pulam de forma aleatória. +
- Ao longo do tempo, os melhores aprendem a jogar melhor. +
+
O objetivo final da IA é aprender a voar o mais longe possível sem bater em nenhum obstáculo.
+Inputs da Rede Neural
+Para tomar decisões, a rede neural precisa "enxergar" o ambiente. Os inputs principais são:
+-
+
- Altura do pássaro — posição vertical na tela. +
- Distância até o topo do próximo cano — para saber se precisa subir. +
- Distância até a base do próximo cano — para saber se precisa descer ou não pular. +
+ Pense nos inputs como sensores do pássaro: eles fornecem informações que permitem calcular a melhor ação a cada momento. +
+Estrutura da Rede Neural
+A rede neural é organizada em camadas:
+-
+
- Camada de entrada: recebe os 3 inputs do jogo. +
- Camada oculta: opcional, ajuda a rede a aprender padrões complexos (como calcular quando passar entre dois canos próximos). +
- Camada de saída: retorna 1 (pular) ou 0 (não pular). +
Como a decisão é tomada:
+Cada input é multiplicado por um peso, somado a um bias e passado por uma função de ativação. Exemplo simplificado:
+
+ {`input_y = 30
+input_cano_sup = 4
+input_cano_inf = -7
+pesos = [0.5, 2, 1.3]
+bias = -5
+
+soma = 30*0.5 + 4*2 + (-7*1.3) + (-5) = 8.9
+output = tanh(soma) ≈ 0.999
+
+Se output > 0.5 → PULA
+Se output ≤ 0.5 → NÃO PULA`}
+
+ Ou seja, a rede neural transforma informações do ambiente em uma decisão clara: pular ou não.
+Algoritmo Evolutivo (NEAT)
++ Para que a IA aprenda a jogar, usamos o NEAT (NeuroEvolution of Augmenting Topologies), + que é uma forma de algoritmo genético especializado em redes neurais. + Ele segue os mesmos princípios de evolução biológica: +
+ +-
+
- População: dezenas ou centenas de redes neurais (pássaros) são criadas com pesos e bias aleatórios. +
- Fitness: cada pássaro é avaliado pelo desempenho no jogo (distância percorrida, canos ultrapassados). +
- Seleção: os melhores pássaros passam seus genes (pesos e bias) para a próxima geração. +
- Crossover: mistura de genes de dois pássaros para gerar descendentes. +
- Mutação: pequenas alterações aleatórias em pesos, bias ou estrutura da rede. +
+ O diferencial do NEAT é que ele não apenas ajusta os pesos da rede, mas também evolui a topologia da rede: +
+-
+
- Adiciona novos neurônios (nós) ou novas conexões entre neurônios. +
- Mantém um histórico de inovações para que boas estruturas não se percam durante o crossover. +
- Permite que a rede evolua em complexidade, aprendendo estratégias mais sofisticadas ao longo de várias gerações. +
+ Analogia simples: + - Algoritmo Genético clássico: você muda apenas os atributos de um pássaro (cor, tamanho das asas). + - NEAT: você pode mudar atributos e adicionar novas asas ou alterar o corpo do pássaro. Ou seja, a estrutura também evolui. +
+ +Fluxo resumido do NEAT
+-
+
- Criar população inicial com redes neurais aleatórias. +
- Cada rede joga e calcula seu fitness. +
- Selecionar os melhores indivíduos. +
- Aplicar crossover e mutação, incluindo possibilidade de adicionar nós/conexões. +
- Repetir por várias gerações até surgir um pássaro muito eficiente. +
Paralelo entre Rede Neural e Algoritmo Genético
+Podemos pensar na rede neural como um organismo, e no algoritmo genético como a evolução:
+| Conceito | +Rede Neural | +Algoritmo Genético | +
|---|---|---|
| Cromossomo | +Conjunto de pesos e bias da rede | +Pesos e bias de cada pássaro | +
| Gene | +Peso ou bias individual | +Peso ou bias individual | +
| Mutação | +Alteração leve nos pesos/bias | +Mudança aleatória em um gene | +
| Fitness | +Pontuação no jogo | +Pontuação no jogo | +
Baixar o projeto
+ + Baixar projeto (Flappy-Bird-AI.zip) + +Como executar localmente
+-
+
-
+ Pré-requisitos: Python 3.8+
+
+ {`python -m venv venv +source venv/bin/activate # macOS/Linux +venv\\Scripts\\activate # Windows`} ++
+ -
+ Instalar dependências:
+
pip install pygame neat-python
+
+ -
+ Estrutura mínima do projeto:
+
+ {`/assets +main.py +configs.txt`} ++
+ - Executar:
python main.py
+
Dicas e experimentos
+-
+
- Aumente
pop_sizepara maior diversidade e evolução mais rápida.
+ - Experimente diferentes funções de ativação (
sigmoid,relu).
+ - Modifique recompensas da função fitness para alterar o comportamento dos pássaros. +
- Salve o melhor genoma com
picklee reutilize para testes futuros.
+