⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 其他策略——后台思考.htm

📁 象棋程序设计全资料集(介绍编写象棋程序的方法思路)
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0053)http://www.elephantbase.net/computer/other_ponder.htm -->
<HTML><HEAD><TITLE>其他策略——后台思考</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb_2312-80">
<META content="MSHTML 6.00.3790.2817" name=GENERATOR></HEAD>
<BODY background=其他策略——后台思考_files/background.gif>
<DL>
  <DIV align=center>
  <CENTER>
  <DT>《对弈程序基本技术》专题 </CENTER></DT></DIV>
  <DIV align=center>
  <CENTER>
  <DT>  </CENTER></DT></DIV>
  <DIV align=center>
  <CENTER>
  <DT><FONT face=隶书 size=6>后台思考</FONT> </CENTER></DT></DIV>
  <DIV align=center>
  <CENTER>
  <DT>  </CENTER></DT></DIV>
  <DIV align=center>
  <CENTER>
  <DT><FONT face="Times New Roman">Bruce Moreland (</FONT><A 
  href="mailto:brucemo@seanet.com"><FONT 
  face="Times New Roman">brucemo@seanet.com</FONT></A><FONT 
  face="Times New Roman">) / </FONT>文 </CENTER></DT></DIV>
  <DT>  
  <DT><FONT face=楷体_GB2312 size=5><STRONG>对手在走棋的时候你会做什么</STRONG></FONT> 
  <DT>  
  <DT>  国际象棋程序能够在规定的时间内思考局面,走出它认为的最佳着法,然后坐在一边等对手下,对手出了着法后,再做同样的事。 
  <DT>  对于程序来说这太简单了,但是缺点是浪费了很多可以处理的时间,因为对手在思考时,程序做在一边空闲着。 
  <DT>  在一些国际象棋书上,有一些思想说的是你不着棋时该做什么。一个想法就是在对手思考时,你也在考虑对策,关注到你走棋时将出现的路线。这对人类棋手来说是个不错的主意,但是如果要在电脑国际象棋程序上实现,这并不简单。 

  <DT>  我用我的程序参加<FONT face="Times New Roman">1995</FONT>年在香港举行的世界电脑国际象棋锦标赛<FONT 
  face="Times New Roman">(WCCC)</FONT>时,自以为合理地解决了这个问题。轮到对手走棋时,我的程序就扮演对手的角色,也坐在那里想。当我的程序又开始走棋时,“<A 
  href="http://www.elephantbase.net/computer/search_hashing.htm" 
  target=_blank>散列表</A>”里已经记录了很多很有用的信息,前面几层能够很快地搜索完。 
  <DT>  
  <DT><FONT face=楷体_GB2312 size=5><STRONG>我认为这是一个更好的方法</STRONG></FONT> 
  <DT>  
  <DT>  这个方法用得很好,使得我没有得最后几名,但是那次比赛我学到了一个更好的办法,我想现在所有人都用这个办法了<FONT 
  face="Times New Roman">(</FONT>可能那时候就是如此<FONT 
  face="Times New Roman">)</FONT>。这个技术称为“沉思”<FONT 
  face="Times New Roman">(Pondering)</FONT>或其他诸如德语中翻译过来的“永久智能”<FONT 
  face="Times New Roman">(Permanent Brain)</FONT>。我不懂德语,但是更好的翻译可能应该是“连续思考”。 
  <DT>  当你的程序在走棋时,它会产生一个“<A 
  href="http://www.elephantbase.net/computer/other_pvcollect.htm" 
  target=_blank>主要变例</A>”。这个主要变例通常不止一个着法,主要变例中的第一个着法就是下到棋盘上的,而剩下的那些只是显示在屏幕上。 
  <DT>  第二个着法就是程序认为的对手会走的着法,它通常是个好的着法,并且在很多情况下对手最终会走这个着法。 
  <DT>  这有点像是在赌对手会走这个着法,赌赢了就告诉程序对手确实走了这个着法。 
  <DT>  因此对手在思考一个着法的时候,你的程序就猜了一个可能会选择的着法,并且在此基础上思考你的应对。 
  <DT>  如果你的程序猜得正确,你会在走下一步着法的时候有一个很好的开端,你的程序从而很可能想得更远,并且很快就能出子。 
  <DT>  有一种情况经常出现在两台计算机的比赛中:一个程序在思考着法,然后出子,另一个程序就马上回应。第一个程序又开始思考并出子,而第二个又马上回应。这种情况会持续很多步,直到第二个程序在自己的时钟上积累了足够的时间,使得它认为没有必要马上出子。 

  <DT>  <FONT color=#0000ff>【译注:根据剩下的时间和需要走的步数,国际象棋程序可以决定一步棋允许花多少时间的</FONT><FONT 
  face="Times New Roman" color=#0000ff>(</FONT><FONT 
  color=#0000ff>国际比赛通常是时段制的,当然加时制也可以作相应的处理</FONT><FONT face="Times New Roman" 
  color=#0000ff>)</FONT><FONT 
  color=#0000ff>。当立即出子时,剩下的时间没有减少,而需要走的步数减少了,因此一步棋允许花的时间就多了,这就相当于积累了时间。</FONT> 
  <DT><FONT 
  color=#0000ff>  某些程序可以估计它多搜索一层所需要的时间,如果它没有积累到足够的时间来多搜索一层,那么在后台思考中已经把前面的搜索做完了,它就会马上出子。如果它积累到了足够的时间,那么它通常会选择多搜索一层,让棋下得更好。】</FONT> 

  <DT>  如果对手没有走出预测的着法,你的程序只要简单地撤消这个预测着法,执行对手走的那个,然后开始为自己思考着法。 
  <DT>  
  <DT><FONT face=楷体_GB2312 size=5><STRONG>另一个思想</STRONG></FONT> 
  <DT>  
  <DT>  在<FONT face="Times New Roman">1995</FONT>年的<FONT 
  face="Times New Roman">WCCC</FONT>上,我的程序有机会挑战<FONT 
  face="Times New Roman">Hitech</FONT>。我的程序下出了要输的局面并且开始长时间思考。在我的程序思考走哪步时,<FONT 
  face="Times New Roman">Hitech</FONT>对我将要走的那步想了足够长的时间,并且开始考虑另一种着法了。如果我的程序可能走出的着法<FONT 
  face="Times New Roman">Hitech</FONT>都能想到,那么它当然可以迅速出子。 
  <DT>  我不知道这样做是好是坏,但这是很值得考虑的。 
  <DT><FONT color=#008000>  【为对手预测着法来进行后台思考,是目前普遍的做法。在</FONT><FONT 
  face="Times New Roman" color=#008000>UCI</FONT><FONT 
  color=#008000>协议</FONT><FONT face="Times New Roman" 
  color=#008000>(</FONT><FONT color=#008000>国际象棋通用引擎协议</FONT><FONT 
  face="Times New Roman" color=#008000>)</FONT><FONT 
  color=#008000>中,引擎甚至没有必要自己设计这样的策略。</FONT><FONT face="Times New Roman" 
  color=#008000>UCI</FONT><FONT 
  color=#008000>协议只要求引擎在给出着法的同时给出后台思考的预测着法</FONT><FONT face="Times New Roman" 
  color=#008000>(</FONT><FONT color=#008000>即主要变例中的第二个着法</FONT><FONT 
  face="Times New Roman" color=#008000>)</FONT><FONT color=#008000>,例如:</FONT> 
  <DD><FONT color=#0000ff>bestmove e2e4 ponder e7e5</FONT> 
  <DT><FONT color=#008000>  如果界面的后台思考功能打开,界面就会根据预测着法把局面告诉引擎,让引擎进行后台思考,例如:</FONT> 

  <DD><FONT color=#ff0000>position startpos moves e2e4 e7e5</FONT> 
  <DD><FONT color=#ff0000>go ponder &lt;time_settings&gt;</FONT> 
  <DT><FONT 
  color=#008000>  此时引擎就在对手着棋的时间里思考,而自己的时钟是关闭的。当对手出子后,如果预测命中,界面就会向引擎发出后台思考命中的指令:</FONT> 

  <DD><FONT color=#ff0000>ponderhit</FONT> 
  <DT><FONT color=#008000>  让引擎开启自己的时钟,继续思考,直到它想出着法为止,例如:</FONT> 
  <DD><FONT color=#0000ff>bestmove g1f3 ponder b8f6</FONT> 
  <DT><FONT color=#008000>  如果预测没有命中,那么界面就必须中止引擎的思考:</FONT> 
  <DD><FONT color=#ff0000>stop</FONT> 
  <DD><FONT color=#0000ff>bestmove g1f3 ponder b8f6</FONT> 
  <DT><FONT 
  color=#008000>  中止思考后,引擎同样会返回一个着法,但界面不会理会。随后界面把对手的着法告诉引擎,并让引擎重新思考,例如:</FONT> 
  <DD><FONT color=#ff0000>position startpos moves e2e4 c7c5</FONT> 
  <DD><FONT color=#ff0000>go &lt;time_settings&gt;</FONT> 
  <DT><FONT color=#008000>  在</FONT><FONT face="Times New Roman" 
  color=#008000>UCI</FONT><FONT color=#008000>协议中,原作者提到</FONT><FONT 
  face="Times New Roman" color=#008000>Hitech</FONT><FONT 
  color=#008000>的这种后台思考策略</FONT><FONT face="Times New Roman" 
  color=#008000>(</FONT><FONT 
  color=#008000>即预测着法想了足够长的时间,开始想第二个预测着法了</FONT><FONT face="Times New Roman" 
  color=#008000>)</FONT><FONT color=#008000>是无法实现的。】</FONT> 
  <DT>  
  <DT><FONT face=楷体_GB2312 size=5><STRONG>后台思考对棋力的增强</STRONG></FONT> 
  <DT>  
  <DT>  我没有考虑过这个问题,但是它会使搜索进行得更深,或者时间花得更短,所以肯定会增强棋力的。 
  <DT>  
  <DT>  原文:<A href="http://www.seanet.com/~brucemo/topics/pondering.htm" 
  target=_blank><FONT 
  face="Times New Roman">http://www.seanet.com/~brucemo/topics/pondering.htm</FONT></A> 

  <DT>  译者:黄晨 <FONT face="Times New Roman">(</FONT><A 
  href="mailto:webmaster@elephantbase.net"><FONT 
  face="Times New Roman">webmaster@elephantbase.net</FONT></A><FONT 
  face="Times New Roman">)</FONT> 
  <DT>  类型:全译加译注 </DT></DL>
<DIR>
<LI>上一篇 <A 
href="http://www.elephantbase.net/computer/other_contempt.htm">其他策略——藐视因子</A> 
<LI>下一篇 <A 
href="http://www.elephantbase.net/computer/other_egtb.htm">其他策略——残局库</A> 
<LI>返 回 <A href="http://www.elephantbase.net/computer.htm">象棋百科全书——电脑象棋</A> 
</LI></DIR>
<DIV align=center>
<CENTER>
<TABLE border=0>
  <TBODY>
  <TR>
    <TD>
      <P align=center><A href="http://www.elephantbase.net/" target=_blank><IMG 
      height=31 src="其他策略——后台思考_files/elephantbase.gif" width=88 
      border=0></A></P></TD></TR>
  <TR>
    <TD><A href="http://www.elephantbase.net/" target=_blank><FONT face=Arial 
      size=2><STRONG>www.elephantbase.net</STRONG></FONT></A></TD></TR></TBODY></TABLE></CENTER></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -