Apprenez à un réseau neuronal à jouer à un jeu de cartes


10

J'écris actuellement un moteur pour jouer à un jeu de cartes, car il n'y a pas encore de moteur pour ce jeu particulier.

J'espère pouvoir ensuite introduire un réseau de neurones dans le jeu et lui faire apprendre à jouer.

J'écris le moteur d'une manière qui soit utile pour un joueur IA. Il y a des points de choix, et à ces points, une liste d'options valides est présentée. Une sélection aléatoire serait en mesure de jouer le jeu (mais pas bien).

J'ai beaucoup appris sur les réseaux de neurones (principalement NEAT et HyperNEAT) et j'ai même construit ma propre implémentation. Je ne sais toujours pas comment construire au mieux une IA qui peut prendre en compte toutes les variables d'un de ces types de jeux. Existe-t-il une approche commune? Je sais que Keldon a écrit une bonne IA pour RftG qui a une quantité décente de complexité, je ne sais pas comment il a réussi à construire une telle IA.

Aucun conseil? Est-ce faisable? Y en a-t-il de bons exemples? Comment les entrées ont-elles été cartographiées?

EDIT: J'ai regardé en ligne et j'ai appris comment les réseaux de neurones fonctionnent et généralement comment ils se rapportent à la reconnaissance d'image ou au pilotage d'un simple agent. Je ne sais pas si ni comment je l'appliquerais pour faire des sélections avec des cartes qui ont une synergie complexe. Toute direction vers ce que je devrais examiner serait grandement appréciée.

A propos du jeu: Le jeu est similaire à Magic: The Gathering. Il y a un commandant qui a la santé et les capacités. Les joueurs ont une réserve d'énergie qu'ils utilisent pour mettre des sbires et des sorts sur le plateau. Les serviteurs ont des PV, des valeurs d'attaque, des coûts, etc. Les cartes ont aussi des capacités, celles-ci ne sont pas facilement énumérées. Les cartes sont jouées de la main, de nouvelles cartes sont tirées d'un jeu. Ce sont tous des aspects qu'il serait utile que le réseau neuronal considère.


Bienvenue à AI.SE! Dans l'état actuel des choses, il semble un peu trop large pour que nous puissions y répondre correctement. Pensez-vous que vous pourriez le modifier pour le réduire un peu? Merci!
Mithical

Bien que la question soit large, c'est une question évidente et courante pour quelqu'un de nouveau dans le domaine. C'est également un domaine où les réponses sont difficiles à trouver avec Google (car la plupart des didacticiels sur NN semblent se concentrer sur la reconnaissance d'image et les exemples de langue). Je pense qu'il mérite une réponse pointant vers de bonnes ressources sur les approches et les techniques pour utiliser NN pour jouer à des jeux, dans ce cas en particulier les jeux de cartes.
user12889

Merci pour les commentaires. J'ai un peu édité ma question. Toute orientation vers le matériel d'apprentissage serait utile. Je trouve surtout la reconnaissance d'image comme vous l'avez mentionné. Je suis impatient d'apprendre et je suis heureux d'avoir un grand nombre de lectures recommandées, plutôt qu'une simple réponse.
pcaston2

Réponses:


3

Je pense que vous posez une bonne question, en particulier WRT sur la façon dont les entrées et sorties NN sont mappées sur les mécanismes d'un jeu de cartes comme MtG où les actions disponibles varient considérablement selon le contexte.

Je n'ai pas de réponse vraiment satisfaisante à offrir, mais j'ai joué à l'IA basée sur Race for the Galaxy NN de Keldon - je suis d'accord pour dire qu'elle est excellente - et j'ai examiné comment elle a abordé ce problème.

Le dernier code pour l'IA de Keldon est désormais consultable et consultable sur github .

Le code ai est dans un fichier . Il utilise 2 NN distincts, l'un pour "évaluer la main et les cartes actives" et l'autre pour "prédire les choix de rôles".

Ce que vous remarquerez, c'est qu'il utilise une bonne quantité de code non NN pour modéliser les mécanismes de jeu. C'est une solution hybride.

