Você está na página 1de 3

Recriando uma versão do Flappy Bird com IA

Moises Souza

I. I NTRODUÇ ÃO II. BASES TE ÓRICAS

Esta seção apresentará os fundamentos teóricos utilizados


Amente humana é uma máquina altamente poderosa e neste trabalho, Neat-Python, Pygame, Python.
complexa que pode processar uma grande quantidade de
informações em um tempo mı́nimo. As unidades principais
A. Visão geral do NEAT
do cérebro são os neurônios e é por meio deles que as
informações são transmitidas e processadas. As tarefas NEAT é um método desenvolvido por Kenneth O. Stan-
realizadas pelo cérebro intrigam os pesquisadores, como ley para a evolução de redes neurais arbitrárias. NEAT-
por exemplo, a capacidade do cérebro de reconhecer um Python é uma implementação Python pura do NEAT, sem
rosto familiar dentre uma multidão em apenas milésimos dependências além da biblioteca padrão do Python. Que
de segundo. As respostas sobre alguns enigmas do começa a evolução com uma população de redes muito
funcionamento do cérebro ainda não foram respondidas e simples e complexifica as redes ao longo de gerações,
se perpetuam ate os dias de hoje. cérebro é que o mesmo adicionando novos neurônios e conexões. [3].
desenvolve suas regras através da experiência adquirida em
situações vividas anteriormente[1] O que é conhecido sobre B. Pygame
o funcionamento do cérebro é que o mesmo desenvolve
suas regras através da experiência adquirida em situações Pygame é um conjunto de plataforma cruzada de módulos
vividas anteriormente[1]. A corrida pelo desenvolvimento Python que é usado para criar videogames. Consiste em
de um programa que realize funções da mente humana computação gráfica e bibliotecas de som projetadas para
começou junto com o inı́cio da computação eletrônica. serem usadas com a linguagem de programação Python.
Desde então, muitas pesquisas foram realizadas para Pygame foi oficialmente escrito por Pete Shinners para
chegar a este objetivo, em geral dentro da grande área de substituir PySDL. Pygame é adequado para criar aplicativos
Inteligência Artificial. Um avanço recente foi a substancial do lado do cliente que podem ser potencialmente agrupados
redução do custo de equipamentos utilizados para processar em um executável autônomo. O seu nome tem origem da
redes neurais, facilitando a execução de algoritmos de junção de Py, proveniente de Python e Game, que significa
aprendizado em computadores pessoais e dando novo Jogo, ou seja, Jogos em Python. Gênero(s): Motor de jogo
impulso ao desenvolvimento de novos algoritmos. Um deles Idioma(s): inglês Licença: LGPL Versão estável: 2.0.1 (24
é o NEAT, que tem como objetivo criar uma rede neural de dezembro de 2009) Linguagens de programação: Python,
artificial que evolui através de mudança em sua delineação C, Cython, Linguagem assembly[4]
e alteração de pesos das suas conexões, seguindo a
abordagem de algoritmos genéticos. Este trabalho tem como C. Python
objetivo deste trabalho está utilizar o metodo NEAT para
Python é uma linguagem de programação interpretada,
evolução de redes neurais arbitrárias, tendo como cenário
orientada a objetos e de alto nı́vel com semântica dinâmica.
o jogo Flappy Bird, criar jogos simples, projetar um jogo
Suas estruturas de dados embutidas de alto nı́vel, combinadas
que utilize inteligência artificial, e Desenvolver um jogo
com tipagem dinâmica e vinculação dinâmica, tornam-no
com inteligência artificial concluindo as competencias
muito atraente para o Desenvolvimento Rápido de Aplica-
do Projeto de Bloco: Computação e Inteligência
tivos, bem como para uso como linguagem de script ou
Artificial Os objetivos especı́ficos deste trabalho são:
cola para conectar componentes existentes. A sintaxe simples
• Estudar os principais conceitos de
e fácil de aprender do Python enfatiza a legibilidade e,
evolução de redes neurais arbitrárias;
portanto, reduz o custo de manutenção do programa. Python
• Mapear soluções de software pré-existentes
oferece suporte a módulos e pacotes, o que incentiva a
para a montagem do sistema de aprendizado;
modularidade do programa e a reutilização de código. O
• Aplicar o algoritmo NEAT para o
interpretador Python e a extensa biblioteca padrão estão
jogo Flappy Bird dentro de um sistema;
disponı́veis em formato de código-fonte ou binário gra-
• Avaliar os resultados obtidos [2].
tuitamente para todas as principais plataformas e podem
ser distribuı́dos gratuitamente.. Foi lançada por Guido van
*Meus agradecimentos Rossum em 1991 Criado Por: Guido van Rossum Empresa
1 A Deus. moises.souza@al.infnet.edu.br matriz: Python Software Foundation[5].
D. Teste de Referencia Neat-Python IV. S IMULAÇ ÃO E R ESULTADOS
População inicial, primeiros indviduos gerado

