Question

Je veux programmer un moteur d'échecs qui apprend à faire des bons coups et gagner contre d'autres joueurs. Je l'ai déjà codé une représentation du conseil d'échecs et une fonction qui sort tous les mouvements possibles. Donc, je ne ai besoin d'une fonction d'évaluation qui indique à quel point une situation donnée du conseil d'administration est. Par conséquent, je voudrais utiliser un réseau de neurones artificiels qui devrait alors évaluer une position donnée. La sortie doit être une valeur numérique. La valeur est plus élevée, meilleure est la position du joueur blanc.

Mon approche est de construire un réseau de 385 neurones: Il y a six pièces d'échecs uniques et 64 champs sur la carte. Ainsi, pour chaque domaine, nous prenons 6 neurones (1 pour chaque pièce). S'il y a une pièce blanche, la valeur d'entrée est 1. S'il y a une pièce noire, la valeur est -1. Et s'il n'y a pas de tout ce genre sur ce champ, la valeur est 0. En plus qu'il devrait y avoir 1 neurone pour le joueur de se déplacer. Si c'est le tour de blanc, la valeur d'entrée est 1 et si c'est le tour de noir, la valeur est -1.

Je pense que la configuration du réseau de neurones est tout à fait bonne. Mais la partie principale est manquante: Comment puis-je mettre en œuvre ce réseau de neurones dans un langage de codage (par exemple Delphi)? Je pense que les poids pour chaque neurone doivent être les mêmes au début. En fonction du résultat d'un match, les poids devraient alors être ajustés. Mais comment? Je pense que je devrais laisser deux joueurs d'ordinateur (à la fois en utilisant mon moteur) jouent les uns contre les autres. Si Blanc gagne, Noir obtient les commentaires que ses poids ne sont pas bonnes.

Alors, ce serait génial si vous pouviez me aider à la mise en œuvre du réseau de neurones dans un langage de codage (mieux serait Delphi, sinon pseudo-code). Merci d'avance!

Était-ce utile?

La solution

Been there, done that. Comme il n'y a pas de continuité dans votre problème (la valeur d'une position est pas étroitement liée à une autre position, avec seulement 1 changement de la valeur d'une entrée), il y a très peu de chances d'un NN fonctionnerait. Et il n'a jamais fait dans mes expériences.

Je préférerais voir un système de recuit simulé avec une heuristique ad hoc (dont il y a beaucoup là-bas) pour évaluer la valeur de la position ...

Cependant, si vous définissez sur l'utilisation d'un NN, est relativement facile à représenter. A NN générale est simplement un graphe, chaque noeud étant un neurone. Chaque neurone a une valeur d'activation en cours, et une formule de transition pour calculer la prochaine valeur d'activation, sur la base de valeurs d'entrée, à savoir les valeurs d'activation de tous les noeuds qui ont un lien vers elle.

A plus NN classique, soit avec une couche d'entrée, une couche de sortie, les neurones identiques pour chaque couche, et sans dépendance temporelle, peut donc être représenté par un ensemble de noeuds d'entrée, un réseau de noeuds de sortie, et un graphique chaînée de noeuds reliant ceux-ci. Chaque noeud possède une valeur d'activation en cours, et une liste de noeuds transmet à. Le calcul de la valeur de sortie met simplement les activations des neurones d'entrée pour les valeurs d'entrée, et l'itération à travers chaque couche subséquente à son tour, le calcul des valeurs d'activation de la couche précédente, en utilisant la formule de transition. Lorsque vous avez atteint la dernière couche (sortie), vous avez le résultat.

Autres conseils

Dans le cas de quelqu'un trouve au hasard sur cette page. Étant donné ce que nous savons maintenant, ce que l'OP propose est certainement possible. En fait nous avons réussi à le faire pour un jeu avec l'espace d'état beaucoup plus grand - Go ( https://deepmind.com/alpha -go ).

Je ne vois pas pourquoi vous ne pouvez pas avoir un réseau neuronal pour un évaluateur statique si vous le faites aussi quelques mini-préanalyse max classique avec la taille alpha-bêta. Beaucoup de moteurs d'échecs utilisent minimax avec un évaluateur statique Braindead qui ajoute que les morceaux ou quelque chose; il n'a pas d'importance tant si vous avez des niveaux suffisamment de Minimax. Je ne sais pas combien d'une amélioration du filet ferait mais il y a peu à perdre. La formation, il serait difficile cependant. Je suggère d'utiliser un moteur qui anticipe de nombreux mouvements (et prend charge de CPU, etc.) pour former l'évaluateur pour un moteur qui regarde vers l'avenir moins de mouvements. De cette façon, vous vous retrouvez avec un moteur qui ne prend pas autant de CPU (je l'espère).

Ce que vous devez former un ANN est soit quelque chose comme rétropropagation apprentissage ou une certaine forme de un algorithme génétique . Mais les échecs est un tel jeu complexe qu'il est unlikly que simple ANN apprendra à jouer -. Encore plus si le processus d'apprentissage est non supervisé

