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
輸出編譯器及引擎指令集資訊。
