国际象棋通用引擎和谈
 
象棋百科全书网 (webmaster@xqbase.com)
20049月初稿,20062月修订
 
一、UCI和谈的特性
 
  UCI和谈,全称是国际象棋通用引擎和谈(Universal Chess Interface,直译作通用象棋接口)。它是开放的象棋引擎和谈,所谓“开放的”引擎和谈,指的是:
  (1) 和谈内容是公然的,而且能够此避收费运用;
  (2) 你能够依据该和谈自身编写象棋引擎,通常支持该和谈的界面,都能够运用你编写的引擎;
  (3) 你能够依据该和谈自身编写象棋界面,通常支持该和谈的引擎,都能够被你编写的界面调用。
  UCI和谈的前身是象棋引擎SOSShredder运用的引擎和谈,在他们的作者Rudolf HuberStefan Meyer-Kahlen对该和谈的革新下,20001128UCI和谈问世了。
 
  UCI和谈具有以下特性:
  (1) 引擎顺序是可执行文件,它同界面顺序之间经由历程“规范输入”和“规范输入”(C言语中的stdinstdout)来通讯。
  (2) 输入和输入是以“行体式格局”来完成的,界面发给引擎的每条指令都必需以“回车”(C言语中的'\n')完毕,界面吸收引擎的反应也一样。
  注:引擎不能跨平台运用,若是引擎从一个平台(Windows)移植到其余一平台(Unix),要求重新编译源代码,或运用跨平台接口。引擎的平台一般由三类:
  A. DOS平台,然则由于DOS平台过于迂腐,现在很难找到这样的引擎;
  B. Windows平台,要求在Windows下用Console体式格局编译引擎源代码,WinBoard只能运用这类引擎;
  C. Unix/Linux平台;要求在UnixLinux下编译源代码(也用Console体式格局)XBoard能够运用Linux的引擎。
  (3) 引擎启动时,必需用“uci”指令让引擎进入UCI和谈状态。固然,引擎也能够留下不运用UCI和谈的权益,只需它收受接管的第一条有用指令允许不是“uci”。譬喻,许多UCI引擎允许第一条有用指令是“xboard”,这样引擎就转而进入WinBoard和谈状态。
  (4) 不论引擎是否是在思索,都必需实时吸收指令,这样界面顺序就能够够实时中缀引擎的事情或改动引擎的思索体式格局了。每条指令都以特定的重点字扫尾,重点字和参数之间必需用空格离隔,如允许以简化引擎识别指令的历程。
  (5) 界面必需实时吸收引擎的反应信息,每条反应信息也都以特定的重点字扫尾(空格前面才是信息的素质内容),如允许以让界面更轻易地识别每一条反应信息。
  (6) 引擎在搜索一个局眼前,先要让界面把局势的职位通知引擎,作为“内置局势”;
  (7) 引擎必需吸收到"go"指令后才最先思索(搜索)
  (8) 若是对局是计时的,那末每次思索时都必需设准时钟,引擎仅仅依据时钟来注定思索战略,时钟的改动要求界面来完成;
  (9) 当引擎完成一个局势的搜索,失掉一步最好着法后,其实不改动“内置局势”,只是把这个着法反应给界面,界面来完成这一步(固然,界面也能够让引擎走其余着法),再把走完这一步后的局势通知引擎;
  (10) 残局库一般由界面来指定给引擎,即一般引擎是不自带残局库的,固然引擎也能够自带残局库,这时候界面可以让引擎依据引擎自身的残局库来完成残局的某步。
  上述10个特性中,前5点和WinBoard和谈是相似的,然后5WinBoard协议和UCI和谈则完整相反,因而WinBoard协议和UCI和谈的指令也一模一样。
 
二、走棋花样
 
  UCI和谈用的走棋花样是“长代数花样”,即走动子的肇端职位和抵达职位,这里有几点要求注重:
  (1) 不要注明“抵达记号”、“吃子记号”、“将军记号”以及其他评注记号,譬喻第一步走e4,则记作e2e4,而不是e2-e4
  (2) 不要注明所走的子,譬喻走Nf6,则记作g8f6,而不是Ng8f6
  (3) 王车易位时只注明王的线路,譬喻走O-O,则记作e1g1
  (4) 兵升变时在最终说明只用一个字母说明升变的子,譬喻走e8=Q,则记作e7e8q
 
