ML-Agents joue à DodgeBall

Dans le dernier article du blog ML-Agents, nous avons annoncé de nouvelles fonctionnalités pour la création de comportements coopératifs avec l'apprentissage par renforcement. Aujourd'hui, nous sommes ravis de partager un nouvel environnement pour démontrer davantage ce que les ML-Agents peuvent faire. DodgeBall est un environnement compétitif de type shooter équipe contre équipe où les agents s'affrontent dans des rounds d'élimination ou de capture du drapeau. L'environnement est open-source, n'hésitez donc pas à consulter le repo.
L'ajout récent de l'algorithme MA-POCA dans ML-Agents permet à quiconque de former des comportements coopératifs pour des groupes d'agents. Ce nouvel algorithme est une mise en œuvre de l'apprentissage centralisé avec une exécution décentralisée. Un critique centralisé (réseau neuronal) traite les états de tous les agents du groupe pour estimer leur performance, tandis que plusieurs acteurs décentralisés (un par agent) contrôlent les agents. Cela permet à chaque agent de prendre des décisions basées uniquement sur ce qu'il perçoit localement et d'évaluer simultanément la qualité de son comportement dans le contexte de l'ensemble du groupe. Le diagramme ci-dessous illustre l'apprentissage centralisé et l'exécution décentralisée de MA-POCA.

L'une des nouveautés de l'algorithme MA-POCA est qu'il utilise un type spécial d'architecture de réseau neuronal appelé réseau d'attention qui peut traiter un nombre non fixe d'entrées. Cela signifie que le critique centralisé peut traiter n'importe quel nombre d'agents, ce qui explique pourquoi MA-POCA est particulièrement bien adapté aux comportements coopératifs dans les jeux. Il permet d'ajouter ou de retirer des agents d'un groupe à tout moment, tout comme les personnages d'un jeu vidéo peuvent être éliminés ou apparaître au milieu d'un combat d'équipe. La MA-POCA est également conçue de manière à ce que les agents puissent prendre des décisions dans l'intérêt de l'équipe, même si c'est à leur propre détriment. Ce comportement altruiste est difficile à obtenir avec un comportement codé à la main, mais il peut être appris en fonction de l'utilité de la dernière action d'un agent pour le succès global du groupe. Enfin, de nombreux algorithmes d'apprentissage par renforcement multi-agents supposent que tous les agents choisissent leur prochaine action en même temps, mais dans les jeux réels avec de nombreux agents, il est généralement préférable qu'ils prennent des décisions à des moments différents pour éviter le "frame drop". C'est pourquoi MA-POCA ne pose pas ces hypothèses et fonctionnera même si les décisions des agents d'un même groupe ne sont pas synchronisées. Pour vous montrer l'efficacité de MA-POCA dans les jeux, nous avons créé l'environnement DodgeBall - un jeu amusant en équipe contre équipe avec une IA entièrement entraînée à l'aide de ML-Agents.
L'environnement DodgeBall est un jeu de tir à la troisième personne dans lequel les joueurs essaient de ramasser autant de balles qu'ils le peuvent, puis de les lancer sur leurs adversaires. Il comprend deux modes de jeu : Élimination et Capture du drapeau. Dans l'Élimination, chaque groupe essaie d'éliminer tous les membres de l'autre groupe - deux coups et ils sont éliminés. Dans le jeu Capture the Flag, les joueurs essaient de voler le drapeau de l'autre équipe et de le ramener à leur base (ils ne peuvent marquer que si leur propre drapeau est encore en sécurité dans leur base). Dans ce mode, le fait d'être touché par une balle signifie que l'on abandonne le drapeau et que l'on est assommé pendant dix secondes, avant de retourner à la base. Dans les deux modes, les joueurs peuvent tenir jusqu'à quatre balles et s'élancer pour esquiver les balles qui arrivent et passer à travers les haies.
Dans l'apprentissage par renforcement, les agents observent l'environnement et prennent des mesures pour maximiser une récompense. Les observations, les actions et les récompenses pour l'entraînement des agents au jeu DodgeBall sont décrites ci-dessous.
Dans DodgeBall, les agents observent leur environnement à travers les trois sources d'information suivantes :
- Diffusions : Grâce à la diffusion de rayons, les agents peuvent percevoir l'aspect du monde qui les entoure. Les agents utilisent ces informations pour détecter et attraper les balles, éviter les murs et cibler leurs adversaires. Différents jeux de rayons - représentés par des couleurs différentes ci-dessous - sont utilisés pour détecter différentes classes d'objets.

