ML-Agents joga DodgeBall

VINCENT-PIERRE BERGES / UNITY TECHNOLOGIESContributor
Jul 12, 2021|11 Min
ML-Agents joga DodgeBall
Esta página da Web foi automaticamente traduzida para sua conveniência. Não podemos garantir a precisão ou a confiabilidade do conteúdo traduzido. Se tiver dúvidas sobre a precisão do conteúdo traduzido, consulte a versão oficial em inglês da página da Web.

Na última postagem do blogML-Agents, anunciamos novos recursos para criação de comportamentos cooperativos com aprendizado por reforço. Hoje, estamos felizes em compartilhar um novo ambiente para demonstrar ainda mais o que os ML-Agents podem fazer. DodgeBall é um ambiente competitivo de tiro em equipe, onde os agentes competem em rodadas de Eliminação ou Captura da Bandeira. O ambiente é de código aberto, então não deixe de conferir o repositório.

A recente adição do algoritmo MA-POCA no ML-Agents permite que qualquer pessoa treine comportamentos cooperativos para grupos de agentes. Este novo algoritmo é uma implementação de aprendizado centralizado com execução descentralizada. Um crítico centralizado (rede neural) processa os estados de todos os agentes no grupo para estimar o desempenho dos agentes, enquanto vários atores descentralizados (um por agente) controlam os agentes. Isso permite que cada agente tome decisões com base apenas no que percebe localmente e, simultaneamente, avalie quão bom é seu comportamento no contexto de todo o grupo. O diagrama abaixo ilustra o aprendizado centralizado e a execução descentralizada do MA-POCA.

Ilustração de aprendizagem centralizada com execução descentralizada

Uma das novidades do algoritmo MA-POCA é que ele usa um tipo especial de arquitetura de rede neural chamada redes de atenção , que podem processar um número não fixo de entradas. Isso significa que o crítico centralizado pode processar qualquer número de agentes, razão pela qual o MA-POCA é particularmente adequado para comportamentos cooperativos em jogos. Ele permite que agentes sejam adicionados ou removidos de um grupo a qualquer momento – assim como personagens de videogame podem ser eliminados ou surgir no meio de uma luta em equipe. O MA-POCA também foi projetado para que os agentes possam tomar decisões em benefício da equipe, mesmo que isso seja em seu próprio detrimento. Esse comportamento altruísta é difícil de ser alcançado com um comportamento codificado manualmente, mas pode ser aprendido com base na utilidade da última ação de um agente para o sucesso geral do grupo. Por fim, muitos algoritmos de aprendizado por reforço multiagente pressupõem que todos os agentes escolhem sua próxima ação ao mesmo tempo, mas em jogos reais com vários agentes, geralmente é melhor que eles tomem decisões em momentos diferentes para evitar perda de quadros. É por isso que o MA-POCA não faz essas suposições e continuará funcionando mesmo que as decisões dos agentes em um único grupo não estejam sincronizadas. Para mostrar o quão bem o MA-POCA funciona em jogos, criamos o ambiente DodgeBall – um divertido jogo de equipe contra equipe com uma IA totalmente treinada usando ML-Agents.

O ambiente do DodgeBall

O ambiente DodgeBall é um jogo de tiro em terceira pessoa onde os jogadores tentam pegar o máximo de bolas que puderem e depois jogá-las nos oponentes. É composto por dois modos de jogo: Eliminação e Captura da Bandeira. Na Eliminação, cada grupo tenta eliminar todos os membros do outro grupo – dois acertos e eles estão fora. Em Capture the Flag, os jogadores tentam roubar a bandeira do outro time e trazê-la de volta para sua base (eles só podem pontuar quando sua própria bandeira ainda estiver segura em sua base). Neste modo, ser atingido por uma bola significa largar a bandeira e ficar atordoado por dez segundos, antes de retornar à base. Em ambos os modos, os jogadores podem segurar até quatro bolas e correr para desviar das bolas que chegam e atravessar cercas vivas.

No aprendizado por reforço, os agentes observam o ambiente e tomam ações para maximizar uma recompensa. As observações, ações e recompensas para treinar agentes para jogar DodgeBall são descritas abaixo.

