《对弈程序基本技术》专题
 
后台思考
 
Bruce Moreland /
 
对手在走棋的时候你会做什么
 
  国际象棋程序能够在规定的时间内思考局面,走出它认为的最佳着法,然后坐在一边等对手下,对手出了着法后,再做同样的事。
  对于程序来说这太简单了,但是缺点是浪费了很多可以处理的时间,因为对手在思考时,程序做在一边空闲着。
  在一些国际象棋书上,有一些思想说的是你不着棋时该做什么。一个想法就是在对手思考时,你也在考虑对策,关注到你走棋时将出现的路线。这对人类棋手来说是个不错的主意,但是如果要在电脑国际象棋程序上实现,这并不简单。
  我用我的程序参加1995年在香港举行的世界电脑国际象棋锦标赛(WCCC)时,自以为合理地解决了这个问题。轮到对手走棋时,我的程序就扮演对手的角色,也坐在那里想。当我的程序又开始走棋时,“散列表”里已经记录了很多很有用的信息,前面几层能够很快地搜索完。
 
我认为这是一个更好的方法
 
  这个方法用得很好,使得我没有得最后几名,但是那次比赛我学到了一个更好的办法,我想现在所有人都用这个办法了(可能那时候就是如此)。这个技术称为“沉思”(Pondering)或其他诸如德语中翻译过来的“永久智能”(Permanent Brain)。我不懂德语,但是更好的翻译可能应该是“连续思考”。
  当你的程序在走棋时,它会产生一个“主要变例”。这个主要变例通常不止一个着法,主要变例中的第一个着法就是下到棋盘上的,而剩下的那些只是显示在屏幕上。
  第二个着法就是程序认为的对手会走的着法,它通常是个好的着法,并且在很多情况下对手最终会走这个着法。
  这有点像是在赌对手会走这个着法,赌赢了就告诉程序对手确实走了这个着法。
  因此对手在思考一个着法的时候,你的程序就猜了一个可能会选择的着法,并且在此基础上思考你的应对。
  如果你的程序猜得正确,你会在走下一步着法的时候有一个很好的开端,你的程序从而很可能想得更远,并且很快就能出子。
  有一种情况经常出现在两台计算机的比赛中:一个程序在思考着法,然后出子,另一个程序就马上回应。第一个程序又开始思考并出子,而第二个又马上回应。这种情况会持续很多步,直到第二个程序在自己的时钟上积累了足够的时间,使得它认为没有必要马上出子。
  【译注:根据剩下的时间和需要走的步数,国际象棋程序可以决定一步棋允许花多少时间的(国际比赛通常是时段制的,当然加时制也可以作相应的处理)。当立即出子时,剩下的时间没有减少,而需要走的步数减少了,因此一步棋允许花的时间就多了,这就相当于积累了时间。
  某些程序可以估计它多搜索一层所需要的时间,如果它没有积累到足够的时间来多搜索一层,那么在后台思考中已经把前面的搜索做完了,它就会马上出子。如果它积累到了足够的时间,那么它通常会选择多搜索一层,让棋下得更好。】
  如果对手没有走出预测的着法,你的程序只要简单地撤消这个预测着法,执行对手走的那个,然后开始为自己思考着法。
 
另一个思想
 
  在1995年的WCCC上,我的程序有机会挑战Hitech。我的程序下出了要输的局面并且开始长时间思考。在我的程序思考走哪步时,Hitech对我将要走的那步想了足够长的时间,并且开始考虑另一种着法了。如果我的程序可能走出的着法Hitech都能想到,那么它当然可以迅速出子。
  我不知道这样做是好是坏,但这是很值得考虑的。
  【为对手预测着法来进行后台思考,是目前普遍的做法。在UCI协议(国际象棋通用引擎协议)中,引擎甚至没有必要自己设计这样的策略。UCI协议只要求引擎在给出着法的同时给出后台思考的预测着法(即主要变例中的第二个着法),例如:
bestmove e2e4 ponder e7e5
  如果界面的后台思考功能打开,界面就会根据预测着法把局面告诉引擎,让引擎进行后台思考,例如:
position startpos moves e2e4 e7e5
go ponder <time_settings>
  此时引擎就在对手着棋的时间里思考,而自己的时钟是关闭的。当对手出子后,如果预测命中,界面就会向引擎发出后台思考命中的指令:
ponderhit
  让引擎开启自己的时钟,继续思考,直到它想出着法为止,例如:
bestmove g1f3 ponder b8f6
  如果预测没有命中,那么界面就必须中止引擎的思考:
stop
bestmove g1f3 ponder b8f6
  中止思考后,引擎同样会返回一个着法,但界面不会理会。随后界面把对手的着法告诉引擎,并让引擎重新思考,例如:
position startpos moves e2e4 c7c5
go <time_settings>
  在UCI协议中,原作者提到Hitech的这种后台思考策略(即预测着法想了足够长的时间,开始想第二个预测着法了)是无法实现的。】
 
后台思考对棋力的增强
 
  我没有考虑过这个问题,但是它会使搜索进行得更深,或者时间花得更短,所以肯定会增强棋力的。
 
  原文:http://www.seanet.com/~brucemo/topics/pondering.htm
  译者:象棋百科全书网 (webmaster@xqbase.com)
  类型:全译加译注
  • 上一篇 其他策略——藐视因子
  • 下一篇 其他策略——残局库
  • 返 回 象棋百科全书——电脑象棋
  • www.xqbase.com