Est-ce difficile de mettre en œuvre un moteur d'Échecs? [fermé]
Je me demande à quel point il serait difficile d'implémenter un moteur d'Échecs . Existe-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'un moyen très rapide d'explorer plusieurs futures constellations de cartes probables. Explorer tous les mouvements futurs possibles est bien sûr impossible, donc on pourrait suivre avidement les mouvements les plus prometteurs, ou utiliser des techniques approximatives comme recuit simulé pour suivre probable se déplace de manière probabiliste.
Pensez-vous que c'est dans le cadre d'un projet d'étudiant diplômé machine learning - en supposant qu'il y ait une implémentation open-source que les étudiants pourraient utiliser, Cela fait les choses de base comme retourner les prochains mouvements possibles pour un chiffre donné? Probablement trop dur?
Ce serait un projet amusant de faire travailler différentes équipes sur des moteurs d'échecs et de les laisser jouer les uns contre les autres ...
13 réponses
J'ai passé l'année dernière à construire mon propre moteur d'échecs en C#. Il n'était pas difficile. Au cours de mon travail, j'ai fait des erreurs, j'ai constaté que les informations sur internet n'étaient tout simplement pas présentées clairement, et une grande partie était simplement copiée à partir d'autres sites.
Afin de faciliter la vie de quelqu'un d'autre en passant par ce processus, j'ai documenté le développement de mon moteur d'échecs et posté une grande partie du code source sur mon blog:
J'ai même créé un Kit de développement de jeu D'Échecs qui vous permettra de commencer à développer votre propre moteur d'échecs, qui contient:
- Tout le code nécessaire pour représenter un échiquier et des pièces d'échecs
- Code lié à la validation du mouvement des pièces d'Échecs
- Interface utilisateur graphique qui affiche la position des échecs et vous permet de déplacer des pièces autour du plateau
Mon site est fondamentalement dédié pour les gens comme vous; les gens qui veulent commencer à construire leur propre moteur d'Échecs.
Oui, c'est certainement dans le cadre d'un projet étudiant. Voici quelques liens de mon archive pour vous aider à démarrer:
- c'est un wiki utilede programmation d'Échecs .
- Ceci est une introduction simple à la programmation d'Échecs.
- Ceci est une introduction plus avancée .
- Ceci est une bonne analyse de MTD , un algorithme de recherche sophistiqué.
- C'est un bon guide pour validation de déplacer génération.
- Ceci 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 vieux rapport de 2 élèves qui ont écrit un programme d'échecs.
- enfin, voici la prise de Wikipédia sur les échecs informatiques .
Astucieux est l'un des principaux moteurs d'échecs et complètement open source. Cependant, je vous découragerais de l'utiliser pour un projet étudiant, il est écrit en C, très complexe et très difficile à comprendre car il est hautement optimisé.
À des fins éducatives, je recommande de jeter un oeil à Adam Berents site où il décrit le processus qu'il a traversé quand il a implémenté un moteur d'échecs en C#. Le code source est également disponible bien sûr. C'est un excellent point de départ pour partir, à 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 différentes équipes travaillent sur les moteurs d'Échecs et puis laissez les jouer contre chacun autre ... "
C'est déjà fait sur FICS serveur d'échecs. Je vous suggère de vous y connecter (a besoin de telnet) et de vérifier la documentation, vous serez probablement en mesure d'entrer en contact avec des personnes capables de vous donner des conseils spécifiques sur leurs échiquiers
Un moteur d'Échecs raisonnable sur les PC modernes est certainement faisable, surtout si vous êtes assez vieux pour vous rappeler qu'il y avait beaucoup de programmes D'échecs qui utilisaient seulement quelques K de mémoire sur les machines 8 bits 1 et 2 MHz qui pouvaient jouer assez bien. Vous pouvez sortir un moteur d'échecs dans un langage interprété de nos jours et battre le pantalon d'un programmeur 6502 ou Z80 supérieur codant ses trucs les plus rapides.
Je suis arrivé à travailler avec Dan Spracklen, qui a fait l'original Sargon en 1978 avec sa femme Kathleen. Le frère de Kathleen a fait le port D'Apple II, et j'ai travaillé avec lui et avec son fils. (À l'époque, je travaillais avec ces gars-là, l'entreprise d'échecs pour le consommateur-profit a été fait. Je me souviens d'un gars qui a sorti des jeux D'Échecs Atari ST et Amiga 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 les amateurs l'ont réalisée en 1983. C'est toujours un plaisir à lire. Couvre les bonnes choses: alpha-bêta, minimax, etc.
C'est un livre assez bon pour que vous puissiez commencer là-bas et ensuite en apprendre davantage sur les progrès réalisés depuis.
Faire un bon est difficile, mais probablement à peu près au bon niveau pour un projet d'études supérieures (quand j'ai pris mon batchelor en informatique, un de mes amis a écrit un moteur d'échecs pour sa thèse de fin d'année).
Et oui il y en a des Open Source, le principal concurrent étant GNU Chess , ce qui est très respecté.
Chaque année à mon université, le cours D'introduction à L'IA (cours de 3e année) oblige les étudiants à créer un programme d'échecs à partir de zéro avec un papier, et nous avons couvert un chapitre sur la recherche contradictoire dans la conférence afin que les étudiants aient suffisamment de connaissances pour le faire. Pour nous, le projet peut être fait seul ou avec un autre (s'attendre évidemment à un meilleur programme s'il est fait avec un partenaire,comme deeper ply, etc.). Parce que le cours D'infographie est aussi un cours de 3ème année, les étudiants sont autorisés à combiner le projet final de celui - ci avec le projet final du cours D'IA.
Comme je suis dans ma 3ème année et que je prends les deux cours (qui se sont maintenant terminés avec le premier semestre), j'ai fait équipe avec un ami qui est aussi dans les deux cours et nous travaillons sur le programme depuis la fin de nos examens (qui était autour de décembre. 21) et il est dû le Jan. 11.
C'est complètement faisable dans un mois (surtout en tant que projet diplômé). Nous faisons un programme d'échecs 3d ainsi, il nécessite plus de travail que juste un moteur d'échecs, bien sûr. Les parties les plus difficiles seront de décider d'une représentation au Conseil d'administration, de mettre en œuvre toutes les règles (en passant, Roque, promotion, etc.), la création d'une fonction heuristique, et l'arbre de jeu (qui se fait généralement avec l'élagage alpha-bêta).
Voici le site que nous utilisons pour documenter la progression, et plus tard 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 êtes un programmeur expérimenté , Voici mon avis (je connais beaucoup de moteurs, mais jamais codé):
* un moteur très simple, qui peut 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): ça commence à devenir dur, vous aurez besoin de ouverture de livres, optimisations et une IA solide
* un moteur qui peut battre un maître: dur, vous aurez besoin de quelques années d'expérience
* un moteur supérieur (comme Rybka, Houdini, Stockfish, Hiarcs), qui peut battre n'importe quel ê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.
Voilà comment 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 adversaires des coups. S'il y en a au moins un qui aggrave votre position, vous ne devriez pas suivre cette branche. Pour ce faire, vous avez besoin d'une sorte de notation pour déterminer comment vous faites. Les échecs ont déjà quelques 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 bien sûr loin d'être parfait: les vrais joueurs peuvent sacrifier certaines unités pour atteindre des objectifs à long terme. Cet algorithme ne le fera pas.
Nous avons fait une IA Mancala 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 du moteur d'échecs, et nous avons dû faire des choses comme améliorer la fonction de décision, mettre en œuvre checkmate, et d'autres choses.
Tout dépend de l'objectif que vous fixez sur l'IA du jeu !
si c'est une partie à 2 joueurs.. facile ! Mais l'IA est assez dur ...Droit, le bien connu open source 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 D'IA de premier cycle, nous avons passé un demi-semestre à créer 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 ont rivalisé les uns avec les autres dans XBoard. Dans l'ensemble il fonctionne plutôt bien.
L'interface avec 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 si cela vous donne tout ce que vous voulez, je pense que nos moteurs d'échecs ont dû créer leurs propres représentations de tableau et proposer des mouvements par eux-mêmes,mais au moins il vous obtient un tableau graphique qui connaît les règles et a une interface graphique.
C'est probablement trop simple, mais quand même, des leçons intéressantes à apprendre: je vous présente le jeu D'Échecs ZX81