Em DodgeBall, os agentes observam seu ambiente por meio das três fontes de informação a seguir:

  • Transmissões de raios: Com os raycasts, os agentes podem sentir a aparência do mundo ao redor deles. Os agentes usam essas informações para detectar e agarrar as bolas, evitar paredes e mirar nos oponentes. Diferentes conjuntos de raycasts – representados por cores diferentes abaixo – são usados para detectar diferentes classes de objetos.
Imagem mostrando um ML-Agent observando todos os arredores visíveis do mundo usando raycasts
  • Dados do estado: Essas informações incluem a posição do agente, o número de bolas que ele segura no momento, o número de rebatidas que ele pode receber antes de ser eliminado, bem como informações sobre as bandeiras no modo Capture the Flag. Os agentes usam essas informações para criar estratégias e determinar suas chances de vitória.
  • Outros agentes declaram dados: Essas informações incluem a posição e a saúde dos companheiros de equipe do agente e se algum deles está segurando uma bandeira. Observe que, como o número de agentes não é fixo (os agentes podem ser eliminados a qualquer momento), usamos um Sensor de Buffer para que os agentes processem um número variável de observações. Aqui, o número de observações se refere ao número de companheiros de equipe ainda no jogo.

O ambiente DodgeBall também faz uso de ações híbridas, que são uma mistura de ações contínuas e discretas. O agente tem três ações contínuas para movimento: Uma é mover-se para a frente, outra é mover-se para os lados e a última é girar. Ao mesmo tempo, há duas ações discretas: Um para lançar a bola e outro para correr. Este espaço de ação corresponde às ações que um jogador humano pode executar nos cenários de Captura da Bandeira e Eliminação.

Enquanto isso, garantimos intencionalmente que as recompensas dadas aos agentes sejam bastante simples. Damos uma grande recompensa final para quem ganha e perde, e algumas recompensas intermediárias para quem aprende a jogar.

Para Eliminação:

  • Os agentes recebem uma recompensa de +0,1 por acertar um oponente com uma bola.
  • A equipe recebe +1 por vencer o jogo (eliminar todos os oponentes) ou -1 por perder.
  • A equipe vencedora também recebe um bônus de tempo por vencer rapidamente, igual a 1 (tempo restante) / (tempo máximo).

Para Capture a Bandeira:

  • Os agentes recebem uma recompensa de +0,02 por acertar um oponente com uma bola.
  • A equipe recebe +2 por vencer o jogo (devolver a bandeira do adversário à base) ou -1 por perder.

Embora seja tentador dar aos agentes muitas pequenas recompensas para incentivar comportamentos desejáveis, devemos evitar prescrever demais a estratégia que os agentes devem seguir. Por exemplo, se dermos uma recompensa por pegar bolas na Eliminação, os agentes podem se concentrar apenas em pegar bolas em vez de acertar seus oponentes. Ao tornar nossas recompensas o mais “esparsas” possível, os agentes ficam livres para descobrir suas próprias estratégias no jogo, mesmo que isso prolongue o período de treinamento.

Como há tantas estratégias vencedoras possíveis que podem render essas recompensas aos agentes, tivemos que determinar quais seriam os comportamentos ideais. Por exemplo, a melhor estratégia seria acumular as bolas ou movê-las para pegá-las convenientemente mais tarde? Seria sensato permanecermos juntos como uma equipe ou nos espalharmos para encontrar o inimigo mais rápido? As respostas a essas perguntas dependiam das escolhas de design de jogo que fizemos: Se as bolas fossem escassas, os agentes as guardariam por mais tempo para evitar que os inimigos as pegassem. Se os agentes pudessem saber onde o inimigo estava o tempo todo, eles permaneceriam juntos como um grupo o máximo possível. Dito isso, quando queríamos fazer alterações no jogo, não precisávamos fazer nenhuma alteração no código da IA. Nós simplesmente retreinamos um novo comportamento que se adaptaria ao novo ambiente.

Conseguir que os agentes cooperem

