Projeto super-smartio-world

Informações Sumarizadas

Explicação Geral do Projeto

A partir do uso da biblioteca externa NEAT-Python, buscou-se fazer uso do algoritmo conhecido por NEAT (NeuroEvolution of Augmenting Topologies) para criar o um agente inteligente capaz de jogar a fase YoshiIsland2 do jogo Super Mario World. Esse algoritmo parte do conceito conhecido por Neuroevolução, buscando evoluir redes neurais artificiais utilizando algoritmos genéticos até encontramos a topologia desejada (i.e., em nosso caso é aquela que capacita um agente a terminar a fase YoshiIsland2).

Para este projeto foi necessário criar um arquivo de configuração (exigido pela biblioteca NEAT-Python), responsável por indicar os argumentos utilizados pelo algoritmo. Ressalta-se que alguns parâmetros receberam valores default (encontrados na documentação da biblioteca) enquanto outros como a quantidade de neurônios nas camadas de entrada, saída e ocultas ("num_inputs", "num_outputs" e "num_hidden" respectivamente), função de ativação ("activation_default"), tamanho da população ("pop_size"), quantidades de indivíduos preservados por geração ("elitism"), porcentagem de individuos que irão se reproduzir ("survival_threshold") e etc., foram modificados por tentativa e erro e baseando-se em literaturas (contidas nas referências dentro do README do projeto).

Por fim, destaca-se que esse projeto foi dividido em 4 módulos:

  • train.py: Treina um grupo de agentes para jogar a fase YoshiIsland2, salvando sempre o melhor para que possa ser usado posteriormente.
  • play.py: Faze com que um individuo ou um grupo de agentes jogue a fase selecionada que, por padrão, é a YoshiIsland2.
  • plot_evolution.py: Valida de forma gráfica a evolução, gerando um gráfico de fitness máximo por geração e o salvando em um arquivo de foto.
  • generate_video.py: Cria um vídeo MP4 do melhor agente jogando a fase selecionada que, por padrão, é a YoshiIsland2.

Informações detalhadas sobre cada módulo bem como instruções de execução, podem ser encontradas no README do projeto:

https://github.com/azzolinovarella/super-smartio-world/blob/master/README.md