Est-il difficile de mettre en place un moteur d’échecs?

Je me demande comment il serait difficile de mettre en place un moteur d’échecs . Existe-t-il déjà des implémentations open-source?

Il semble que vous ayez besoin d’une fonction de notation pour une constellation de cartes donnée et d’une manière très rapide d’explorer plusieurs futures constellations de cartes. Explorer tous les mouvements futurs possibles est bien sûr impossible, alors on pourrait suivre avidement les mouvements les plus prometteurs, ou utiliser des techniques approximatives comme le recuit simulé pour suivre probabiliste les mouvements probables.

Pensez-vous que cela soit dans le cadre d’un projet d’étudiants en apprentissage automatique – en supposant qu’il y ait une implémentation open source que les étudiants pourraient utiliser, les choses de base comme retourner les mouvements suivants possibles pour une figure donnée? Probablement trop difficile?

Ce serait un projet amusant de faire travailler différentes équipes sur des moteurs d’échecs et de les laisser jouer les unes contre les autres…

J’ai passé la dernière année à construire mon propre moteur d’échecs en C #. Ce n’était pas si difficile. Au cours de mon travail, j’ai commis des erreurs, j’ai constaté que les informations sur Internet n’étaient tout simplement pas présentées clairement, et qu’une grande partie était simplement copiée depuis d’autres sites.

Afin de faciliter la tâche de quelqu’un d’autre dans ce processus, j’ai documenté le développement de mon moteur d’échecs et posté une grande partie du code source sur mon blog:

http://www.chessbin.com

J’ai même créé un kit de développement de jeu d’échecs qui vous aidera à développer votre propre moteur d’échecs, qui contient:

  1. Tout le code nécessaire pour représenter un échiquier et des pièces d’échecs
  2. Code relatif à la validation du mouvement des pièces d’échecs
  3. Interface utilisateur graphique qui affiche la position des échecs et vous permet de déplacer des pièces sur le tableau

Mon site est essentiellement dédié aux personnes comme vous. les gens qui veulent commencer à construire leur propre moteur d’échecs.

Oui, cela entre définitivement dans le cadre d’un projet étudiant. Voici quelques liens de mes archives pour vous aider à démarrer:

  • Ceci est un wiki utile de programmation d’échecs .
  • Ceci est une introduction simple à la programmation des échecs.
  • Ceci est une introduction plus avancée .
  • Ceci est une bonne parsing de MTD , un algorithme de recherche sophistiqué.
  • C’est un bon guide pour la validation de la génération de mouvement .
  • Cela décrit l’ architecture de base d’un programme d’échecs .
  • C’est beaucoup de bonnes informations sur le programme d’échecs Dark Thought .
  • Ce sont plus de notes sur la programmation des échecs .
  • Une introduction raisonnable aux bitboards tournés .
  • Une introduction raisonnable aux bitboards magiques .
  • Voici un ancien rapport de 2 étudiants qui ont écrit un programme d’échecs .
  • Enfin, voici Wikipedia sur les échecs informatiques .

Crafty est l’un des meilleurs moteurs d’échecs et de source complètement ouverte. Cependant, je vous découragerais de l’utiliser pour un projet étudiant écrit en C, très complexe et très difficile à comprendre car il est hautement optimisé.

À des fins éducatives, je recommanderais de consulter le site d’Adam Berents où il décrit le processus qu’il a suivi lorsqu’il a implémenté un moteur d’échecs en C #. Le code source est également disponible bien sûr. C’est un excellent sharepoint départ, à mon avis.

Je ne peux pas répondre à votre question, mais je peux répondre à votre dernier commentaire

“Ce serait un projet amusant d’avoir des équipes différentes travaillant sur des moteurs d’échecs et de les laisser jouer les unes contre les autres …”

Ceci est déjà fait sur le serveur d’échecs FICS . Je vous suggère de vous connecter (a besoin de telnet) et de consulter la documentation, vous pourrez probablement entrer en contact avec des personnes capables de vous donner des conseils spécifiques sur leurs échecs.

Un moteur d’échecs raisonnable sur les PC modernes est certainement réalisable, surtout si vous êtes assez vieux pour vous rappeler que de nombreux programmes d’échecs utilisaient seulement quelques K de mémoire sur des machines à 1 et 2 MHz 8 bits qui pouvaient très bien jouer. Vous pouvez sortir un moteur d’échecs dans un langage interprété de nos jours et battre le meilleur programmeur 6502 ou Z80 en codant les choses les plus rapides.

J’ai travaillé avec Dan Spracklen, qui a réalisé l’original Sargon en 1978 avec sa femme Kathleen. Le frère de Kathleen a fait le portage chez Apple II et j’ai travaillé avec lui et avec son fils. (Au moment où je travaillais avec ces gars-là, le secteur des échecs pour le consommateur était terminé. Je me souviens d’un gars qui a sorti des jeux Atari ST et Amiga Chess et il n’y avait vraiment pas beaucoup de marché pour eux à ce moment-là.)

” Computer Gamesmanship ” est une formidable introduction à la programmation d’échecs, comme l’ont fait les amateurs en 1983. C’est toujours un plaisir à lire. Couvre les bonnes choses: alpha-beta, minimax, etc.

