Moteur d'échecs avec API

11

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?

Salvador Dali
la source
2
UCI est une API qui obtient une commande via des commutateurs de ligne de commande et une entrée standard. Vous pouvez écrire un wrapper autour de ces commandes et appeler des commandes par fonctions.
masoud
Oui, l'UCI est exactement ce que vous recherchez. Tous ces programmes prennent en charge l'UCI, c'est ainsi qu'ils sont intégrés dans des programmes comme ChessBase.
dfan

Réponses:

6

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:

bash-3.2$ ./stockfish-5-64 
Stockfish 5 64 by Tord Romstad, Marco Costalba and Joona Kiiski
uci
id name Stockfish 5 64
id author Tord Romstad, Marco Costalba and Joona Kiiski

option name Write Debug Log type check default false
option name Write Search Log type check default false
option name Search Log Filename type string default SearchLog.txt
option name Book File type string default book.bin
option name Best Book Move type check default false
option name Contempt Factor type spin default 0 min -50 max 50
option name Mobility (Midgame) type spin default 100 min 0 max 200
option name Mobility (Endgame) type spin default 100 min 0 max 200
option name Pawn Structure (Midgame) type spin default 100 min 0 max 200
option name Pawn Structure (Endgame) type spin default 100 min 0 max 200
option name Passed Pawns (Midgame) type spin default 100 min 0 max 200
option name Passed Pawns (Endgame) type spin default 100 min 0 max 200
option name Space type spin default 100 min 0 max 200
option name Aggressiveness type spin default 100 min 0 max 200
option name Cowardice type spin default 100 min 0 max 200
option name Min Split Depth type spin default 0 min 0 max 12
option name Threads type spin default 1 min 1 max 128
option name Hash type spin default 32 min 1 max 16384
option name Clear Hash type button
option name Ponder type check default true
option name OwnBook type check default false
option name MultiPV type spin default 1 min 1 max 500
option name Skill Level type spin default 20 min 0 max 20
option name Emergency Move Horizon type spin default 40 min 0 max 50
option name Emergency Base Time type spin default 60 min 0 max 30000
option name Emergency Move Time type spin default 30 min 0 max 5000
option name Minimum Thinking Time type spin default 20 min 0 max 5000
option name Slow Mover type spin default 80 min 10 max 1000
option name UCI_Chess960 type check default false
uciok
isready
readyok
quit
bash-3.2$ 

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.

Ben
la source
L'UCI ne semble pas fournir d'API pour définir la valeur des pièces.
Snowcrash
Ce genre de chose devrait être programmé dans le moteur lui-même et les moteurs d'échecs utiliseront des valeurs standard. Vous auriez seulement besoin de le changer pour un autre jeu (par exemple, les échecs féériques) et vous aurez probablement besoin de faire beaucoup plus de changements que les valeurs des pièces.
Ben
Je ne suis pas d'accord. Il n'y a pas de standardvaleurs.
Snowcrash
Ensuite, vous auriez probablement besoin de bifurquer une base de code moteur pour la reconcevoir avec des valeurs variables à la place. Définissez ensuite une configuration distincte pour le moteur bifurqué et recompilé pour utiliser les nouvelles valeurs. Continuez ensuite à interagir via UCI comme d'habitude. Alternativement, regardez l'autre format de langage moteur utilisé par GNU Chess, j'en oublie les détails.
Ben
3

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/

Rafiek
la source
1
L'API pour parler à Stockfish est également UCI.
dfan
1
En effet, ça l'est. Mais utiliser l'UCI ou plonger dans le code dépendra de la façon dont le moteur sera utilisé et non de quoi. La question n'était pas claire à ce sujet.
Rafiek
Je pense avoir mentionné ce que je dois faire exactement avec le moteur. Chargez un PNG particulier et évaluez après chaque déplacement.
Salvador Dali
Il est parfaitement clair ce que vous voulez faire avec le moteur. La façon dont vous l'utiliserez est laissée ouverte. Dans quel cadre utiliserez-vous le moteur? Il se pourrait que l'UCI ne soit pas le moyen optimal de communiquer avec le moteur. J'ai proposé une autre option si l'UCI ne vous suffit pas.
Rafiek
Désolé, mais je ne comprends pas ce que tu veux dire par la façon dont je vais utiliser le moteur. Pouvez-vous clarifier cela?
Salvador Dali
1

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.

Sam Ragusa
la source
-1

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").

Emilio Díaz
la source