Je recherche un moteur d'échecs qui fournit une API normale que je peux utiliser avec un langage de programmation de haut niveau comme C # ou python. J'ai parcouru la liste des leaders (Houdini, Komodo, Stockfish et Rybka) et je n'ai pu trouver aucun signe que ces moteurs fournissent une API (ce qui m'a surpris et suggéré que je manque quelque chose).
Pour être moins vague, voici ce dont j'ai besoin de cette API:
- pouvoir charger un jeu spécifique dans le moteur
- être capable d'évaluer la position du jeu
- pouvoir bouger
Alors, quelqu'un connaît-il un moteur qui fournit une API claire à ses fonctions?
engines
programming
Salvador Dali
la source
la source
Réponses:
Comme d'autres l'ont dit, l'UCI est l'API que vous souhaitez. Les spécifications complètes du protocole sont ici (le fichier zip est extrait dans un fichier texte): http://download.shredderchess.com/div/uci.zip
C'est en fait très simple et simple, un moteur UCI doit répondre et répondre en texte clair via stdin, stdout et stderr. En fait, vous devriez pouvoir lancer le binaire exécutable de n'importe quel moteur UCI sur votre plate-forme et émettre les commandes UCI manuellement.
UCI facilite les instructions d'une interface graphique ou d'un autre moteur pour dire au moteur spécifique de faire tout ce que vous voulez qu'il fasse, y compris d'analyser un fichier PGN spécifique (le chargement se fait via l'interface graphique ou un frontal similaire, les mouvements bruts sont ensuite introduits dans le moteur sous forme algébrique étendue, comme e4 devenant e2e4). Les deuxième et troisième points de vos exigences sont standard avec UCI, mais il appartient à chaque développeur de moteur de les prendre en charge (compte tenu de la légèreté de ces exigences, cela devrait être la plupart d'entre elles).
Voici un exemple d'UCI en action sur la ligne de commande:
Les commandes que j'ai lancées étaient uci, isready et quit.
Pour utiliser les commandes UCI, vous avez essentiellement deux choix principaux; vous pouvez utiliser une interface existante (par exemple ChessX, Arena et une foule d'autres) ou vous pouvez écrire votre propre code pour envoyer des instructions à un moteur ou à un groupe de moteurs. Je pense qu'il peut déjà y avoir des wrappers Python pour accéder aux moteurs UCI, mais je devrais vérifier. Il y a définitivement python-chess (import d'échecs) et pychess (import pychess), je ne me souviens juste pas de l'étendue de leurs fonctions. Je ne me souviens pas où se cache pychess (probablement github ou google code), mais python-chess peut être installé avec pip.
la source
standard
valeurs.J'ai googlé sur "chi engine api" mais je n'ai vu aucune vraie API. Comme suggéré dans les commentaires de votre question, j'irais avec l'UCI. C'est également la façon dont les GUI communiquent avec les moteurs d'échecs.
Si vous êtes vraiment un programmeur hardcore, vous pouvez toujours consulter le moteur open source Stockfish. Il pourrait très bien y avoir une sorte d'API intégrée, ou vous pouvez créer un clone et créer votre propre API pour cela.
http://stockfishchess.org/
la source
python-chess fournit une API utile et prend en charge UCI, apparemment:
http://python-chess.readthedocs.io/en/v0.15.3/uci.html?highlight=engine
Le lien ci-dessus donne un exemple de «stockfish».
la source
Batch First est un moteur d'échecs compilé JIT écrit en Python, compilé à l'aide de Numba, qui permettrait une interface C ++ facile et une interface Python encore plus facile.
Bien que Batch First lui-même soit un moteur et non une API, il utilise et s'appuie fortement sur le package Python-Chess , qui est une API géniale.
La compilation JIT de Batch First, et l'utilisation de tableaux NumPy pour représenter les cartes, permet une interface Python plus pratique (au moins un ordre de grandeur plus rapide) pour une utilisation réelle dans un moteur d'échecs.
Le cœur du moteur est un algorithme de recherche k-best-first à fenêtre zéro utilisé pour évaluer les ANN par lots.
Divulgation complète, je suis l'auteur du moteur Batch First.
la source
Voici une version portuaire de Stockfish dans .Net: https://github.com/bpfliegel/Portfish
Pour utiliser ce moteur (une fois qu'il est compilé), vous aurez besoin d'une interface graphique comme Arena http://wwww.playwitharena.com ou ScidVSPC http://scidvspc.sourceforge.net . Ces applications sont utilisées pour fournir une interface agréable et vous permettent de charger des jeux / positions, de les analyser (je suis sûr que vous pouvez charger un jeu sur pgn et l'analyser par un moteur avec des critères comme "n secondes par coup" ou " n plies per move "), exécuter des correspondances entre les moteurs, etc.
Dans (presque) chaque moteur d'échecs, vous devriez trouver quelque chose comme un fichier uci.cs ou xboard.cs qui est engagé dans cette tâche de communication.
(Un "moteur d'échecs" est un programme qui est capable de jouer aux échecs mais n'a pas d'interface graphique. La façon dont il communique avec des applications comme Arena ou ScidVSPC se fait par les protocoles UCI ou xboard. La plupart des programmes d'échecs sont écrits de cette façon, donc le développeur peut oublier les trucs de l'interface graphique et se concentrer sur le "cerveau").
la source