Une approche de notation des adversaires informatiques qui doit être équilibrée

16

Cette question concerne une approche des adversaires informatiques que j'ai créés et qui sont actuellement utilisés ou prévus pour être utilisés dans plusieurs jeux informatiques.

Contexte

L'année dernière, en essayant d'améliorer un adversaire informatique pour un jeu appelé "Démineur Démineur" (brève description: une version multijoueur au tour par tour de Démineur où vous devez prendre plus de mines que votre adversaire) , j'ai fortement changé la façon dont mes algorithmes fonctionnaient . Au lieu d'utiliser une approche comme if-else-if-else, j'utilise un ensemble de «correcteurs» avec des poids spécifiés pour déterminer quel est le meilleur mouvement.

Vous pourriez penser que pour un jeu comme Démineur Démineur, il s'agit uniquement de faire des mouvements qui vous donnent la plus grande probabilité de prendre une mine, mais ce n'est pas si simple. Le coup que l'ordinateur effectuera dépend généralement de plusieurs fonctionnalités pour ce coup spécifique dans l'état actuel du jeu. Exemples de fonctionnalités:

  • Quelle est la probabilité que ce mouvement marque une mine?
  • Quelle est la probabilité de révéler quoi que ce soit à mon adversaire ici?

Description du système

Le système fonctionne essentiellement comme ceci:

  1. "Pré-buteurs": une pré-analyse est effectuée pour l'état actuel du jeu (en termes de drapeaux de démineur, il s'agit généralement de: Calcul de toutes les probabilités)
  2. "Marqueurs": Un groupe de marqueurs ordinaires est invité à déterminer le score pour chaque coup possible, chaque marqueur applique des scores selon ses propres critères. Les correcteurs peuvent vérifier les résultats de la pré-analyse effectuée.
  3. Les scores calculés à l'étape ci-dessus sont additionnés et sont définis comme étant le score d'un coup.
  4. Les coups sont triés en fonction de leur score et classés afin que tous les coups avec le même score obtiennent le même rang.
  5. "Post-scorers": Le résultat de ce qui précède peut être envoyé à des "Post-scorers" qui ont la possibilité de modifier les scores de n'importe quel champ comme bon leur semble, selon les propres règles du post-scoreur.

En combinant un tas de pré-buteurs, de buteurs (avec leurs poids) et de post-buteurs, c'est ce que j'appelle une configuration de score .

Exemple de résultat

Ceci est un exemple de scores appliqués aux drapeaux de démineur. Voici la carte qui a été notée:

Carte des drapeaux du démineur qui a été notée

Et c'est la sortie d'une configuration de partition réelle. Il montre le rang des mouvements possibles, où 1 est le meilleur rang et a été mis en évidence en blanc:

Exemple de résultat de l'approche de notation

Grâce à l'écriture d'un code très flexible, cette approche des IA peut également être insérée dans d'autres jeux.

Avantages et inconvénients

Voici quelques avantages et inconvénients de ce système auxquels je peux penser

Les avantages

  • Il est très facile de créer un grand nombre de configurations différentes pour les IA.
  • Il est possible d'utiliser avec des algorithmes génétiques: chaque marqueur a un poids associé, le poids peut devenir le gène.
  • À l'aide de certains outils, il est possible de vérifier pourquoi un mouvement spécifique a été effectué et quels marqueurs étaient principalement responsables de ce mouvement.
  • En utilisant des outils, il est possible de créer une carte du score global / rang des mouvements possibles (comme la capture d'écran ci-dessus)
  • En appliquant des scores à la façon dont l'humain joue, il est possible de créer un "#AI_Mirror" qui essaie de faire des mouvements qu'il pense que l'humain ferait

Désavantages

  • Il peut être extrêmement difficile d'ajuster une configuration de partition "correctement", pour que l'IA joue aussi bien que possible.

Des questions

  • Le système que j'ai construit ici est-il largement connu dans le monde de l'IA? Comment cela s'appellerait-il en termes réels d'IA?

  • Cette approche est-elle logique ou existe-t-il une approche différente que vous recommanderiez?

  • Quels sont les moyens qui pourraient faciliter le processus de modification d'une configuration de partition?

En ce qui concerne la dernière question, je suis conscient de la possibilité d'utiliser des algorithmes génétiques, je suis également légèrement au courant de SARSA (et je pense que mes correcteurs ressemblent à la description des fonctionnalités de ce site avec des poids, mais d'après ce que je comprends, ce n'est pas exactement ce que j'ai créé ici). Je pense qu'un problème avec SARSA est que vous ne connaissez pas la récompense jusqu'à la fin du jeu, le meilleur coup est souvent un coup qui ne donne pas du tout de récompense (une mine). Vos chances de gagner actuelles dépendent à la fois du score actuel (combien de mines vous et votre adversaire avez prises) et à quoi ressemble la carte actuelle.