Le mappage de l'état du jeu dans l'évaluation NN se fait ici . Diverses caractéristiques pertinentes sont codées à chaud, par exemple le nombre de marchandises qui peuvent être vendues ce tour-ci.


Une autre excellente étude de cas dans la cartographie d'un jeu complexe dans un NN est l'environnement d'apprentissage Starcraft II créé par Deepmind en collaboration avec Blizzard Entertainment. Cet article donne un aperçu de la façon dont un jeu de Starcraft est mappé sur un ensemble de fonctionnalités qu'un NN peut interpréter, et comment des actions peuvent être émises par un agent NN pour la simulation de jeu.


2

Ceci est tout à fait possible, mais la façon dont les entrées sont mappées dépendra grandement du type de jeu de cartes et de la façon dont il est joué.

Je prendrai en compte quelques possibilités:

  1. Le temps compte-t-il dans ce jeu? Un mouvement passé influencerait-il un futur? Dans ce cas, vous feriez mieux d'utiliser les réseaux de neurones récurrents (LSTM, GRU, etc.).
  2. Souhaitez-vous que le Neural Network apprenne des données que vous collectez ou apprenne de lui-même? Si seul, comment? Si vous collectez des données sur vous-même en jouant au jeu des dizaines ou des centaines de fois, les alimentez dans le réseau neuronal et faites-les apprendre de vous, alors vous faites quelque chose appelé "Clonage comportemental". Cependant, si vous souhaitez que le NN apprenne par lui-même, vous pouvez le faire de 2 manières:

    a) Apprentissage par renforcement - RL permet au réseau neuronal d'apprendre en jouant contre lui-même de nombreuses fois.

    b) NEAT / Algorithme génétique - NEAT permet au réseau neuronal d'apprendre en utilisant un algorithme génétique.

Cependant, encore une fois, afin d'être plus précis sur la façon dont les entrées et sorties du Neural Net doivent être encodées, je devrais en savoir plus sur le jeu de cartes lui-même.


Bonjour, merci pour la réponse! Je vais enquêter sur ces domaines pour voir ce qui s'applique. J'ai ajouté une brève description du jeu dans l'espoir que cela le réduise pour vous. Mon moteur prend en charge les annulations, ce qui peut être utile avec NN. Le moteur étant inachevé, je n'ai pas de jeu d'échantillons mais je prévois de conserver tous les historiques de jeu du serveur d'hébergement entre 2 joueurs. J'envisageais d'utiliser la rétropropagation pour accélérer le processus.
pcaston2

Si l'état du jeu est important, mais pas comment vous êtes arrivé à cet état , diriez-vous alors que le temps compte? Pouvez-vous donner des exemples de jeux où le temps compte et d'autres où le temps n'a pas d'importance? Pour le moment, je ne peux penser qu'à des situations où l'état actuel importe (qui est le tour, quelles cartes ou pièces de jeu connues sont où) mais pas comment vous y êtes arrivé (la seule chose qui compte est où ils sont maintenant , pas où ils étaient deux tours auparavant)
Simon Forsberg

2

Vous voudriez certainement que votre réseau connaisse des informations cruciales sur le jeu, comme les cartes que l'agent IA possède (leurs valeurs et types), le pool de mana, le nombre de cartes sur la table et leurs valeurs, le numéro du tour, etc. Ces choses que vous devez comprendre par vous-même, la question que vous devez vous poser est "Si j'ajoute cette valeur pour saisir comment et pourquoi cela améliorera mon système". Mais la première chose à comprendre est que la plupart des NN sont conçus pour avoir une taille d'entrée constante, et je suppose que c'est important dans ce jeu car les joueurs peuvent avoir une quantité différente de cartes dans leur main ou sur la table. Par exemple, si vous voulez faire savoir à NN quelles cartes il possède, supposons que le joueur peut avoir un maximum de 5 cartes dans sa main et que chaque carte peut avoir 3 valeurs (mana, attaque et santé), vous pouvez donc encoder cela en 5 * 3 vecteur, où les 3 premières valeurs représentent la carte numéro un et ainsi de suite. Mais que se passe-t-il si le joueur a actuellement 3 cartes, une approche simple serait d'attribuer des zéros aux 6 dernières entrées, mais cela peut poser des problèmes car certaines cartes peuvent avoir 0 coût de mana ou 0 attaque. Vous devez donc comprendre comment résoudre ce problème. Vous pouvez rechercher des modèles NN qui peuvent gérer une taille d'entrée variable ou comprendre comment coder une entrée en tant que vecteur de taille constante.

