Este documento descreve o uso do algoritmo NEAT para evoluir redes neurais artificiais capazes de jogar Flappy Bird de forma autônoma. A metodologia envolve a aplicação do NEAT-Python para evoluir as redes neurais que controlam o jogo, avaliando os resultados ao longo das gerações. O objetivo é desenvolver uma inteligência artificial capaz de jogar o game sem intervenção humana.
Este documento descreve o uso do algoritmo NEAT para evoluir redes neurais artificiais capazes de jogar Flappy Bird de forma autônoma. A metodologia envolve a aplicação do NEAT-Python para evoluir as redes neurais que controlam o jogo, avaliando os resultados ao longo das gerações. O objetivo é desenvolver uma inteligência artificial capaz de jogar o game sem intervenção humana.
Este documento descreve o uso do algoritmo NEAT para evoluir redes neurais artificiais capazes de jogar Flappy Bird de forma autônoma. A metodologia envolve a aplicação do NEAT-Python para evoluir as redes neurais que controlam o jogo, avaliando os resultados ao longo das gerações. O objetivo é desenvolver uma inteligência artificial capaz de jogar o game sem intervenção humana.
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