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.
la source
Réponses:
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.
la source
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:
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.
la source
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.
la source
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 .
D'autres caractéristiques du jeu peuvent ou non être aussi évidentes.
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.
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.
la source