Deuxièmement, les sorties sont également des vecteurs de taille constante. Dans le cas de ce type de jeu, il peut s'agir d'un vecteur qui code les actions que l'agent peut effectuer. Disons donc que nous avons 3 actions: mettre une carte, sauter le tour et concéder. Il peut donc s'agir d'un seul encodeur à chaud, par exemple si vous avez une sortie 1 0 0, cela signifie que l'agent doit mettre une carte. Pour savoir quelle carte il doit mettre, vous pouvez ajouter un autre élément à la sortie qui produira un nombre compris entre 1 et 5 (5 est le nombre maximum de cartes dans la main).

Mais la partie la plus importante de la formation d'un réseau neuronal est que vous devrez trouver une fonction de perte adaptée à votre tâche. Peut-être que les fonctions de perte standard comme la perte quadratique moyenne ou L2 seront bonnes, peut-être devrez-vous les modifier afin de répondre à vos besoins. C'est la partie où vous devrez effectuer une recherche. Je n'ai jamais travaillé avec NEAT auparavant, mais si j'ai bien compris, il utilise un algorithme génétique pour créer et entraîner NN, et GA utilise une fonction de fitness pour sélectionner un individu. Donc, fondamentalement, vous devrez savoir quelle métrique vous utiliserez pour évaluer la performance de votre modèle et en fonction de cette métrique, vous modifierez les paramètres du modèle.

PS. Il est possible de résoudre ce problème avec le réseau neuronal, cependant, les réseaux neuronaux ne sont pas magiques et ne sont pas la solution universelle à tous les problèmes. Si votre objectif est de résoudre ce problème, je vous recommanderais également de creuser dans la théorie des jeux et son application dans l'IA. Je dirais que résoudre ce problème nécessiterait des connaissances complexes dans différents domaines de l'IA.

Cependant, si votre objectif est d'en apprendre davantage sur les réseaux de neurones, je recommanderais de prendre des tâches beaucoup plus simples. Par exemple, vous pouvez implémenter NN qui fonctionnera sur l'ensemble de données de référence, par exemple, NN qui classera les chiffres de l'ensemble de données MNIST. La raison en est que beaucoup d'articles ont été écrits sur la façon de faire la classification sur cet ensemble de données et vous en apprendrez beaucoup et vous apprendrez plus rapidement en mettant en œuvre des choses simples.


1

Oui. C'est faisable.

Aperçu de la question

L'objectif de conception du système semble être de gagner un avantage stratégique gagnant en utilisant un ou plusieurs réseaux artificiels en conjonction avec un moteur de jeu de cartes.

La question montre une prise de conscience générale des bases du jeu telles que décrites dans Morgenstern et la théorie des jeux de von Neuman .

  • À des moments précis du jeu, un joueur peut être amené à exécuter un coup.
  • Il y a un ensemble fininte d'options de déplacement selon les règles du jeu.
  • Certaines stratégies de sélection d'un coup produisent des records de gains plus élevés sur plusieurs parties que d'autres stratégies.
  • Un réseau artificiel peut être utilisé pour produire des stratégies de jeu qui l'emportent plus fréquemment que la sélection de coups aléatoires.

