UCI协议
quit
退出引擎,输入后引擎将立即退出。引擎不会输出任何内容。
ucinewgame
进行新的一局时,界面应向引擎发送 ucinewgame 指令以清除置换表等。ucinewgame 指令的执行可能需要一段时间,界面在发送该指令后应使用 isready 确认引擎状态。
setoption
设置引擎选项,用法:
setoption name <id> [value <x>]其中,<id> 是 UCI 选项名,<x> 是你要设置的值。
例如界面要将引擎的线程数设置为 16,可发送:
setoption name Threads value 16某些选项,如 Clear Hash(清空置换表),可省略 value 直接使用,例如:
setoption name Clear Hash关于 UCI 选项,详见“UCI选项”页面,这里不再赘述。
引擎不会输出任何内容。
isready
用于检查引擎是否工作正常,引擎应始终输出 readyok。
uci
用于获取引擎相关信息(如名称、作者、UCI 选项等),输出示例如下:
id name Pikafish 2024-02-18
id author the Pikafish developers (see AUTHORS file)
option name Debug Log File type string default
option name Threads type spin default 1 min 1 max 1024
option name Hash type spin default 16 min 1 max 33554432
option name Clear Hash type button
option name Ponder type check default false
option name MultiPV type spin default 1 min 1 max 128
...
uciok其中,uciok 是必需的。如果界面输入 uci 后,没有接收到引擎输出的 uciok,那么界面会认为该程序不是 UCI 引擎。
[position] fen
给引擎输入 FEN 局面。
例如:
position fen 3k1a3/4a4/5n3/9/9/9/9/9/9/4KR3 w或者在此基础上加上 movelist(历史着法):
5a3/3ka4/5n3/9/9/9/9/9/9/4K1R2 w - - 0 1 moves g0f0 d8d9注意
中国象棋引擎采用的是 UCI-Cyclone,可以省略 position,且表示行的数字从 0 开始。
引擎不会输出任何内容。
[position] startpos
设置当前局面为起始局面(rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w),position 可省略。
引擎不会输出任何内容。
go
让引擎分析当前的局面(当前局面可通过 position 指令设置)。
可以加入以下参数:
searchmoves <move1> <move2> ... <movei>:指定搜索的走法(界面“变招”功能需要使用该参数)。需要注意的是,UCI 协议中没有banmoves指令(这是 UCCI 协议中的)。infinite:无限制分析(直到发送stop)。ponder:后台思考。wtime,btime:红方和黑方剩下的时间(ms)。winc,binc:红方和黑方的加秒(ms)。movestogo:用于多少时间走多少步的时间制,告诉引擎获得新的时间还剩多少步,在中国象棋里面一般不会用到。depth:指定层数。nodes:指定搜索的节点数。mate:指定搜索到多少步内绝杀就停止。movetime:指定步时(ms)。perft:穷举多少步内的局面。
输入 go 后,引擎将搜索当前局面并输出搜索结果。达到对应的限制或用户发送 stop 指令后,引擎即终止搜索。
d
输出当前的局面、局面 FEN、key 信息和将军信息。该指令供引擎开发调试使用。
eval
输出当前局面的评估信息。该指令供引擎开发调试使用。
export_net
导出权重,可指定文件名。
flip
切换走子方。
compiler
输出编译器及引擎指令集信息。
