Algoritmo neuroevolucionário aprende a jogar Mario
O SethBling é conhecido por seu canal no qual publica várias dicas e invenções para o mundo Minecraft. Muitas vezes, aparece outro conteúdo. Por exemplo, Mario está na lista de interesses do vlogger. Foi SethBling quem primeiro passou por Super Mario World no console usando um bug com a memória de edição movendo itens no jogo. Seus últimos vídeos e transmissões ainda têm o mesmo jogo. Mas não é uma pessoa que toca, mas um algoritmo neuroevolucionário, que o próprio SethBling escreveu.A implementação é chamada MarI / O. Uma representação gráfica da rede neural é feita na parte superior da tela. À esquerda, é mostrado como o algoritmo vê o nível - ele entende o ambiente e a posição do jogador. Quadrados brancos são blocos nos quais o jogador pode ficar, pretos são objetos em movimento. À direita estão os botões nos quais uma rede neural pode clicar. As conexões dos neurônios estão localizadas no meio, apenas uma parte delas é usada a qualquer momento.A estrutura é complexa, mas o SethBling não criou uma rede neural. Isso foi feito com a implementação do algoritmo neuroevolutivo. O programa tentou realizar ações, depois a eficácia foi avaliada pela distância percorrida. O treinamento levou um dia. A geração zero foi muito estúpida, alguns indivíduos ficaram parados. Se o jogador permaneceu por muito tempo, a simulação terminou. Alguns aprenderam a seguir em frente, ignorando a presença de obstáculos e inimigos. Isso levou a uma reunião com inimigos e balas, mas houve pelo menos algum progresso. Um dos indivíduos de geração zero. A linha verde é uma conexão positiva. Se um bloco entrar nele, a mesma cor será transmitida para a saída. Esse neurônio força o jogador a avançar enquanto houver uma plataforma à sua frente. A linha vermelha é negativa e a saída é o oposto da cor obtida.
Depois de encontrar vários inimigos acima de sua cabeça, o jogador pula várias vezes e se vê em uma plataforma que termina em um penhasco. Como não há mais um quarteirão no lugar certo, esse indivíduo para aqui. Indivíduos mais complexos e possivelmente mais bem-sucedidos têm mais neurônios, mas o princípio de operação permanece o mesmo.Para fazer a rede neural aprender, a seleção é aplicada. O desempenho de cada indivíduo é estimado pela distância percorrida e velocidade. Somente os indivíduos mais eficazes são cruzados na próxima geração, e então ocorrem mutações. O processo é repetido quantas vezes for necessário. Foram necessárias 35 gerações para concluir um nível. O indivíduo mais perfeito recebeu um valor de aptidão da ordem de 4000.
O SethBling não criou um princípio de funcionamento do zero. Ao criá-lo, ele usou o trabalho científico já existente sobre o NEAT (NeuroEvolução de Topologias Aumentadas), a neuroevolução de topologias em crescimento. Também descreve como as gerações podem ser divididas em espécies, o que nem todos os algoritmos genéticos estão tentando fazer. MarI / O foi escrito em Lua usando o emulador BizHawk . SethBling não parou por aí. Ele forçou o algoritmo a passar por outras plataformas, transmitindo o processo de aprendizado em sua conta do Twitch. Entre os jogos estava o clássico Super Mario Brothers. O MarI / O conseguiu passar do primeiro nível, mas já parou no segundo. Mesmo apesar da falha, o algoritmo descobriu acidentalmente um pequeno bug que poderia ser útil aos speedraners.
Algumas pessoas ficaram presas em uma das paredes do nível Donut Plains 4 no Super Mario World. Demorou algum tempo para entender que você precisa colidir com a parede, não precisa pular nela. A próxima geração já foi capaz de correr contra a parede, mas no obstáculo seguinte, os indivíduos pararam - eles esqueceram como pular na frente do obstáculo. Após algumas gerações, o algoritmo percebeu onde pressionar o botão à esquerda e para onde pular. A MarI / O nunca conseguiu concluir esse nível. Um dos canos é alto demais para pular. Em vez disso, use a plataforma de um dos irmãos Hammer. SethBling interrompeu o processo de aprendizado, acreditando que o algoritmo nunca aprenderia isso.
No terceiro vídeo, o MarI / O joga Super Mario Kart no modo Contra-Relógio sem inimigos. Winterbunny ajudou a modificar o script para funcionar neste jogo. Embora Super Mario Kart seja diferente de plataformas, o processo de aprendizado é o mesmo. A princípio, o algoritmo é estúpido e não pode fazer nada. Os indivíduos estão apenas tentando clicar em certos botões. Mas mesmo na geração zero, houve indivíduos que aprenderam a andar muito bem.Já na sétima geração, foi encontrado um indivíduo que dirigia 5 voltas em 2,5 minutos. Este número é ruim, o recorde mundial é de cerca de um minuto. Um indivíduo constantemente se deparava com obstáculos e às vezes envolvia círculos. Um indivíduo da nona geração mostrou um bom resultado de 1,5 minutos; ela até tentou permanecer na estrada sem ficar à margem.Código-fonte MarI / O do PastebinOutro canal do Twitch onde o MarI / O aprende a jogar vários jogosSource: https://habr.com/ru/post/pt381315/
All Articles