Ich suche eine Schach-Engine, die eine normale API bietet, die ich mit einer höheren Programmiersprache wie C # oder Python verwenden kann. Ich habe die Liste der Führungskräfte (Houdini, Komodo, Stockfish und Rybka) durchgesehen und konnte keine Anzeichen dafür finden, dass diese Engines API bereitstellen (was mich überraschte und darauf hinwies, dass mir etwas fehlt).
Um weniger vage zu sein, brauche ich Folgendes von dieser API:
- in der Lage sein, ein bestimmtes Spiel in die Engine zu laden
- in der Lage sein, die Position des Spiels zu bewerten
- in der Lage sein, sich zu bewegen
Kennt jemand eine Engine, die eine klare API für ihre Funktionen bietet?
engines
programming
Salvador Dali
quelle
quelle
Antworten:
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:
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.
quelle
standard
Werte.Ich habe auf "chess engine api" gegoogelt, aber keine echten APIs gesehen. Wie in den Kommentaren Ihrer Frage vorgeschlagen, würde ich mit UCI gehen. Auf diese Weise kommunizieren GUIs auch mit Schach-Engines.
Wenn Sie wirklich ein Hardcore-Programmierer sind, können Sie sich jederzeit die Open-Source-Engine Stockfish ansehen. Es könnte sehr gut sein, dass eine Art API darin eingebaut ist, oder Sie könnten einen Klon erstellen und Ihre eigene API dafür erstellen.
http://stockfishchess.org/
quelle
Python-Schach bietet eine nützliche API und unterstützt anscheinend UCI:
http://python-chess.readthedocs.io/en/v0.15.3/uci.html?highlight=engine
Der obige Link gibt ein Beispiel für "Stockfisch".
quelle
Batch First ist eine in Python geschriebene JIT-kompilierte Schach-Engine, die mit Numba kompiliert wurde und eine einfache C ++ - Schnittstelle und eine noch einfachere Python-Schnittstelle ermöglicht.
Während Batch First selbst eine Engine ist, die keine API ist, verwendet es stark das Python-Chess- Paket, das eine großartige API ist, und verlässt sich darauf .
Die JIT-Kompilierung von Batch First und die Verwendung von NumPy-Arrays zur Darstellung von Boards ermöglichen eine praktischere Python-Schnittstelle (mindestens eine Größenordnung schneller) für die tatsächliche Verwendung in einer Schachengine.
Der Kern der Engine ist ein Null-Fenster-k-best-first-Suchalgorithmus, der zur Bewertung von ANNs in Stapeln verwendet wird.
Vollständige Offenlegung, ich bin der Autor der Batch First Engine.
quelle
Hier gibt es eine Portversion von Stockfish in .Net: https://github.com/bpfliegel/Portfish
Um diese Engine zu verwenden (sobald sie kompiliert ist), benötigen Sie eine grafische Benutzeroberfläche wie Arena http://wwww.playwitharena.com oder ScidVSPC http://scidvspc.sourceforge.net . Diese Anwendungen werden verwendet, um eine schöne Oberfläche bereitzustellen und es Ihnen zu ermöglichen, Spiele / Positionen zu laden, sie zu analysieren (ich bin mir ziemlich sicher, dass Sie ein Spiel auf pgn laden und es von einer Engine mit Kriterien wie "n Sekunden pro Zug" oder "analysieren" können). n Lagen pro Zug "), Streichhölzer zwischen Motoren usw.
In (fast) jeder Schachengine sollten Sie so etwas wie eine uci.cs- oder eine xboard.cs-Datei finden, die für diese Kommunikationsaufgabe festgeschrieben ist.
(Eine "Schach-Engine" ist ein Programm, das Schach spielen kann, aber keine grafische Oberfläche hat. Die Kommunikation mit Anwendungen wie Arena oder ScidVSPC erfolgt über die UCI- oder xboard-Protokolle. Die meisten Schachprogramme sind also so geschrieben Der Entwickler kann das GUI-Zeug vergessen und sich auf das "Gehirn" konzentrieren.
quelle