Fig. 1. Primeira geração.

Neste ponto já foi selecionado os melhores individuos, no


geral nada pode ser falar sobre convergência vendo que ela
depende de alguns de fatores.
****** Running generation 0 ****** Population’s aver- Primeiro ponto, pode existir mı́nimos locais e isto depende
age fitness: 5.75200 : 8.34714 Best fitness: 77.40000 - size: da função de custo e do modelo.
(1, 3) - species 1 - id 78 Average adjusted fitness: 0.046 Mean Em segundo plano, o método de otimização usado pode
genetic distance 1.053, standard deviation 0.424 Population não garantir a convergência quando estiver muito longe do
of 100 members in 1 species: ID age size fitness adj fit mı́nimo local.
stag ==== === ==== ======= ======= ==== 1 0 100 Em terceiro plano, para uma quantidade de dados ou
77.4 0.046 0 Total extinctions: 0 Generation time: 16.387 parâmetros muito grande, alguns métodos se tornam im-
sec ****** Running generation 1 ****** [3]. praticáveis. No geral, foi descoberto que garantias teóricas
sobre a convergência são guias, pouco confiáveis para
aplicação prática.

III. M ETODOLOGIA

Fig. 2. Segunda Geração.


Esta seção apresenta a abordagem proposta para combinar
os métodos de controle para melhorar seu desempenho e o ****** Running generation 0 ******
banco de testes utilizado para sua validação. Population’s average fitness: 5.75200 stdev: 8.34714
Best fitness: 77.40000 - size: (1, 3) - species 1 - id 78
Average adjusted fitness: 0.046
Mean genetic distance 1.053, standard deviation 0.424
Population of 100 members in 1 species:
ID age size fitness adj fit stag
==== === ==== ======= ======= ====
A. Evolução da IA com Neat-Python 1 0 100 77.4 0.046 0
Total extinctions: 0
Generation time: 16.387 sec
***** Running generation 1 ******
V. O BSERVAÇ ÕES F INAIS
Neste Trabalho foi realizada a análise do método de
aprendizado NEAT aplicado a um jogo eletrônico antigo
para um jogo de PC , utilizando técnicas de programação
evolutiva que une a técnica de rede neural com algoritmo
genético escritas em Python. A utilização do método NEAT
apresentou-se satisfatória para treinamento de uma rede
neural, demonstrando resultados muitos bons para pouco
tempo de treinamento e considerando que o jogo Flappy
Fig. 3. Na segunda geração já obtive o máximo global.

Bird é um jogo onde é necessário movimentação constante e


se desviar dos obstáculos para conseguir sobreviver Durante
as realizações das simulações foi possı́vel perceber que
a evolução ocorria de forma gradual, começando com os
pássaros fazendo nada e se destruindo ao colidir com os
canos diversas vezes para os primeiras gerações. Também
foi possı́vel perceber que o personagem evoluiu em pouco
tempo com duas gerações, desta forma podendo saltar da
forma correta sem colidir com os canos. Um dos desafios
foi o entendimento do pacote NET-Python, pois dependia de
Compreender as explicações e exemplos que constam na sua
documentação. entretanto disso, o aprendizado dos Birds e
a colisão com os pipes, foram bastante trabalhosas, pois não
havia nenhum conhecimento prévio sobre Pygame dado pelo
docente do bloco atual.
R EFERENCES
[1] S. Sarti and G. Ochoa, “A neat visualisation of neuroevolution trajec-
tories.” in EvoApplications, 2021, pp. 714–728.
[2] N. do author, “Titulo escrever.” organizacao, 2014, pp. 387–395.
[Online]. Available: Nomedolivro
[3] K. O. Stanley and R. Miikkulainen. Efficient evolution of
neural network topologies. [Online]. Available: http://nn.cs.utexas.
edu/downloads/papers/stanley.cec02.pdf
[4] P. Community. Visão geral do neat. [Online]. Available: https:
//pt.wikipedia.org/wiki/Pygame
[5] ——. Visão geral do neat. [Online]. Available: https://pt.wikipedia.org/
wiki/Python

Você também pode gostar