带有API的国际象棋引擎


11

我正在寻找一种提供标准API的象棋引擎,我可以将其与某些高级编程语言(例如C#或python)一起使用。我浏览了领导者列表(Houdini,Komodo,Stockfish和Rybka),但找不到任何迹象表明这些引擎提供了API(这让我感到惊讶,并暗示我缺少了一些东西)。

为了更加明确,我需要使用以下API:

  • 能够将特定的游戏加载到引擎中
  • 能够评估游戏的位置
  • 能够采取行动

那么,有谁知道一个为其功能提供清晰API的引擎?


2
UCI是一种API,可通过命令行开关和标准输入获取命令。您可以围绕这些命令编写包装器,然后通过函数调用命令。
masoud

是的,UCI正是您所需要的。所有这些程序都支持UCI,这就是它们如何集成到ChessBase等程序中的方式。
dfan 2013年

Answers:


6

正如其他人所说,UCI是您想要的API。该协议的完整规范在此处(zip文件提取为文本文件):http : //download.shredderchess.com/div/uci.zip

实际上,这非常简单明了,UCI引擎必须通过stdin,stdout和stderr以纯文本形式进行响应和回复。实际上,您应该能够在平台上启动任何UCI引擎的可执行二进制文件并手动发出UCI命令。

UCI方便了来自GUI或其他引擎的指令,以告诉特定引擎执行您想要执行的任何操作,包括分析特定的PGN文件(通过GUI或类似的前端进行加载,原始动作)然后将它们以扩展的代数形式(例如e4变成e2e4)送入引擎。需求的第二点和第三点是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命令,您基本上有两个主要选择:您可以使用现有的界面(例如ChessX,Arena和许多其他界面),也可以编写自己的代码来向一个引擎或一组引擎发出指令。我相信可能已经有用于访问UCI引擎的Python包装器,但是我需要仔细检查。肯定有python-chess(导入国际象棋)和pychess(导入pychess),我只是不记得它们的功能范围。我不记得pychess潜伏在哪里(可能是github或google代码),但是python-chess可以与pip一起安装。


UCI似乎没有提供用于设置作品价值的API。
Snowcrash

这种事情应该在引擎本身中编程,而象棋引擎将使用标准值。您只需要为其他游戏(例如,仙境象棋)进行更改,并且可能需要进行的更改不仅限于单件价值。
2016年

我不同意。没有standard价值。
Snowcrash

然后,您可能需要派生引擎代码库,以改为使用变量值对其进行重新设计。然后为分叉和重新编译的引擎设置单独的配置,以使用新值。然后继续照常通过UCI进行交互。或者,看看GNU Chess使用的其他引擎语言格式,尽管我忘记了它的细节。
2016年

3

我已经在“ chess engine api”上进行了谷歌搜索,但是没有看到任何真正的API。正如您对问题的评论所建议的那样,我将选择UCI。这也是GUI与国际象棋引擎通信的方式。

如果您真的是一名铁杆程序员,则可以随时查看开源引擎Stockfish。可能是其中内置了某种API,或者您可以制作一个克隆并为其构建自己的API。

http://stockfishchess.org/


1
与Stockfish交谈的API也是UCI。
dfan

1
的确是。但是使用UCI或深入研究代码将取决于引擎的使用方式,而不取决于用途。问题尚不清楚。
拉菲克

我想我提到了我到底需要对引擎做什么。加载特定的PNG并在每次移动后进行评估。
Salvador Dali

很明显,您想对引擎做什么。您将如何使用它尚未确定。您将在哪种设置下使用引擎?UCI可能不是与引擎通信的最佳方式。如果UCI不足以满足您的要求,我建议了另一种选择。
拉菲克

抱歉,但是我无法理解我将如何使用引擎。你能澄清一下吗?
萨尔瓦多·达利


1

Batch First是使用Numba编译的,用Python编写的JIT编译国际象棋引擎,它将允许简单的C ++接口和更简单的Python接口。

虽然Batch First本身是引擎而非API,但它大量使用并依赖于Python-Chess软件包,这是一个了不起的API。

Batch First的JIT编译,以及使用NumPy数组表示板子,为在国际象棋引擎中的实际使用提供了更实用的Python接口(至少快一个数量级)。

引擎的核心是零窗口k最佳优先搜索算法,用于批量评估ANN。

完全公开,我是Batch First引擎的作者。


-1

.Net中有Stockfish的端口版本:https : //github.com/bpfliegel/Portfish

要使用此引擎(一旦编译),您将需要创建一个GUI,例如Arena http://wwww.playwitharena.com或ScidVSPC http://scidvspc.sourceforge.net。这些应用程序用于提供一个不错的界面,并允许您加载游戏/位置,对其进行分析(我很确定您可以在pgn上加载游戏并由引擎根据“每移动n秒”或“每移动n层”),在引擎之间进行匹配等

在(几乎)每个象棋引擎中,您都应该找到诸如uci.cs或xboard.cs文件之类的文件,该文件已提交给此通信任务。

(“象棋引擎”是一种能够下象棋但没有图形界面的程序。它通过UCI或xboard协议与Arena或ScidVSPC等应用程序进行通信。大多数象棋程序都是以这种方式编写的,因此开发人员可以忽略GUI内容,而专注于“大脑”)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.