En outre, votre question ne dit rien sur le nombre de couches. Vous voulez utiliser 385 neurones d'entrée pour coder la situation actuelle. Mais comment voulez-vous de décider quoi faire? Sur neurone par champ? La plus haute gagne excitation? Mais il y a souvent plus d'un mouvement possible.

En outre, vous aurez besoin de plusieurs couches cachées -. Les fonctions qui peuvent être représentés avec une entrée et une couche de sortie sans couche cachée sont vraiment limités

Je ne veux pas vous empêcher d'essayer, mais les chances d'un succès implemenation et la formation au sein de dire une année ou une pratiquement nulle.

J'ai essayé de construire et former un ANN pour jouer Tic-tac-toe quand j'avais 16 ans environ ... et j'ai échoué. Je suggère d'essayer un tel jeu simple d'abord.

Le principal problème que je vois ici est une formation. Vous dites que vous voulez que votre ANN de prendre la position actuelle du conseil et d'évaluer à quel point il est pour un joueur. (Je suppose que vous prendrez tous les mouvements possibles pour un joueur, l'appliquer à l'état actuel du conseil, évaluer par l'ANN puis prendre celui avec la sortie la plus élevée - à savoir: l'escalade de la colline)

Vos options que je les vois sont:

  • Développer une fonction heuristique pour évaluer l'état du conseil d'administration et de former le réseau ce. Mais cela soulève la question de savoir pourquoi utiliser un ANN du tout, quand vous pouvez simplement utiliser votre heuristique.

  • Utilisez une mesure statistique comme « Combien de jeux ont été remportées par blanc ou noir à partir de cette configuration de la carte? », Qui vous donnera une valeur de remise en forme entre blanc ou noir. La difficulté est que la quantité de données de formation nécessaires à la taille de votre espace de problème.

Avec la deuxième option, vous pouvez toujours l'alimenter carte des séquences de jeux Grandmaster et espère qu'il y aura une couverture suffisante pour l'ANN pour développer une solution.

En raison de la complexité du problème que je voudrais jeter le plus grand réseau (par exemple: beaucoup de noeuds internes). À ce que je pouvais sans ralentir trop la formation

Il est possible, mais pas trivial par tout moyen.

https://erikbern.com/2014/11/ 29 / profond de l'apprentissage pour les échecs /

Pour former sa fonction d'évaluation, il a utilisé beaucoup de puissance de calcul pour le faire.

Pour résumer en général, vous pouvez aller à ce sujet comme suit. Votre fonction d'évaluation est un NN anticipatrice. Laissez les calculs de matrice conduisent à une sortie scalaire à quel point l'évalue des mouvement est. Le vecteur d'entrée pour le réseau est l'état de la carte représentée par l'ensemble des pièces sur le plateau de sorte dit pion blanc est égal à 1, chevalier blanc est 2 ... et de l'espace vide est 0. Une carte d'exemple vecteur d'entrée d'état est simplement une séquence de 0 -12. pour Cette évaluation peut être formé en utilisant des jeux de Grandmaster (disponible à une base de données fics par exemple) pour de nombreux jeux, ce qui minimise la perte entre ce que les paramètres actuels disent est la plus haute valeur et ce qui déplacent les grandmasters faites (qui devrait avoir la plus grande valeur). Bien sûr, cela suppose que les mouvements de Grandmaster sont corrects et optimale.

Je suis venu ici pour dire ce que Silas a dit. En utilisant un algorithme de minimax, vous pouvez vous attendre à être en mesure de regarder vers l'avenir se déplace N. En utilisant la taille alpha-bêta, vous pouvez étendre cette théorie à 2 * N se déplace, mais plus réaliste 3 * N / 4 se déplace. Les réseaux de neurones sont vraiment approprié ici.

Peut-être que pourrait être utilisé un algorithme génétique.

Votre algorithme d'entrée est son - toutes les positions, toutes les pièces et les deux joueurs sont pris en compte. Vous devrez peut-être une couche d'entrée pour chaque état passé du plateau de jeu, de sorte que les événements passés sont utilisés comme entrée à nouveau.

La couche de sortie doit (dans une certaine forme) donner la pièce à déplacer, et l'emplacement de se déplacer à.

Ecrire un algorithme génétique en utilisant un connectome qui contient tous les poids des neurones et des forces synaptiques, et commencer plusieurs pools de gènes séparés par un grand nombre de connectomes dans chaque.

Faites-les jouer les uns les autres, garder la meilleure poignée, croisement et muter les meilleurs connectomes pour repeupler la piscine.

Lire blondie24: http: // www. amazon.co.uk/Blondie24-Playing-Kaufmann-Artificial-Intelligence/dp/1558607838 .

Il traite de dames au lieu d'échecs, mais les principes sont les mêmes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top