J'essaie de développer une IA pour un jeu de cartes et je suis un peu coincé sur la technique/l'algorithme que je devrais utiliser. Voici quelques hypothèses sur le jeu:
Je connais beaucoup d'indices/règles (par exemple, si je sais que le joueur a les cartes A, B, C, alors je devrais jouer D) qui m'aide à gagner au jeu. J'ai donc d'abord voulu utiliser un réseau bayésien pour décrire ces règles. Le problème est que je ne connais aucune probabilité à attribuer, mais je pourrais calculer une heuristique en utilisant l'histoire des jeux joués (contre un humain). Deuxième problème, il est très probable que je ne connais pas toutes les règles et qu'il existe des règles implicites dont l'IA a besoin pour trouver le jeu optimal.
Je ne sais pas si ce serait un bon moyen de développer une IA pour un tel jeu de cartes?
Je me demande également s'il existe d'autres techniques qui seraient les mieux adaptées au problème. Par exemple, j'ai jeté un œil à minimax (peut-être avec un algorithme d'élagage), mais serait-ce une bonne option pour ce problème? Je ne suis pas certain car les jeux les plus importants sont au début du jeu quand il y a les paramètres inconnus les plus élevés (la plupart des cartes ne sont pas encore jouées).
Votre exemple ressemble à Bridge . Les meilleurs systèmes de bridge utilisent méthodes Monte Carlo pour sélectionner les mouvements. À haut niveau:
Une fois que quelque chose fonctionne, vous pouvez ajouter toutes sortes de stratégies enrichies. Par exemple, modifiez vos probabilités en fonction des jeux historiques d'un joueur, modifiez les probabilités en fonction du style d'un joueur (passif, prudent, agressif), ou même envisagez les effets de joueurs spécifiques jouant ensemble.
Modifier selon le commentaire de LaurentG:
En fin de compte, vous voudrez peut-être abandonner l'idée d'un jeu parfait pour tous les joueurs et remplacer quelque chose de plus réaliste. Conceptuellement, séparez les probabilités qu'une carte soit dans la main de quelqu'un (distribution de cartes) de la probabilité qu'un joueur joue une carte légale donnée pendant une main (sélection de cartes).
La sélection des cartes est mûre pour l'apprentissage. Si vous suivez les jeux sur plusieurs jeux, vous pouvez apprendre comment un joueur donné, ou les joueurs en général, ont tendance à jouer en fonction des cartes en main et des cartes qui ont été jouées. Vous pouvez même devenir fantaisiste et modéliser leurs hypothèses sur les cartes qui leur sont cachées.
Il existe également des possibilités d'apprentissage pour la distribution de cartes. Les enchères passées et la sélection de cartes d'un joueur au cours d'une main peuvent révéler un "tell" sur ce qui est caché dans sa main. Vous pouvez utiliser des données historiques pour ajuster les probabilités lors de la création de chaque jeu virtuel.
Un cas d'expérience personnelle récente:
J'ai moi-même travaillé sur un jeu de cartes (Bisca, un jeu portugais à 2 joueurs) et j'ai obtenu de bons résultats en utilisant les méthodes de Monte Carlo, en particulier en utilisant le récent algorithme Information Set Monte Carlo Tree Search (ISMCTS, décrit avec exemple de code source en Python at http://www.aifactory.co.uk/newsletter/2013_01_reduce_burden.htm ).
Il joue assez bien, avec le coup occasionnel incorrect, juste avec la connaissance des règles du jeu. J'essaie actuellement de le faire pour pouvoir l'améliorer, car selon les informations que j'ai lues à ce sujet (et ses SCTM "parents"), il est possible d'améliorer son jeu avec des heuristiques ( http : //www.orangehelicopter.com/ed/papers/aiide13.pdf ) et inférence de carte de l'adversaire.
Je pense que cela dépend des règles du jeu.
Voici ce que je comprends de votre question:
Hypothèses :
Exemple de jeu qui suit ces règles:
Le premier joueur joue une carte. Le deuxième joueur doit jouer une carte de la même suite ou perdre. Si les suites correspondent, la carte la plus élevée gagne.
Maintenant, ce jeu est décidé par la chance du tirage au sort et en étant capable de mémoriser quelles cartes ont été jouées afin de connaître la main de votre adversaire.
. As ou rois. De cette façon, par exemple, l'IA saura qu'il est sûr de jouer une reine de cœur car il se souviendra que l'adversaire n'a pas l'as ou le roi, mais devra calculer une probabilité s'il veut jouer ensuite le 10, parce qu'il pourrait ne pas se rappeler si le Jack est toujours en jeu.
Cela imite la durée d'attention humaine.
TL; DR
Limitez les connaissances de l'IA afin que ses décisions ne soient pas parfaites, juste assez bonnes.