APIを備えたチェスエンジン


11

C#やpythonなどの高水準プログラミング言語で使用できる通常のAPIを提供するチェスエンジンを探しています。私はリーダーのリスト(Houdini、Komodo、Stockfish、Rybka)を調べましたが、これらのエンジンがAPIを提供している兆候を見つけることができませんでした(これには驚いて、何かが足りないことを示唆しました)。

わかりやすくするために、このAPIに必要なものは次のとおりです。

  • 特定のゲームをエンジンにロードできる
  • ゲームの位置を評価できる
  • 動くことができる

それで、誰かがその機能に明確なAPIを提供するエンジンを知っていますか?


2
UCIは、コマンドラインスイッチと標準入力を介してコマンドを取得するAPIです。これらのコマンドのラッパーを記述し、関数によってコマンドを呼び出すことができます。
masoud 2013年

はい、UCIはまさにあなたが探しているものです。これらのプログラムはすべてUCIをサポートしています。UCIはChessBaseのようなプログラムに統合される方法です。
dfan 2013年

回答:


6

他の人が言ったように、UCIはあなたが望むAPIです。プロトコルの完全な仕様は次のとおりです(zipファイルはテキストファイルに抽出されます):http : //download.shredderchess.com/div/uci.zip

実際には非常に単純明快で、UCIエンジンはstdin、stdout、stderrを介してプレーンテキストで応答および応答する必要があります。実際、プラットフォーム上の任意のUCIエンジンの実行可能バイナリを起動し、UCIコマンドを手動で発行できるはずです。

UCIは、GUIまたは他のエンジンからの指示を容易にし、特定のエンジンに、特定のPGNファイルの分析(GUIまたは同様のフロントエンド、ロームーブによるロード)の分析など、実行したいことをすべて実行するように指示します次に、拡張代数形式でエンジンに供給されます(e4がe2e4になるなど)。要件の2番目と3番目のポイントはUCIの標準ですが、それらをサポートするかどうかは各エンジン開発者に任されています(これらの要件がどれだけ無駄がないかを考えると、ほとんどが要件です)。

コマンドラインで実行中のUCIの例を次に示します。

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$ 

私が出したコマンドはuci、isready、quitでした。

UCIコマンドを利用するには、基本的に2つの主要な選択肢があります。既存のインターフェース(ChessX、Arena、他のホストなど)を使用することも、独自のコードを記述してエンジンまたはエンジンのグループに命令を発行することもできます。UCIエンジンにアクセスするためのPythonラッパーはすでにあると思いますが、再確認する必要があります。間違いなくpython-chess(インポートチェス)とpychess(インポートチェス)がありますが、それらの機能の範囲を思い出せません。pychessが潜んでいる場所(おそらくgithubまたはgoogleコード)を思い出すことはできませんが、python-chessはpipでインストールできます。


UCIは、ピースの値を設定するためのAPIを提供していないようです。
Snowcrash 2016年

そのようなことはエンジン自体にプログラムされるべきであり、チェスエンジンは標準値を使用します。他のゲーム(フェアリーチェスなど)の場合のみ変更する必要があります。その場合は、ピースの値だけではなく、さらに多くの変更を行う必要があります。
ベン

同意しません。standard値はありません。
Snowcrash 2016年

次に、エンジンコードベースをフォークして、代わりに変数値で再設計する必要があります。次に、新しい値を使用するように、フォークおよび再コンパイルされたエンジンに個別の構成を設定します。次に、通常どおりUCIを介して対話を続けます。あるいは、GNU Chessが使用する他のエンジン言語フォーマットを見てください。ただし、詳細は忘れています。
ベン

3

私は「チェスエンジンapi」をググってみましたが、実際のAPIを見たことはありません。あなたの質問のコメントで示唆されているように、私はUCIに行きます。これは、GUIがチェスエンジンと通信する方法でもあります。

あなたが本当に筋金入りのプログラマーなら、いつでもオープンソースエンジンのストックフィッシュをチェックすることができます。なんらかのAPIが組み込まれている場合もあれば、クローンを作成して独自のAPIを作成する場合もあります。

http://stockfishchess.org/


1
Stockfishと通信するためのAPIもUCIです。
dfan 2013年

1
確かにそうです。しかし、UCIを使用するか、コードに飛び込むかは、エンジンがどのように使用されるかではなく、どのように使用されるかに依存します。その点についての質問は明確ではなかった。
Rafiek 2013年

エンジンについて何をする必要があるのか​​を説明したと思います。特定のPNGをロードし、移動するたびに評価します。
サルバドールダリ

エンジンで何をしたいかは完全に明らかです。あなたがそれをどのように使用するかは、公開されています。エンジンはどのような設定で使用しますか?UCIがエンジンと通信する最適な方法ではない可能性があります。UCIでは不十分な場合は、別のオプションを提案しました。
Rafiek 2013年

申し訳ありませんが、どうやってエンジンを使用するのかわかりません。これを明確にしていただけますか?
サルバドールダリ


1

Batch Firstは、Numbaを使用してコンパイルされた、Pythonで記述されたJITコンパイル済みチェスエンジンです。これにより、C ++とのインターフェースが容易になり、Pythonとのインターフェースがさらに簡単になります。

バッチファースト自体はAPIではなくエンジンですが、素晴らしいAPIであるPython-Chessパッケージを多用し、依存しています。

Batch FirstのJITコンパイル、およびボードを表すためのNumPy配列の使用により、チェスエンジンで実際に使用するためのより実用的なPythonインターフェイス(少なくとも1桁高速)が可能になります。

エンジンのコアは、バッチでANNを評価するために使用されるゼロウィンドウk-best-first検索アルゴリズムです。

完全な開示、私はBatch Firstエンジンの作者です。


-1

ここに.NetのStockfishのポートバージョンがありますhttps : //github.com/bpfliegel/Portfish

このエンジンを(コンパイルしたら)使用するには、Arena http://wwww.playwitharena.comまたはScidVSPC http://scidvspc.sourceforge.netのようなGUIを必要とします。これらのアプリケーションは、優れたインターフェースを提供し、ゲーム/ポジションをロードして分析できるようにするために使用されます(pgnでゲームをロードし、「n秒/移動」または「動きごとにnプライ」)、エンジン間のマッチの実行など

(ほぼ)すべてのチェスエンジンで、この通信タスクにコミットされているuci.csまたはxboard.csファイルのようなものが見つかります。

(「チェスエンジン」は、チェスをプレイできるがグラフィカルインターフェースがないプログラムです。アリーナやScidVSPCなどのアプリケーションと通信する方法は、UCIまたはxboardプロトコルです。ほとんどのチェスプログラムはこのように記述されているため、開発者はGUIのことを忘れて、「頭脳」に集中できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.