棋谱控

中国象棋电脑应用规范(四) 中国象棋通用引擎协议
更新时间:2012-12-4、浏览次数:

 
11. info <思考信息>
  思考状态的反馈。显示引擎思考信息,通常有以下几种信息:
  (1) time <已花费的时间> nodes <已搜索的结点数>:思考信息中给出的时间通常以毫秒为单位,结点数和时间相除就是引擎的速度(NPS),单位是K
  (2) depth <当前搜索深度> [score <分值> pv <主要变例>]:输出引擎思考到的深度及其思考路线和好坏。例如在起始局面下,《象棋巫师》收到引擎的反馈:info depth 6 score 4 pv b0c2 b9c7 c3c4 h9i7 c2d4 h7e7,那么界面上应该输出:6 (+4) 马八进七 马2进3 兵七进一 马8进9 马七进六 炮8平5。分值通常以一个轻子(马或炮)100分记,以上信息说明此时当前要走的一方占有相当于0.04个轻子的优势。
  (3) currmove <当前搜索着法>:输出引擎正在思考的着法。
  (4) message <提示信息>:输出引擎要直接告诉用户的信息,建议界面程序直接将提示信息显示在界面上。
 
12. ponderhit [draw]
  思考状态的指令。告诉引擎后台思考命中,现在转入正常思考模式(引擎继续处于思考状态,此时go指令设定的时限开始起作用)
  指定draw选项表示向引擎提和,引擎以bestmove提供的选项作为反馈,参阅bestmove指令。
 
13. stop
  思考状态的指令。中止引擎的思考。另外,后台思考没有命中时,就用该指令来中止思考,然后重新输入局面。
  注意:发出该指令并不意味着引擎将立即回到空闲状态,而是要等到引擎反馈bestmovenobestmove后才表示回到空闲状态,引擎应尽可能快地作出这样的反馈。
 
14. bestmove <最佳着法> [ponder <后台思考的猜测着法>] [draw | resign]
  思考状态的反馈,此后引擎返回空闲状态。显示思考结果,即引擎认为在当前局面下的最佳着法,以及猜测在这个着法后对手会有怎样的应对(即后台思考的猜测着法)。通常,最佳着法是思考路线(主要变例)中的第一个着法,而后台思考的猜测着法则是第二个着法。
  在对手尚未落子时,可以根据该着法来设定局面,并作后台思考。当对手走出的着法和后台思考的猜测着法吻合时,称为“后台思考命中”。
  draw选项表示引擎提和或者接受界面向引擎发送的提和请求,参阅go drawponderhit draw指令。resign选项表示引擎认输。UCCI界面在人机对弈方式下,根据不同情况,可以对引擎的bestmove反馈中的drawresign选项作出相应的处理:
  (1) 如果用户提和,界面向引擎发出go drawponderhit draw指令,而引擎反馈带drawbestmove,那么界面可终止对局并判议和;
  (2) 如果用户没有提和,而引擎反馈带drawbestmove,那么界面可向用户提和,用户接受提和则可终止对局并判议和;
  (3) 如果引擎反馈带resignbestmove,那么界面可终止对局并判引擎认输。
  引擎应该根据当前局面的情况(position指令给出),以及界面是否发送了带drawgoponderhit指令,来考虑是否反馈带drawresignbestmove
 
15. nobestmove
  思考状态的反馈,此后引擎返回空闲状态。显示思考结果,但引擎一步着法也没计算,表示当前局面是死局面,或者接收到诸如 go depth 0 等只让引擎给出静态局面评价的指令。
 
16. probe {fen <FEN> | startpos} [moves <后续着法列表>]
  空闲状态和思考状态的指令。获取Hash表中指定局面的信息,引擎必须立刻在Hash表中查找该局面的状态,由pophash指令反馈。
  该指令仅用于引擎的调试,设计者可以向引擎发送一系列probe指令,捕获到搜索树的大致信息。
 
17. pophash [bestmove <最佳着法>] [lowerbound <Beta> depth <深度>] [upperbound <Alpha> depth <深度>]
  空闲状态和思考状态的反馈。输出由probe所指定的局面在Hash表中信息。
  如果该局面没有记录在Hash表中,那么只反馈pophash即可。
 
18. quit
  空闲状态的指令。让引擎退出运转。
 
19. bye
  接收到quit指令后的反馈。引擎完成了退出运转前的准备工作,通知界面,引擎将在瞬间正常退出运转。界面收到该指令后,即可关闭输入输出通道。
 
六、用例
 
  下面是一个后台思考的例子,描述了UCCI引擎中最难处理的部分。(从界面到引擎的)指令用红色表示,(从引擎到界面的)反馈用蓝色表示。
 
ucci
id name ElephantEye Demo
option usemillisec type check default false
option usebook type check default true
ucciok
setoption usemillisec true
setoption usebook false
position fen rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1
go time 300000 increment 0
info depth 6 score 4 pv b0c2 b9c7 c3c4 h9i7 c2d4 h7e7
info nodes 5000000 time 5000
bestmove b0c2 ponder b9c7
 
  在这个例子中,引擎执红,用户执黑,采用5分钟包干的时限。引擎启动后,界面即让引擎分析初始局面(不用开局库),引擎给出最佳着法“马八进七”,然后是用户走子,引擎按照猜测着法“马2进3”作后台思考。此时,引擎消耗了5秒钟,还剩余295秒的时间。
 
position fen rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1 moves b0c2 b9c7
go ponder time 295000 increment 0
info depth 6 score 4 pv c3c4 h9i7 c2d4 h7e7 h0g2 i9h9
 
  此时用户走子了,下面分两种情况讨论。
  (1) 如果用户走了引擎的猜测着法“马2进3”,那么后台思考命中:
 
ponderhit
info nodes 10000000 time 10000
info depth 7 score 4 pv c3c4 h9i7 c2d4 h7e7 h0g2 i9h9 i0h0
info nodes 15000000 time 15000
bestmove c3c4 ponder h9i7
 

上一页  [1] [2] [3] [4] 下一页

  • 返回栏目