- Données nationales : Ces informations comprennent la position de l'agent, le nombre de balles qu'il détient actuellement, le nombre de coups qu'il peut recevoir avant d'être éliminé, ainsi que des informations sur les drapeaux en mode Capture du drapeau. Les agents utilisent ces informations pour élaborer des stratégies et déterminer leurs chances de gagner.
- Les autres agents déclarent des données : Ces informations comprennent la position et l'état de santé des coéquipiers de l'agent, et si l'un d'entre eux détient un drapeau. Comme le nombre d'agents n'est pas fixe (les agents peuvent être éliminés à tout moment), nous utilisons un capteur tampon pour que les agents puissent traiter un nombre variable d'observations. Ici, le nombre d'observations se réfère au nombre de coéquipiers encore dans le jeu.
L'environnement DodgeBall utilise également des actions hybrides, qui sont un mélange d'actions continues et discrètes. L'agent dispose de trois actions continues pour se déplacer : L'une consiste à avancer, l'autre à se déplacer latéralement et la dernière à tourner. En même temps, il y a deux actions discrètes : L'un pour lancer une balle et l'autre pour s'élancer. Cet espace d'action correspond aux actions qu'un joueur humain peut effectuer dans les scénarios de capture du drapeau et d'élimination.
Par ailleurs, nous veillons intentionnellement à ce que les récompenses accordées aux agents soient plutôt simples. Nous donnons une récompense finale importante pour la victoire et la défaite, et quelques récompenses intermédiaires pour l'apprentissage du jeu.
Pour l'élimination :
- Les agents reçoivent une récompense de +0,1 lorsqu'ils frappent un adversaire avec une balle.
- L'équipe reçoit +1 si elle gagne le match (en éliminant tous les adversaires), ou -1 si elle perd.
- L'équipe gagnante se voit également attribuer un bonus de temps pour avoir gagné rapidement, égal à 1 (temps restant) / (temps maximum).
Pour Capture the Flag :
- Les agents reçoivent une récompense de +0,02 lorsqu'ils frappent un adversaire avec une balle.
- L'équipe reçoit +2 pour avoir gagné le match (en ramenant le drapeau de l'adversaire à la base), ou -1 pour avoir perdu.
Bien qu'il soit tentant d'accorder aux agents de nombreuses petites récompenses pour les encourager à adopter des comportements souhaitables, nous devons éviter de prescrire à l'excès la stratégie que les agents doivent suivre. Par exemple, si nous donnons une récompense pour avoir ramassé des balles dans l'élimination, les agents pourraient se concentrer uniquement sur le ramassage des balles plutôt que sur les coups portés à leurs adversaires. En rendant nos récompenses aussi "éparses" que possible, les agents sont libres de découvrir leurs propres stratégies dans le jeu, même si cela prolonge la période de formation.
Étant donné le grand nombre de stratégies gagnantes possibles qui peuvent permettre aux agents d'obtenir ces récompenses, nous avons dû déterminer à quoi ressembleraient les comportements optimaux. Par exemple, la meilleure stratégie consiste-t-elle à accumuler les balles ou à les déplacer pour pouvoir les saisir plus tard ? Serait-il judicieux de rester groupés ou de se disperser pour trouver l'ennemi plus rapidement ? Les réponses à ces questions dépendent des choix que nous avons faits en matière de conception du jeu : Si les balles sont rares, les agents les conservent plus longtemps pour empêcher les ennemis de s'en emparer. Si les agents étaient autorisés à savoir à tout moment où se trouve l'ennemi, ils resteraient le plus possible en groupe. Cela dit, lorsque nous avons voulu apporter des modifications au jeu, nous n'avons pas eu à modifier le code de l'IA. Nous avons simplement réappris un nouveau comportement qui s'adapterait au nouvel environnement.
Par rapport à la formation d'un agent unique pour résoudre une tâche, il est plus complexe de former un groupe d'agents à coopérer. Afin de faciliter la gestion d'un groupe d'agents, nous avons créé le script DodgeBallGameController.cs. Ce script sert à initialiser et à réinitialiser l'aire de jeu (ce qui inclut l'apparition des balles et la réinitialisation des positions des agents). Il affecte les agents à leur SimpleMultiAgentGroup et gère les récompenses que chaque groupe reçoit. Par exemple, voici comment le script DodgeBallGameController.cs gère un agent qui en frappe un autre avec une balle.