Comparado a treinar um único agente para resolver uma tarefa, é mais complexo treinar um grupo de agentes para cooperar. Para ajudar a gerenciar um grupo de agentes, criamos o script DodgeBallGameController.cs . Este script serve para inicializar e redefinir o playground (isso inclui gerar as bolas e redefinir as posições dos agentes). Ele atribui agentes ao seu SimpleMultiAgentGroup e gerencia as recompensas que cada grupo recebe. Por exemplo, é assim que o script DodgeBallGameController.cs lida com um agente acertando outro com uma bola.

Imagem mostrando código para ML-Agents Dodgeball

Neste código, o lançador da bola recebe uma pequena recompensa por acertar um oponente – mas somente quando o último oponente for eliminado é que todo o grupo será recompensado pelo esforço coletivo.

O MA-POCA manipula agentes em um SimpleMultiAgentGroup de forma diferente de agentes individuais. O MA-POCA reúne suas observações para treinar de maneira centralizada. Ele também lida com as recompensas dadas a todo o grupo, além das recompensas individuais – não importa quantos agentes entram ou saem do grupo. Você pode monitorar as recompensas cumulativas que os agentes recebem como um grupo no TensorBoard.

Juntando tudo

Como Elimination e Capture the Flag são jogos competitivos, combinamos MA-POCA com jogo autônomo para colocar os agentes contra versões mais antigas deles mesmos e aprender como vencê-los. Como em qualquer execução de jogo autônomo no ML-Agents, podemos monitorar o progresso de aprendizado dos agentes garantindo que o ELO continue aumentando. Depois de dezenas de milhões de passos, os agentes conseguem jogar tão bem quanto qualquer um de nós.

Monitoramento gráfico ELO

Este vídeo mostra como os agentes progridem ao longo do tempo ao aprender a jogar Elimination. Você pode ver que, no início do treinamento, os agentes aprendem a atirar, mas têm má mira e tendem a atirar aleatoriamente. Após 40 milhões de passos de tempo, a mira dos agentes melhora, embora eles ainda vaguem aleatoriamente na esperança de encontrar um inimigo. Quando encontram um oponente, eles geralmente o enfrentam individualmente. Finalmente, após outros 120 milhões de passos de tempo de treinamento, os agentes se tornam muito mais agressivos e confiantes e desenvolvem estratégias sofisticadas, como invadir território inimigo em grupo.

E aqui estão os agentes aprendendo a jogar Capture the Flag: No início do treinamento, a 14 milhões de passos, os agentes aprendem a atirar uns nos outros, sem realmente capturar a bandeira. Aos 30 milhões, os agentes aprendem a pegar a bandeira inimiga e retornar à base, mas, além do agente que carrega a bandeira, não fica claro como os outros agentes contribuem. No entanto, após 80 milhões de passos de tempo, os agentes exibem estratégias interessantes.

Agentes que não estão segurando a bandeira inimiga às vezes guardam sua própria base, perseguem um inimigo que esteja com sua bandeira ou esperam na base inimiga até que o porta-bandeira retorne e o atinja com bolas. Se eles tiverem uma bandeira, o agente pode esperar em sua própria base até que seus companheiros de equipe possam pegá-la para que eles possam pontuar. O vídeo a seguir destaca algumas das estratégias emergentes interessantes que os agentes aprenderam. Observe que nunca especificamos explicitamente esses comportamentos – eles foram aprendidos ao longo de centenas de iterações de autojogo.

Próximos passos

O ambiente DodgeBall é de código aberto e está disponível para download aqui. Gostaríamos que você experimentasse. Se você gostaria de trabalhar nessa emocionante intersecção de aprendizado de máquina e jogos, estamos contratando para várias posições e incentivamos você a se candidatar aqui.

Por fim, gostaríamos de ouvir seu feedback. Para qualquer feedback sobre o kit de ferramentas Unity ML-Agents, preencha a seguinte pesquisa ou envie um e-mail diretamente para ml-agents@unity3d.com. Caso você encontre algum problema, não hesite em entrar em contato conosco na página de problemas do ML-Agents no GitHub. Para quaisquer outros comentários ou perguntas gerais, informe-nos nos fóruns do Unity ML-Agents.