Quel paradigme utiliser pour écrire un moteur d'échecs?


9

Si vous deviez écrire un moteur de jeu d'échecs, quel paradigme de programmation utiliseriez-vous (POO, procédural, etc.) et pourquoi le choisiriez-vous? Par moteur d'échecs, je veux dire la partie d'un programme qui évalue le tableau actuel et décide du prochain coup de l'ordinateur.

Je demande parce que je pensais que ce serait amusant d'écrire un moteur d'échecs. Ensuite, il m'est venu à l'esprit que je pouvais l'utiliser comme un projet d'apprentissage de la programmation fonctionnelle. Ensuite, il m'est venu à l'esprit que certains problèmes ne sont pas bien adaptés au paradigme fonctionnel. Ensuite, il m'est venu à l'esprit que cela pourrait être un bon sujet de discussion.


1
Cela revient à écrire un compilateur C à partir de zéro. Je ne réinventerais pas la roue. J'étudierais d'abord celles existantes.
Job

10
@Job: Mon objectif est le processus plutôt que le résultat. Même si je me retrouve avec un très mauvais moteur, je pense qu'il pourrait être utile d'analyser le problème et de développer un moyen de l'attaquer, surtout si j'ai appris de nouvelles méthodes de programmation dans le processus.
percez le

1
Bonne chance. Aucun véritable employeur ne vous demandera jamais d'en développer un à partir de zéro, mais lors d'un entretien, il pourrait vous demander comment vous pourriez attaquer le problème.
Job

6
@Job une grande partie de la vie de programmation consiste à coder les choses non pas parce qu'elles en ont un besoin certain, mais parce que vous le pouvez.

1
@Mark, que diriez-vous d'embrasser la vie;) = voyage, langues, théâtre, poésie, plein air, etc.? J'aime la programmation, mais quand je ne le fais pas en soi, j'ai 1000 autres choses à faire.
Job

Réponses:


7

L'évaluation n'est pas un problème parallélisable pour autant que je sache, mais l'évaluation de différentes chaînes l'est, donc je l'écrirais définitivement pour utiliser plusieurs cœurs et le multithreading.

Que vous alliez fonctionnel ou semi-fonctionnel est une question de goût. Personnellement, j'irais en POO et utiliserais le support pour la programmation fonctionnelle et la parallélisation qui existe par exemple en C #

Sur un sidenote, si je devais écrire un moteur d'échecs, j'essaierais d'en faire un qui puisse vraiment "penser" aux échecs. L'utilisation de l'évaluation du conseil d'administration pour forcer toutes les combinaisons possibles a été faite à mort et extrêmement bien, mais il n'y a pas eu beaucoup de progrès dans la création d'un moteur d'échecs plus réfléchi / flou. Ce serait un défi! :)

Trouvez des jeux avec un jeu de position vraiment délicat et des mouvements forts (ils sont marqués! Ou !!) et utilisez-les pour entraîner et tester votre moteur.


2

Je suppose que cela dépend de vos objectifs, que je considère strictement didactiques. Si vous essayez d'écrire un produit compétitif, vous voudriez une efficacité maximale dans les évaluateurs de niveau le plus bas. Beaucoup d'opportunités pour le parallélisme au niveau des bits ici. Beaucoup de possibilités pour les tables de hachage. Aussi des opportunités d'exploiter le parallélisme. Ensuite, aux niveaux supérieurs, vous voulez probablement un système bon pour l'IA, ce qui signifie probablement une langue de programmation fonctionnelle. Évidemment, vous ne voulez pas faire toutes ces choses, en choisir une ou deux, et vous contenter du fait que votre projet ne sera pas compétitif avec les meilleurs programmes.


2

J'ai choisi le paradigme OOP dans mon moteur d'échecs nommé The Turk . La première version de mon moteur d'échecs a été écrite plus procédurale que OOP, puis j'ai trouvé si difficile d'améliorer mon moteur d'échecs en raison de longs blocs de code et d'une mauvaise conception.

Cela dépend de ce que vous voulez réaliser lors de l'écriture du moteur d'échecs.Si vous voulez créer un moteur d'échecs trop fort, il n'est même pas possible de le faire dans les langages POO en raison des liaisons tardives lentes. Si vous voulez simplement apprendre la programmation et aussi vous amuser en écrivant le moteur d'échecs, les langages gérés et OOP seront vos amis. Je peux vous suggérer de choisir C # car il est également possible d'écrire le moteur d'échecs de manière plus procédurale avec lui.


Comment évalue-t-il ELO? Comparé à Crafty?

@ Thorbjørn Ravn Andersen - Crafty est l'un des meilleurs moteurs d'échecs open source écrit en C et par le Dr Robert M. Hyatt qui a passé sa vie dans la programmation d'échecs. Malheureusement, je n'ai pas testé la cote elo, car il y a encore beaucoup de choses à faire avant de tester la cote elo. Malheureusement, je n'ai pas de temps à consacrer à ce projet pour le moment. J'espère qu'un jour sera possible de continuer dessus.
Freshblood

ah désolé, je pensais que ça pouvait jouer. Ma faute.

@ Thorbjørn Ravn Andersen - J'ai publié quelques versions là-bas et le dernier ensemble de modifications du référentiel prêt à être construit. Je voulais juste dire que c'est assez faible pour le moment.
Freshblood

2

J'ai porté un programme d'échecs simple comme moyen d'apprendre la langue Forth. Cela s'est avéré être un bon choix pour ce problème très impératif, et j'ai beaucoup appris. La pile ouverte m'a permis d'implémenter la recherche alpha-bêta d'une manière unique, ce qui m'a donné une meilleure compréhension de l'algorithme.

On pourrait penser que la programmation fonctionnelle serait idéale pour les programmes d'échecs, car les algorithmes principaux (recherche alpha-bêta en profondeur, évaluation) sont récursifs et fonctionnellement stricts. Cependant, un programme d'échecs vit et meurt sur l'efficacité et aucune des cultures actuelles de langages fonctionnels n'a cet objectif. Les cent premiers moteurs de pointe utilisent tous des langages impératifs (principalement C / C ++, puis Delphi) afin d'avoir un contrôle maximal sur l'utilisation de la mémoire, le multithread, l'état global et la génération de code. Tous les langages fonctionnels utilisent l'allocation dynamique de mémoire pour les structures de données de base, ce qui est la mort pour un programme d'échecs.

J'aimerais toujours voir quelqu'un tenter de percer dans le top 100 des moteurs d'échecs en utilisant un langage fonctionnel.

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.