三、输入和输入和谈
 
  输入和谈就是界面向引擎发送指令的和谈,和谈内容一般由一系列指令集组成(用红色透露表现),输入和谈则划定了引擎反应给界面的信息,以及这些信息详细的寄义(用蓝色透露表现)
 
1. uci
  这是引擎启动后,界面要求给引擎发送的第一条指令,照顾引擎现在运用的是UCI和谈。
 
2. id {name <x> | author <x>}
  这是uci指令的反应信息,显现引擎的版本号和作者。
 
3. option name <id> type <t> [default <x>] [min <x>] [max <x>] [var <x> [var <x> [...]]]
  也是uci指令的反应信息,透露表现引擎所支持的选项,<id>指选项的称呼(前面会引见)<t>指选项的类型,能够是以下5种:
  (1) check,搜检框,取值只能是truefalse
  (2) spin,旋钮,取值是整数,能够用minmax来限制局限;
  (3) combo,列表框,取值是由var来指定;
  (4) button,按钮,没有取值,仅仅用来触发某个事宜;
  (5) string,字符串,取值能够是任何字符串。
  一般的UCI引擎支持以下选项:
  (1) Hash(spin),以MB为单元划定Hash表的巨细;
  (2) NalimovPath(string),指定Nalimov残局库的途径,能够设置多个途径,用';'离隔;
  (3) NalimovCache(spin),以MB为单元划定Nalimov残局库的缓冲区;
  (4) Ponder(check),指定引擎是否是配景思索(Ponder),设定该参数的目的仅仅是让引擎改动时刻分配战略,配景思索依然要求界面收回指令;
  (5) OwnBook(check),指定引擎是否是要运用引擎自带的残局库;
  (6) MultiPV(spin),引擎给出若干步最好着法,Alpha-Beta搜索一般只给出一步,增长这个数值会下降引擎的运转效能,但扩展了界面临引擎供应着法的选择空间;
 
4. uciok
  这是uci指令的最终一条反应信息,透露表现引擎以前进入用uci和谈通讯的状态。
 
5. setoption name <id> [value <x>]
  设置引擎参数,这些参数必需是option反应信息所列出的。
 
6. isready
  检测引擎是否是处于“停当”状态,若是引擎发送回readyok信息,则说明引擎以前停当,能够界面能够向引擎收回其他指令。
 
7. readyok
  这是isready的反应信息,仅仅透露表现引擎能够吸收指令了。纵然引擎在思索,吸收到isready指令后也会前往readyok
 
8. position {fen <fenstring> | startpos } [moves <move1> .... <moven>]
  设置“内置棋盘”的局势,用fen来指定FEN花样串,或用startpos来指定肇端局势,它等价于
fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
  一样寻常来说,界面发送给引擎的<fenstring>是最近一次吃子或进兵后的局势(称为“弗成逆局势”),该局势到以后局势的一系列着轨则跟在moves后,目的是让引擎掌握一次又一次检测的战略。FEN花样串的写法参阅《国际象棋译文苑》文摘——关于PGNFEN记谱类型()一文。
 
9. go ...
  让引擎依据内置棋盘的设置和设定的搜索体式格局来思索,有以下搜索体式格局可供选择(能够多选,直接跟在go前面)
  (1) searchmoves <move1> .... <moven>,只让引擎在这几步中选择一步;
  (2) wtime <x>,白方盈余时刻(单元是毫秒)
    btime <x>,黑方盈余时刻;
    winc <x>,白方每步增长的时刻(适用于Fischer)
    binc <x>,黑方每步增长的时刻;
    movestogo <x>,另有若干回合进入下一时段(适用于时段制)
  这些选项用来设准时钟,它注定了引擎的思索时刻;
  (3) ponder,让引擎停止配景思索(即对手在用时,引擎的时钟不起功用)
  (4) depth <x>,指定搜索深度;
  (5) nodes <x>,指定搜索的节点数(即剖析的局势数,一样寻常它和时刻成正比)
  (6) mate <x>,在指定步数内只搜索杀棋;
  (7) movetime <x>,只花划定的时刻搜索;
  (8) infinite,有限制搜索,直到杀棋。
 
