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.
Réponses:
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.
la source
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.
la source
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.
la source
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.
la source