Welches Schnittstellenprotokoll soll ich für meine Schachengine implementieren?

8

Ich schreibe eine Schach-Engine in C ++ https://github.com/RomainGoussault/Deepov .

Ich weiß, dass es mehrere Schnittstellenprotokolle gibt (UCI, Winboard-Protokoll usw.), und ich weiß nicht, welche ich implementieren soll. Ich möchte eine, die:

  • ermöglicht meiner Engine, Online-Turniere zu spielen
  • hat mehrere GUI für Linux, Windows und iOS
  • hat eine Art Dokumentation

Vielen Dank

Romain
quelle
2
Warum Java? Glauben Sie mir, Sie werden es bereuen, wenn Sie Ihren Motor auf Geschwindigkeit optimieren.
Rafiek
Weil ich Java gut kenne. Ich weiß auch, dass Java im Vergleich zu anderen Sprachen sehr langsam ist. Ich kann es danach nach C ++ portieren.
Romain
Ok, aber ich empfehle so schnell wie möglich zu
portieren
1
Portierung nach C ++ erledigt;)
Romain

Antworten:

9

Es gibt nur zwei Protokolle - UCI und Winboard. Winboard ist ein altes Protokoll und wird heutzutage nicht mehr wirklich verwendet. Crafty ist die einzige große Engine, die das Winboard-Protokoll noch unterstützt, aber nur, weil die Engine auch sehr alt ist. UCI ist ein neueres Protokoll, das von Shredder entwickelt wurde und überall verwendet wird - Windows, Macs, Linux, Android, iOS usw. UCI ist wirklich das einzige Protokoll, das Sie in Betracht ziehen sollten.

  1. UCI wird überall unterstützt
  2. Jede andere Schach-GUI als xboard unterstützt UCI wie Chessbase, Scid, Arena usw. Sogar xboard kann über Polyglot eine Verbindung zu einer UCI-Engine herstellen.
  3. Die UCI-Dokumentation finden Sie unter http://wbec-ridderkerk.nl/html/UCIProtocol.html

Winboard ist mehr oder weniger veraltet, da das Protokoll komplizierter ist als die sauberere UCI. Winboard ist ein angegebenes Protokoll. Dies bedeutet, dass der Engine-Status von den vorherigen Iterationen abhängt, während UCI einfacher zu handhaben ist, da Sie nur Ihren aktuellen FEN oder eine Verschiebungsliste bereitstellen müssen.

SmallChess
quelle
1
Eine geringfügige Korrektur der oben genannten Schach-GUIs wie Arena verwendet FEN normalerweise nicht für die Kommunikation von Spielzuständen mit UCI. Sie verwenden zu Beginn des Spiels Bewegungslisten. Auf diese Weise kann die Engine die Fünfzig-Züge-Regel und andere Spielfunktionen, die häufig nicht ausreichend mit FEN kommuniziert werden, korrekt verarbeiten. Das Protokoll verwendet FEN jedoch zum Einrichten beliebiger Spielpositionen und Positionen, an denen die gesamte Zugliste unbekannt ist. Das Poster ist jedoch in allen anderen Einzelheiten korrekt.
Johnwbyrd
1
@ Johnwbyrd Ich habe meine Antwort bearbeitet. Vielen Dank.
SmallChess
1
FEN funktioniert gut für die Fünfzig-Zug-Regel. Es ist die dreifache Wiederholungsregel, die Probleme verursacht.
Kef Schecter
1

Ich denke nicht, dass es möglich ist, eine GUI oder Engine als separate Apps in iOS zu erstellen. iOS verhindert, dass eine App im Rahmen ihrer Sicherheitseinstellungen eine andere aufruft. Ein Engine-Autor muss die GUI schreiben und in die Engine integrieren, bevor er bei Apple die Genehmigung zur Veröffentlichung im App Store beantragen kann. Dies gilt möglicherweise auch für Windows RT. Android hat GUIs und Engines.

Neben UCI und CECP (Chess Engine Communication Protocol, dh Winboard / Xboard) verfügt Chessbase auch über ein eigenes proprietäres Protokoll. Viele der stärksten Engines verwenden UCI, während beginnende Programmierer häufig CECP verwenden.

Ein Passant
quelle
Dies gilt auch für Windows Phone.
SmallChess
-3

Die meisten GUI-Support-Engines in UCI oder Winboard, UCI wird heutzutage immer mehr zum Standard und zur Popularität. Wenn Sie jedoch möchten, dass Ihre Engine problemlos an eine beliebige GUI (unter Windows oder Linux) angeschlossen werden kann, sollten Sie über eine "exe" oder ausführbare Datei verfügen, auf die diese GUI-Programme verweisen können. Wenn Sie die Engine mit Java erstellen, bin ich mir nicht sicher, wie Sie diese in eine ausführbare Datei konvertieren können, die von der GUI verwendet wird. Gleiches gilt für Online-Turniere. Selbst wenn Sie vorhaben, eine Web-Service-Schnittstelle für Ihren Motor bereitzustellen, glaube ich nicht, dass dieser an Motorwettbewerben teilnehmen kann.

Keshav
quelle
Java kann nativ für .exe erstellt werden. Java muss nicht immer auf einer virtuellen Maschine ausgeführt werden.
SmallChess
Die EXE-Datei, über die Sie sprechen, ist eine Engine-Datei. Die Engine muss entweder UCI oder Winboard unterstützen. Andernfalls kann keine Schach-GUI daraus lesen. Ihre Aussage macht keinen Sinn.
SmallChess
Ich kann nur über deine Kommentare lachen. Versuchen Sie, ein Java-Programm ohne installierte JRE auszuführen.
Keshav
1
Wenn Sie etwas programmiert haben, werden Sie über sich selbst lachen. Java kann zu einem nativen Programm kompiliert werden.
SmallChess