la mise en œuvre de la différence temporelle aux échecs


10

J'ai développé un programme d'échecs qui utilise un algorithme d'élagage alpha-bêta et une fonction d'évaluation qui évalue les positions en utilisant les caractéristiques suivantes à savoir le matériel, la sécurité du roi, la mobilité, la structure du pion et les pièces piégées, etc. ... Ma fonction d'évaluation est dérivé de la

F(p)=w1Matériel+w2Kingsafety+w3mobilité+w4structure de pion+w5pièces piégées

est le poids attribué à chaque fonction. À ce stade, je veux régler les poids de ma fonction d'évaluation en utilisant la différence temporelle, où l'agent joue contre lui-même et, dans le processus, collecte des données de formation de son environnement (qui est une forme d'apprentissage par renforcement). J'ai lu quelques livres et articles afin d'avoir un aperçu sur la façon de mettre en œuvre cela en Java, mais ils semblent être théoriques plutôt que pratiques. J'ai besoin d'une explication détaillée et de pseudo-codes sur la façon de régler automatiquement les poids de ma fonction d'évaluation en fonction des jeux précédents.w

Réponses:


4

Je recommande à toute personne intéressée par le sujet de jeter un œil à l' article qui combine TDL et apprentissage en profondeur.

En gros, vous devrez faire jouer le moteur les uns contre les autres. Enregistrez l'évaluation mini-max pour chaque position. À la fin du jeu, vous obtiendrez une récompense, qui est {0,1, -1} pour les échecs. Ensuite, vous devrez ajuster vos paramètres avec:

entrez la description de l'image ici

Cette équation nous dit que nous devons ajuster les pondérations en fonction des différences temporelles, pondérées par la mesure dans laquelle vous devez le faire. Si vous avez une évaluation parfaite, votre différence temporelle sera toujours nulle, vous n'aurez donc pas besoin de faire d'ajustement.

Ensuite, vous devrez utiliser les nouveaux paramètres pour jouer à un nouveau jeu. Se répète jusqu'à autant de jeux que vous pouvez vous le permettre ou lorsque vous pensez qu'il converge.

Quelques remarques:

  1. Le papier que je cite applique un facteur de remise. C'est fait pour l'algorithme de backproportion pour le réseau neuronal. Vous n'en avez pas besoin.
  2. Vous devrez expérimenter le taux d'apprentissage optimal (alpha dans l'équation). Trop grand rendra votre apprentissage instable, trop peu mettra plus de temps à converger. J'ai vu des gens utiliser 0.70. Le papier que je cite utilise 1.0.

Bonjour, j'adore votre réponse, mais pourriez-vous s'il vous plaît corriger le lien vers le document?
padura

@padura Fixed. Veuillez lire. C'était une bonne lecture pour la science des données.
HelloWorld

(+1) Excellente réponse. J'ai aussi adoré le journal :)
Dawny33

C'est un excellent article, dommage que je ne le savais pas au moment où je travaillais sur mon propre moteur d'échecs;) Je me demande si nous pouvons nous améliorer en combinant avec cette technique: bjmc.lu.lv/fileadmin/user_upload/lu_portal/ projekti / bjmc /…
padura

2

Une première remarque, vous devriez regarder «Wargames» pour savoir dans quoi vous vous embarquez.

Ce que vous voulez, c'est f (p) de telle sorte que f (p) soit aussi proche que possible de la force de position.

Une solution très simple utilisant l'algorithme génétique serait de configurer 10000 joueurs avec des poids différents et de voir lequel gagne. Gardez ensuite le poids des 1000 premiers gagnants, copiez-les 10 fois, modifiez-les légèrement pour explorer l'espace de poids, puis relancez la simulation. C'est GA standard, étant donné une forme fonctionnelle, quels sont les meilleurs coefficients pour cela.

Une autre solution consiste à extraire les positions, vous avez donc une table '' (matériel, sécurité royale, mobilité, structure de pion, pièces piégées) -> qualité de la position '' où la qualité de la position est un facteur objectif (résultat gagnant / perdant calculé à l'aide des simulations ci-dessus ou correspondances connues, profondeur de l'arbre disponible, nombre de mouvements sous l'arbre où l'un des 5 facteurs s'améliore. Vous pouvez ensuite essayer différentes formes fonctionnelles pour votre f (p), régression, svm.


Cela n'a aucun sens.
HelloWorld
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.