Wie andere bereits gesagt haben, ist UCI die gewünschte API. Die vollständigen Spezifikationen des Protokolls finden Sie hier (die Zip-Datei wird in eine Textdatei extrahiert): http://download.shredderchess.com/div/uci.zip
Es ist eigentlich sehr einfach und unkompliziert. Eine UCI-Engine muss über stdin, stdout und stderr auf Klartext antworten und antworten. Tatsächlich sollten Sie in der Lage sein, die ausführbare Binärdatei einer beliebigen UCI-Engine auf Ihrer Plattform zu starten und die UCI-Befehle manuell auszugeben.
UCI erleichtert Anweisungen von einer GUI oder einer anderen Engine, um die spezifische Engine anzuweisen, alles zu tun, was Sie möchten, einschließlich der Analyse einer bestimmten PGN-Datei (das Laden erfolgt über die GUI oder ein ähnliches Front-End, die Rohbewegungen werden dann in erweiterter algebraischer Form dem Motor zugeführt, z. B. wird e4 zu e2e4). Der zweite und dritte Punkt Ihrer Anforderungen sind Standard bei UCI, aber es liegt an jedem Motorenentwickler, sie zu unterstützen (angesichts der geringen Anforderungen sollten dies die meisten sein).
Hier ist ein Beispiel für UCI in Aktion in der Befehlszeile:
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$
Die Befehle, die ich ausgegeben habe, waren uci, isready und quit.
Um die UCI-Befehle zu verwenden, haben Sie im Wesentlichen zwei Hauptoptionen. Sie können eine vorhandene Schnittstelle (z. B. ChessX, Arena und eine Vielzahl anderer) verwenden oder Ihren eigenen Code schreiben, um Anweisungen an eine Engine oder eine Gruppe von Engines zu erteilen. Ich glaube, es gibt möglicherweise bereits Python-Wrapper für den Zugriff auf UCI-Engines, aber ich muss dies noch einmal überprüfen. Es gibt definitiv Python-Schach (Import-Schach) und Pychess (Import-Pychess), ich kann mich nur nicht an den Umfang ihrer Funktionen erinnern. Ich kann mich nicht erinnern, wo Pychess lauert (wahrscheinlich Github oder Google Code), aber Python-Chess kann mit Pip installiert werden.