10. info ...
  显现引擎思索信息,信息有以下内容(能够是许多信息,都跟在info前面)
  (1) depth <x>,以后搜索到的深度;
  (2) seldepth <x>,选择性搜索(不完整搜索)到达的深度,一般会跟在depth前面;
  (3) pv <move1> ... <moven>,以前搜索到的最好线路;
  (4) multipv <num>,这只会显现在设定了MultiPV选项以后,紧跟在pv前面,说明它是最好的线路中的第几条(排名第几)
  (5) time <x>,以前搜索的时刻,它往往跟在pv前面;
  (6) score {pv <x> | mate <y>} [lowerbound | upperbound],引擎对以后局势的评定,pv <x>指以后局势的评分,单元是“百分兵值”,mate <y>指在若干步之内会组成杀棋,lowerbound指该评定是最低预计(为白方预计)upperbound指该评定是最高预计(为黑方预计)
  (7) currmovenumber <x>,以后搜索着法的序号;
  (8) currmove <move>,以后搜索的着法,它往往跟在currmovenumber <x>的前面;
  (9) nodes <x>,以前搜索的节点数(即剖析的局势数,它会隔一准时刻显现出来;
  (10) hashfull <x>Hash表的占用率(单元是千分之一),它也会隔一准时刻显现出来;
  (11) nps <x>,引擎速率,用每秒搜索的节点数,它也会隔一准时刻显现出来;
  (12) tbhits <x>,在残局库中找到局势的数目;
  (13) cpuload <x>,处置责罚器的占用率(单元是千分之一)
  (14) string <str>,其他信息,一般是调试信息。
 
11. stop
  中缀引擎的思索;
 
12. ponderhit
  在配景思索(go ponder)还没有输入效果(bestmove <x>)时,通知引擎配景思索掷中(正在配景思索的着法正好是对手的着法),随后引擎就自动转入一样寻常思索(时钟最先有用)。若是配景思索没有掷中,就必需用stop中缀思索,重新设置局势让引擎思索。
 
13. bestmove <move1> [ponder <move2>]
  引擎思索完毕后(不论是否是被stop中缀)所显现的效果,ponder指为对手思索的效果,一般引擎会供应此信息。
 
14. quit
  让引擎加入运转,不论引擎思索与否。
 
四、举例
 
  不才面的案例中,输入局部(从界面到引擎)用红色透露表现,输入局部(从引擎到界面)用蓝色透露表现。
uci,通知引擎运用UCI和谈;
id name Shredder 5
id author Stefan MK,引擎显现版本信息。
option name Hash type spin default 1 min 1 max 128Hash表的下限是128MB
option name NalimovPath type string default c:\,说明引擎支持Nalimov残局库,注重在C言语中'\'要打印成'\\'
option name NalimovCache type spin default 1 min 1 max 32
option name Nullmove type check default true
option name Style type combo default Normal var Solid var Normal var Risky,说明引擎有三种作风(守旧、平衡和冒进,缺省是平衡)
uciok,一切可设置的参数以前显现出来,这时候引擎能够吸收指令;
setoption name Hash value 32,把Hash表增长到32MB
setoption name NalimovCache value 1,把残局库缓冲区设置为1MB(这句话没有需要,由于缺省值就是1)
setoption name NalimovPath value d:\tb;c\tb,设置残局库的途径;
isready,守候引擎初始化;
readyok,引擎初始化完成,现在可以让引擎思索了;
position startpos moves e2e4 e7e5,给定残局e4 e5(在这里,最好直接将以后局势用position fen <fenstring>的形式给出,由于以后局势是弗成逆局势)
go infinite,让引擎有限制思索,到时刻用stop中缀;
info depth 1 seldepth 0
info score cp 13 depth 1 nodes 13 time 15 pv f1b5
info depth 2 seldepth 2
info nps 15937
info score cp 14 depth 2 nodes 255 time 15 pv f1c4 f8c5
info depth 2 seldepth 7 nodes 255
info depth 3 seldepth 7
info nps 26437
info score cp 20 depth 3 nodes 423 time 15 pv f1c4 g8f6 b1c3
info nps 41562
...,以后另有许多信息,这里省略;
stop,用户不再守候,让引擎中缀思索;
bestmove g1f3 ponder d8f6,引擎输入白方最好着法Nf3,黑方的敷衍是Bf6(由于思索被用户中缀,以是这步若干很多若干问题),若是用户要连续停止思索,可再输入go
 
  资料泉源:www.uciengines.dewww.shredderchess.comwww.chessbase.com
  • 上一篇 国际象棋引擎和谈历史(转载自《国际象棋译文苑》)
  • 下一篇 中国象棋竞赛划定礼貌(1999年版)
  • 返 回 象棋百科全书——划定礼貌与和谈
  • www.xqbase.com