Cette question a été initialement publiée sur un site d'Intelligence Artificielle aujourd'hui disparu .
Le code (Java) utilisé pour cette approche a maintenant été publié sur Code Review .

Simon Forsberg
la source

Réponses:

7

À la longue, c'est un système expert (comme la logique floue). Comme vous n'exécutez pas d'algorithme pour effectuer un retour sur les paramètres de décision en fonction de la sortie, ce n'est pas vraiment un apprentissage. Cependant, effectuer une rétroaction n'est pas le seul indicateur si une alogirthm est AI. On pourrait faire valoir que s'il agit d'une manière qui semble intelligente, c'est tout ce qui compte - en particulier lorsque le jeu est joué par un adversaire humain.

Le type d'algorithme que vous avez spécifié est vraiment une équation paramétrée, le genre que vous trouverez dans les calculs d'assurance. Après chaque mouvement, l'espace d'entrée change mais l'algorithme n'a pas besoin de mémoire de l'état précédent, il traite donc chaque mouvement comme une nouvelle carte distincte.

Utilisation d'algorithmes génétiques

Il existe deux options claires pour les algorithmes génétiques:

  • Utilisez les paramètres du génome (comme vous l'avez suggéré). Vous optimiserez les règles que vous avez mais vous vous retrouvez avec un système expert.
  • Utilisez Learning Classifier System (LCS) pour choisir les règles pour vous. Un LCS est un type d'algorithme génétique dans lequel vous encodez les règles ainsi que les paramètres. Ils mettent plus de temps à converger et sont sensibles à la fonction fitness. Je pense que la manière de jouer qui en résulte pourrait être plus intéressante pour elle.

Recuit simulé

Une autre façon de résoudre le problème consiste à utiliser le recuit simulé (SA). Votre problème est un espace d'entrée borné et vous pouvez écrire analytiquement une fonction qui trouve le meilleur carré à choisir dans un scénario donné. L'utilisation du recuit simulé trouvera un optimum global pour vos paramètres.

En le rendant trop bon

Je sais que vous voulez que l'algorithme soit le meilleur possible, mais n'oubliez pas qu'un humain joue contre. Il existe un moyen tactiquement parfait de jouer à ce genre de jeux déterministes et si le joueur IA le prend, ce n'est que par chance que le joueur gagne.

Dr Rob Lang
la source
Votre réponse m'a donné beaucoup à étudier, merci beaucoup! Bien que je ne sois pas sûr d'être d'accord avec le fait de classer ce jeu particulier comme "déterministe" ..
Simon Forsberg
La raison pour laquelle je dis qu'il est déterministe est que le nombre de possibilités pour un jeu donné est limité et bien que le joueur humain puisse sembler faire des choix aléatoires, il le fait dans un espace tellement défini qu'il est déterministe. En règle générale, si vous utilisez un générateur de nombres aléatoires (ou un facteur externe que vous ne contrôlez pas) n'importe où, c'est stochastique. Sinon, c'est déterministe.
Dr Rob Lang,
Eh bien, le démineur est stochastique, je dirais, car vous ne connaissez pas le contenu d'un champ jusqu'à ce que vous ayez pris la décision de le révéler.
Simon Forsberg
1
À mon humble avis, cela ne le rend pas stochastique. Ce serait stochastique si: étant donné les mêmes conditions de départ (le plateau caché) le résultat pouvait être différent à chaque fois que le carré était cliqué.
Dr Rob Lang
2
Stochastique / déterministe et entièrement observable / partiellement observable sont des propriétés orthogonales strictement différentes. Par définition (par exemple, Russel / Norvig "Si le prochain état de l'environnement est complètement déterminé par l'état actuel et l'action exécutée par l'agent ..."), le démineur est déterministe, bien qu'il ne soit pas entièrement observable.
Peteris
0

Oui, la technique d'attribution de scores basée sur certains aspects de la position est standard dans l'écriture d'IA pour jouer à des jeux. Par exemple, presque tous les programmes d'échecs fonctionnent en marquant les positions en fonction de manière plus significative sur les pièces disponibles, avec des bonus plus petits en fonction de leurs positions (par exemple, des pions se protégeant mutuellement). Ils essaient ensuite de calculer le meilleur coup disponible en utilisant un algorithme de recherche contradictoire tel que l'alpha-bêta.

La recherche contradictoire peut être difficile ici en raison du grand facteur de ramification - dans n'importe quelle position, les mesures légales consistent à marquer ou révéler tout carré inconnu. D'un autre côté, il est possible que vous puissiez réduire considérablement le facteur de branchement par heuristique. Par exemple, marquer ou révéler un carré dont vous ne savez rien du tout sera très rarement le meilleur coup. À l'inverse, si vous connaissez l'emplacement de certaines mines non marquées, le marquage de l'une d'entre elles sera probablement le meilleur coup, la plupart du temps. Le maintien d'une table de transposition serait également utile.

David Richerby
la source