Dans ce code, le lanceur de balle reçoit une petite récompense lorsqu'il touche un adversaire, mais ce n'est qu'une fois le dernier adversaire éliminé que l'ensemble du groupe est récompensé pour son effort collectif.
MA-POCA traite les agents d'un SimpleMultiAgentGroup différemment des agents individuels. MA-POCA met en commun ses observations afin d'assurer une formation centralisée. Il gère également les récompenses accordées à l'ensemble du groupe, en plus des récompenses individuelles, quel que soit le nombre d'agents qui rejoignent ou quittent le groupe. Vous pouvez surveiller les récompenses cumulées que les agents reçoivent en tant que groupe dans TensorBoard.
L'élimination et la capture du drapeau étant des jeux d'opposition, nous avons combiné MA-POCA avec l'auto-jeu pour confronter les agents à des versions plus anciennes d'eux-mêmes et apprendre à les battre. Comme pour toute exécution d'un auto-jeu dans ML-Agents, nous pouvons suivre les progrès d'apprentissage des agents en nous assurant que l'ELO continue d'augmenter. Après des dizaines de millions d'étapes, les agents peuvent jouer aussi bien que n'importe lequel d'entre nous.

Cette vidéo montre comment les agents progressent dans le temps lorsqu'ils apprennent à jouer à l'Élimination. Vous pouvez constater que, dès le début de la formation, les agents apprennent à tirer, mais qu'ils visent mal et ont tendance à tirer au hasard. Après 40 millions de pas de temps, l'objectif des agents s'améliore, bien qu'ils continuent à se déplacer de manière quelque peu aléatoire dans l'espoir de tomber sur un ennemi. Lorsqu'ils rencontrent un adversaire, ils l'affrontent généralement en tête-à-tête. Enfin, après 120 millions de pas de temps supplémentaires d'entraînement, les agents deviennent beaucoup plus agressifs et confiants et développent des stratégies sophistiquées, telles que l'attaque en groupe du territoire ennemi.
Et voici les agents qui apprennent à jouer à Capture the Flag : Au début de la formation, à 14 millions d'étapes, les agents apprennent à se tirer dessus, sans pour autant capturer le drapeau. À 30 millions, les agents apprennent à ramasser le drapeau ennemi et à retourner à la base, mais à part l'agent qui porte le drapeau, la contribution des autres agents n'est pas claire. Cependant, à partir de 80 millions de pas de temps, les agents présentent des stratégies intéressantes.
Les agents qui ne détiennent pas le drapeau ennemi gardent parfois leur propre base, poursuivent un ennemi qui détient leur drapeau ou attendent dans la base ennemie que le porteur du drapeau revienne et les assomme de balles. S'il a un drapeau, l'agent peut attendre dans sa propre base que ses coéquipiers récupèrent le drapeau pour pouvoir marquer. La vidéo suivante présente quelques-unes des stratégies émergentes intéressantes que les agents ont apprises. Notez que nous n'avons jamais spécifié explicitement ces comportements - ils ont été appris au cours de centaines d'itérations d'auto-jeu.
L'environnement DodgeBall est open source et peut être téléchargé ici. Nous serions ravis que vous l'essayiez. Si vous souhaitez travailler à cette intersection passionnante de l'apprentissage automatique et des jeux, nous recrutons pour plusieurs postes et vous encourageons à postuler ici.
Enfin, nous aimerions connaître votre avis. Pour tout commentaire concernant la boîte à outils Unity ML-Agents, veuillez répondre à l'enquête suivante ou nous envoyer un courriel à ml-agents@unity3d.com. Si vous rencontrez des problèmes, n'hésitez pas à nous contacter sur la page ML-Agents GitHub issues. Pour tout autre commentaire ou question d'ordre général, n'hésitez pas à nous en faire part sur les forums Unity ML-Agents.
