Monte-Carlo de l'Arbre à la Recherche de l'UCT de mise en œuvre
Pouvez-vous m'expliquer comment construire l'arbre?
J'ai tout à fait compris comment les nœuds sont choisis, mais une belle explication serait vraiment m'aider à la mise en œuvre de cet algorithme. J'ai déjà un conseil représentant l'état de la partie, mais je ne sais pas (comprendre) comment générer l'arbre.
Quelqu'un peut-points-moi à bien commenté la mise en œuvre de l'algorithme (j'ai besoin de l'utiliser pour IA)? Ou mieux, des explications, des exemples?
Je n'ai pas trouvé beaucoup de ressources sur le net, cet algorithme est assez nouveau...
- Implémentation C++: github.com/AdamStelmaszczyk/gtsa la divulgation Complète: je suis l'auteur.
Vous devez vous connecter pour publier un commentaire.
Le meilleur moyen de générer de l'arbre est une série aléatoire de playouts. Le truc est d'être capable de trouver un équilibre entre l'exploration et de l'exploitation (c'est là que l'UCT est livré dans). Il y a quelques bons exemples de code et beaucoup de papier de recherche références ici : https://web.archive.org/web/20160308043415/http://mcts.ai:80/index.html
Quand j'ai implémenté l'algorithme, j'ai utilisé random playouts jusqu'à ce que j'ai touché un point de fin ou la résiliation de l'état. J'ai eu une statique de la fonction d'évaluation qui permettrait de calculer le gain à ce moment, le score de ce point est retournée en haut de l'arborescence. Chaque joueur ou équipe "" suppose que l'autre équipe va jouer le meilleur coup pour eux-mêmes, et le pire déplacer possible pour leur adversaire.
Je voudrais également vous recommandons de vérifier les papiers par Chaslot et sa thèse de doctorat, ainsi qu'une partie de la recherche qui fait référence à son travail (en fait, tous les SCTM de travail depuis).
Par exemple: 1 Joueur de la première mesure pourrait simuler 10 se déplace dans l'avenir, l'alternance entre le joueur 1 se déplace et le joueur 2 se déplace. Chaque fois que vous devez supposer que le joueur adverse va essayer de réduire votre score, tout en optimisant leur propre partition. Il y a tout un champ basé sur ce que la Théorie des jeux. Une fois que vous simuler à la fin des 10 jeux, vous itération de point de départ à nouveau (car il n'est point seulement en train de simuler un ensemble de décisions). Chacune de ces branches de l'arbre doit être marqué où le score est propagée haut de l'arbre et le score représente le meilleur possible récompense pour le joueur de faire la simulation en supposant que l'autre joueur est aussi de choisir les meilleurs coups pour eux-mêmes.
SCTM se compose de quatre étapes stratégiques, répété tant qu'il est temps de gauche. Les étapes sont comme suit.
Dans l'étape de sélection de l'arbre est parcouru de l'
nœud racine jusqu'à ce que nous atteignons un nœud E, où nous avons sélectionner une position qui n'est pas ajouté à l'arbre encore.
Ensuite, pendant le play-out étape coups sont joués dans l'auto-jouer jusqu'à la fin du jeu est atteint. Le résultat R de cette “simulé” le jeu est de +1 en cas de victoire pour le Noir (le premier joueur en LOA), 0 en cas d'égalité, et -1 en cas d'une victoire pour le Blanc.
Par la suite, dans l'expansion de l'étape d'enfants de E sont ajoutés à l'arbre.
Enfin, R est propagée le long du chemin de E à la racine le nœud dans le les pas. Lorsque le temps est écoulé, le coup joué par le programme est l'enfant de la racine avec la valeur la plus élevée.
(Cet exemple est tiré de ce livre - PDF
http://www.ru.is/faculty/yngvi/pdf/WinandsBS08.pdf
Voici quelques implémentations:
Une liste des bibliothèques et des jeux à l'aide de certains des SCTM implémentations
http://senseis.xmp.net/?MonteCarloTreeSearch
et un jeu indépendant open source UCT des SCTM de la bibliothèque appelée Fuego
http://fuego.sourceforge.net/fuego-doc-1.1/smartgame-doc/group__sguctgroup.html
De http://mcts.ai/code/index.html:
Java
Python
J'ai écrit celui-ci si vous êtes intéressé (e): https://github.com/avianey/mcts4j