D'autres caractéristiques du jeu peuvent ou non être aussi évidentes.

  • À chaque point de mouvement, il y a un état de jeu, qui est nécessaire à tout composant impliqué dans l'amélioration du succès du jeu.
  • En plus de ne pas savoir quand l'adversaire bluffera, dans les jeux de cartes, l'ordre secret des cartes mélangées peut introduire l'équivalent d'un joueur virtuel dont les mouvements sont approximativement aléatoires.
  • Dans trois parties ou plus, la signalisation de partenaires ou de partenaires potentiels peut ajouter un élément de complexité pour déterminer la stratégie de jeu gagnante à tout moment. Sur la base des modifications, il ne semble pas que ce jeu ait de telles complexités.
  • Des facteurs psychologiques tels que l'intimidation peuvent également jouer un rôle dans la victoire du jeu. On ne sait pas si le moteur présente un visage à l'adversaire, donc cette réponse sautera dessus.

Conseils pour une approche commune

Il existe une approche commune pour mapper les entrées et les sorties, mais il y a trop à expliquer dans une réponse Stack Exchange. Ce ne sont là que quelques principes de base.

  • Toutes les modélisations qui peuvent être effectuées explicitement doivent être effectuées. Par exemple, bien qu'un filet artificiel puisse théoriquement apprendre à compter les cartes (en gardant une trace des emplacements possibles de chacune des cartes), un simple algorithme de comptage peut le faire, alors utilisez l'algorithme connu et introduisez ces résultats dans le réseau artificiel comme contribution.
  • Utilisez comme entrée toute information corrélée avec une sortie optimale, mais n'utilisez pas comme entrée toute information qui ne peut pas être corrélée avec une sortie optimale.
  • Encodez les données pour réduire la redondance dans le vecteur d'entrée, à la fois pendant l'entraînement et pendant le jeu automatisé. L'abstraction et la généralisation sont les deux moyens courants d'y parvenir. L'extraction de fonctionnalités peut être utilisée comme un outil pour résumer ou généraliser. Cela peut être fait aux entrées et aux sorties. Un exemple est que si, dans ce jeu, J> 10 de la même manière que A> K, K> Q, Q> J et 10> 9, alors encodez les cartes sous forme d'entier de 2 à 14 ou de 0 à 12 par soustraire un. Encodez les combinaisons de 0 à 3 au lieu de quatre chaînes de texte.

Le travail de reconnaissance d'image n'est lié qu'à distance, trop différent du jeu de cartes pour être utilisé directement, sauf si vous devez reconnaître les cartes à partir d'une image visuelle, auquel cas LSTM peut être nécessaire pour voir ce que les autres joueurs ont choisi pour les mouvements. L'apprentissage de stratégies gagnantes bénéficierait plus que probablement des conceptions MLP ou RNN, ou de l'une de leurs conceptions de réseaux artificiels dérivés.

Que ferait un réseau artificiel et exemples de formation

Le rôle principal des réseaux artificiels de ces types est d'apprendre une fonction à partir d'exemples de données. Si vous avez les séquences de mouvements de vrais jeux, c'est un grand atout à avoir pour votre projet. Un très grand nombre d'entre eux seront très utiles pour la formation.

La façon dont vous organisez les exemples et si et comment vous les étiquetez mérite d'être prise en considération, mais sans les règles du jeu de cartes, il est difficile de donner une direction fiable. S'il y a des partenaires, s'il est basé sur le score, si le nombre de coups vers une victoire et une douzaine d'autres facteurs fournissent les paramètres du scénario nécessaires pour prendre ces décisions.

Étudier

Le principal conseil que je peux donner est de lire, pas tellement d'articles généraux sur le web, mais de lire quelques livres et certains des articles que vous pouvez comprendre sur les sujets ci-dessus. Ensuite, trouvez du code que vous pouvez télécharger et essayez après avoir bien compris la terminologie pour savoir quoi télécharger.

Cela signifie que les recherches de livres et les recherches universitaires sont beaucoup plus susceptibles de vous orienter dans la bonne direction que les recherches générales sur le Web. Il existe des milliers de poses dans l'espace Web général, expliquant les principes de l'IA avec un grand nombre d'erreurs. Les éditeurs de livres et d'articles académiques sont plus exigeants en matière de diligence raisonnable de leurs auteurs.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.