C’est un bon livre que vous pouvez commencer là-bas et en apprendre davantage sur les progrès réalisés depuis.

alt text http://soffr.miximages.com/machine-learning/ef2de893e7a081414e106110.L._AA240_.jpg

Il est difficile d’en faire un bon, mais probablement à un niveau suffisant pour un projet d’études supérieures (quand j’ai pris mon compteur en informatique, un de mes amis a écrit un moteur d’échecs pour sa thèse de fin d’études).

Et oui, il existe des logiciels Open Source, le principal concurrent étant GNU Chess , qui est très respecté.

Chaque année, dans mon université, le cours d’introduction à l’IA exige que les étudiants créent un programme d’échecs à partir de zéro, avec un article, et que les étudiants aient suffisamment de connaissances pour le faire. Pour nous, le projet peut être réalisé seul ou avec un autre (il est évident que l’on s’attend à un meilleur programme s’il est réalisé avec un partenaire, tel qu’un pli plus profond, etc.). Étant donné que le cours d’infographie est également un cours de 3ème année, les étudiants sont autorisés à combiner le projet final avec le projet final du cours d’IA.

Comme je suis en troisième année et que je prends les deux cours (qui se sont terminés au premier semestre), je me suis associé à un ami qui suit également les deux cours et nous travaillons au programme depuis la fin de notre cours. examens (qui se sont déroulés vers le 21 décembre) et le 11 janvier.

C’est complètement faisable en un mois (surtout en tant que projet de troisième cycle). Nous faisons un programme d’échecs en 3D, cela nécessite donc plus de travail qu’un simple moteur d’échecs. Les parties les plus difficiles consisteront à choisir une représentation du conseil, à mettre en œuvre toutes les règles (en passant, castling, promotion, etc.), à créer une fonction heuristique et l’arborescence du jeu (qui se fait généralement avec l’élagage alpha-bêta).

Voici le site que nous utilisons pour documenter les progrès, puis héberger le code et le papier une fois que nous avons terminé (c’est un peu vide en ce moment). http://sites.google.com/site/chessatbrock/

Cela dépend du niveau de force que vous ciblez et de vos compétences en programmation. En supposant que vous soyez un programmeur expérimenté , voici mon avis (je connais beaucoup de moteurs, mais jamais un code):

* Un moteur très simple, capable de battre un débutant / amateur (ELO 1200-1600): beaucoup de code, mais facile.

* Un moteur qui peut battre un “joueur de club” (ELO 1800-2000): il commence à être difficile, vous aurez besoin de livres d’ouverture, d’optimisations et d’une IA solide

* Un moteur qui peut battre un maître: difficile, vous aurez besoin de quelques années d’expérience

* Un moteur haut de gamme (comme Rybka, Houdini, Stockfish, Hiarcs) qui peut battre tout être humain sur terre 99% du temps: c’est un effort énorme, vous aurez besoin de beaucoup de patience et d’années d’expérience.

C’est comme ça que je le vois!

Vous devez générer tous les mouvements vaild pour l’état donné. Ensuite, pour chaque possibilité, vous devriez vérifier les mouvements possibles de l’adversaire. S’il y en a au moins un qui aggrave votre position, vous ne devriez pas suivre cette twig. Pour ce faire, vous avez besoin d’une sorte de notation pour déterminer votre performance. Les échecs ont déjà des règles sur quelle unité vaut combien de points. Il suffit de regarder en avant seulement quelques étapes comme celle-ci. Battre le programme sera toujours difficile.

C’est loin d’être parfait: les vrais joueurs peuvent sacrifier certaines unités pour atteindre des objectives à long terme. Cet algorithme ne le fera pas.

Nous avons fait une mancala AI suivie d’une IA d’échecs en algorithmes et structures de données (deuxième année CS).

Cependant, le professeur a fourni de gros morceaux de moteur d’échecs, et nous avons dû faire des choses comme améliorer la fonction de décision, mettre en place un échec, etc.

Tout dépend du but que vous fixez à propos de l’IA du jeu! si c’est un jeu à 2 joueurs .. facile! Mais l’IA est assez difficile … D’accord, l’open source bien connu est GNU Chess!

Quelques algorithmes: http://www.vclcomponents.com/s/0__/source_code_genetic_algorithm_chess
Voici un wiki de programmation d’échecs !

Dans mon cours de premier cycle en IA, nous avons consacré un demi-semestre à la création de divers moteurs d’échecs et à les tester en utilisant XBoard ou WinBoard. Ensuite, à la fin du semestre, nous avons eu un tournoi où les moteurs d’échecs de l’étudiant étaient en compétition sur XBoard. Dans l’ensemble, cela a plutôt bien fonctionné.

L’interfaçage à XBoard est assez facile si je me souviens bien. Voici quelques liens.

http://www.gnu.org/software/xboard/

interface pour XBoard

http://www.tim-mann.org/xboard/engine-intf.html

Je ne suis pas sûr que cela vous fournisse tout ce que vous voulez, je pense que nos moteurs d’échecs devaient créer leurs propres représentations de cartes et proposer des mouvements par eux-mêmes, mais au moins cela vous donne une carte graphique GUI.

C’est probablement trop simple, mais néanmoins, des leçons intéressantes à tirer: je vous présente le jeu d’échecs ZX81