Como funciona o sistema de Inteligência Artificial do Dota 2 (Ft. Open AI Five)
O Dota é um jogo multiplayer no estilo MOBA(com 5 jogadores por time), muito parecido com o seu antecessor, o Dota. Em jogos desse estilo o objetivo é destruir a torre principal do inimigo, chamado de Nexus.
Recentemente a Open AI, empresa no nível da DeepMind do Alphago, que criou diversos sistemas de IA super conhecidos, como o GPT-3, Image GPT e o Open AI Five.
Sendo que o Open AI Five é um sistema que derrotou times profissionais de Dota 2, com vitórias esmagadoras e com jogadas super estranhas a princípio que davam certo no final.
O artigo original relacionado a façanha explica com muitos detalhes como eles criaram esse sistema. Eles usaram Reinforcement Learning com LSTM’s na base do programa.
Lembrando que a grande maioria dos sistemas de IA, como o AlphaGo, Alphazero (Joga Xadrez), AlphaStar (Joga Starcraft), o Agent 57 (Joga atari), usavam também reinforcement learning como base, com algumas modificações.
Alguns deles ainda implementavam versões do Algoritmo de Monte Carlo, no caso do AlphaZero e Alphago esse algoritmo é muito importante.
O vídeo acima é um exemplo da IA jogando contra o time OG de Dota, acho que é legal de ver primeiro o sistema em ação para depois vermos como ele funciona, recomendo ver o vídeo antes de continuar a ler o post.
Com funciona os bots de Dota?
Uma característica importante, é que o Open AI Five usava Self Play para treinar, que é basicamente treinar contra si mesmos usando os parâmetros já atualizados.
Os sistemas do AlphaGo, AlphaZero e etc, faziam a mesma coisa. Isso é importante, pois, o número de partidas treinadas sobe de uma forma incomparável já que ela pode jogar jogos simultâneos, assim ela aprende muito mais rápido do que qualquer jogador.
O jogo que passa na tela do seu computador é constituído de frames, que são screenshots passando muito rápido que geram a ilusão de movimento, é assim que filmes, animações vídeos são feitos, um número absurdo de frames por segundo.
O Open AI Five pega esses frames que mostram a posição de personagens, do cenário, torres, minions, tudo que compõe um Moba neste caso, e calcula diferença no frames para não só prever os movimentos do adversário como calcular o seu próximo.
Essa distância, a noção de espaço ao longo do tempo dentro do jogo deve ser calculada constantemente.
Uma forma de visualizar isso na prática, é calcular a proporção de deslocamento dos personagens ao longo do tempo, dada pela integral acima. Em que v é a velocidade da mudança de posição dos personagens, t é o tempo entre a e b.
A mesma equação pode ser representada dessa forma, em que o valor sigma acima representa a soma de todo o deslocamento ao longo do tempo do personagem.
Esse v pode ser representado pela soma de todos os estados desse sistema, que são os frames do jogo ao longo do tempo na partida, você deve calcular essa diferença constantemente.
Se você joga a 30 frames por segundo, vão ser 1800 frames por minuto para serem usados como parâmetro.
Algo muito usado para resolver o problema de entender os parâmetros durante o jogo é usar um filtro (Normalmente chamado de Kalman Filter), para o programa conseguir se localizar dentro do ambiente do game.
Esses filtros são amplamente usados em visão computacional, com aplicações em reconhecimento facial, de objetos e padrões em imagens, vídeos, robótica, carros autônomos, localização de objetos aéreos e etc..
Por exemplom, podemos visualizar os detalhes desse sistema dinâmico do Dota 2 usando uma matriz. Isso é ótimo para trabalhar bem a visão computacional usa dentro do sistema com uma grande acuracidade de terminar o que é oque no mapa.
Sistema de Recompensas
Uma característica muito importante de IA aplicada a jogos é o uso de Q learning. É basicamente uma tabela que pode ser usada para determinar os parâmetros do aprendizado, neste caso no seu jogo.
Essa lista, mostrada na equação acima, é feita a partir das ações que ranqueamos como mais importantes durante a partida, como matar um personagem, destruir uma torre, farmar a jungle e minions.
Em que:
- rt+1 =A soma de todas as recompensas obtidas, pela IA fazendo decisões que definimos como corretas.
- St+1 = O estados do sistema ao longo do tempo, que neste caso, é a soma dos frames durante o jogo.
- O γ é a soma das penalidades desse sistema, sendo que esse Max junto com ele é basicamente o cálculo do maior valor das penalidades. Então quando a IA fazer merda, como perder o jogo, ela é penalizada, com -5 pontos por exemplo. E no final a soma de tudo é o Score dela na partida.
Na página 44 do primeiro artigo citado, eles mostram direitinho a tabela de recompensas e penalidades que eles usaram.
Essa acima tem o mesmo objetivo. Então nessa hierarquia, ganhar a partida é o que mais vai render pontos a IA, sendo que outras ações do jogo positivas ou negativas vão impactar no Score final do sistema na partida, sendo que ele sempre deve querer se superar.
Os resultados foram massivos, com 800 PetaFlops de velocidade sendo usadas no treinamento para a IA ganhar de Profissionais de nível Mundial no Dota 2, com mais de 5 meses de treinamento.
Algo importante é que eles tinham que se adaptar as mudanças no jogo, tanto o Dota 2 como o League of Legends mudam constantemente itens, nerfs em personagens, e às vezes mudanças mais drásticas em todo o game.
Na página 26 do artigo eles mostram como lidaram com esse problema, que é uma barreira que só os MOBA’s possuem em um nível maior que outros games.
Ambiente que eles treinaram o sistema
O API mais usado talvez para reinforcement learning para jogos atualmente é o Gym, é uma ferramenta prática para conseguir avançar rápido para o treinamento do sistema.
Esse o exemplo mais simples do uso do Gym para um mastro de carrinho para se mover. Aqui é usado o mesmo conceito de Q- learning, ações, penalidades e recompensas que citamos antes.
Gym foi usado até para o minecraft com o uso de Reinforcement Learning e Imitation Learning, é uma ferramenta simples de usar e muito poderosa, que pode ser usada usando Tensor Flow. Gym para Minecraft no Github.
O início da IA nos MOBA’s
Jogos como Dota 2, Starcraft e Minecraft são bem mais complexos do que parecem do ponto de vista computacional. Eles requerem uma capacidade de raciocínio e exploração que excedem e muito jogos de tabuleiro como Xadrez e o Go.
Ver que o Dota 2 foi vencido dá um gostinho para vermos um sistema de IA que jogue league of legends no nível profissional, algo que não temos ainda.
Mas a IA de jogos como Minecraft, World of Warcraft, Tibia e outros com propriedades de exploração massiva, ainda tem muito em que melhorar para chegar no nível de players do tipo MMORPG.
Referências:
- Berner, C., Brockman, G., Chan, B., Cheung, V., Debiak, P., Dennison, C., Farhi, D., Fischer, Q., Hashme, S., Hesse, C., Józefowicz, R., Gray, S., Olsson, C., Pachocki, J.W., Petrov, M., Pinto, H.P., Raiman, J., Salimans, T., Schlatter, J., Schneider, J., Sidor, S., Sutskever, I., Tang, J., Wolski, F., & Zhang, S. (2019). Dota 2 with Large Scale Deep Reinforcement Learning. ArXiv, abs/1912.06680.
- Florentin Woergoetter and Bernd Porr (2008), Scholarpedia, 3(3):1448.
- Silver, D., Huang, A., Maddison, C. et al. Mastering the game of Go with deep neural networks and tree search. Nature 529, 484–489 (2016). https://doi.org/10.1038/nature16961.
- Silver, D., Hubert, T., Schrittwieser, J., Antonoglou, I., Lai, M., Guez, A., Lanctot, M., Sifre, L., Kumaran, D., Graepel, T., Lillicrap, T.P., Simonyan, K., & Hassabis, D. (2017). Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm. ArXiv, abs/1712.01815.
- Vinyals, O., Babuschkin, I., Czarnecki, W.M. et al. Grandmaster level in StarCraft II using multi-agent reinforcement learning. Nature 575, 350–354 (2019). https://doi.org/10.1038/s41586-019-1724-z.