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

📄 棋弈软件基础——开局库、哈希表.htm

📁 象棋程序设计全资料集(介绍编写象棋程序的方法思路)
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://www.elephantbase.net/computer/book.htm -->
<HTML><HEAD><TITLE>棋弈软件基础——开局库、哈希表</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb_2312-80">
<META content="MSHTML 6.00.3790.2759" name=GENERATOR></HEAD>
<BODY background=棋弈软件基础——开局库、哈希表_files/background.gif>
<P align=center>《<A href="http://www.chessit.net/" 
target=_blank>国际象棋译文苑</A>》文摘</P>
<P align=center><FONT face=隶书 size=6>开局库、哈希表</FONT></P>
<DL>
  <DIV align=center>
  <CENTER>
  <DT><FONT face="Times New Roman">Aaron Tay</FONT> </CENTER></DT></DIV>
  <DT>  
  <DT><STRONG>  </STRONG><FONT face=Arial><STRONG>C1.</STRONG></FONT><FONT 
  face="Times New Roman"><STRONG> </STRONG></FONT><FONT 
  face=黑体><STRONG>什么叫开局库</STRONG></FONT><FONT face=Arial><STRONG>(opening 
  book)</STRONG></FONT> 
  <DT>  就象人们记住开局谱着一样,棋弈程序使用一个数据库,里面储存了开局谱着和局面,于是当对局(开局)中的棋步在开局库中能找到时,它就可以立即取出来走,不用计算。无庸多说,这对于程序节省思考时间有重大帮助。但另一方面,如果开局库本身不好或部分不好,程序也可能被盲目引到劣势的局面甚至很快失利。多数<FONT 
  face="Times New Roman">Winboard</FONT>引擎都可使用开局库,它们绝大部分都是和程序本身分离的独立文件<FONT 
  face="Times New Roman">(</FONT>典型的是以<FONT 
  face="Times New Roman">.bk</FONT>为后缀<FONT 
  face="Times New Roman">)</FONT>,也有少部分是内建在程序里面。<FONT 
  color=#000080>【译注:但不同的程序尤其商业性的又有不同的规矩。比如</FONT><FONT face="Times New Roman" 
  color=#000080>Fritz</FONT><FONT color=#000080>等的是</FONT><FONT 
  face="Times New Roman" color=#000080>.ctg</FONT><FONT 
  color=#000080>后缀;有些是</FONT><FONT face="Times New Roman" 
  color=#000080>.bok</FONT><FONT color=#000080>或</FONT><FONT 
  face="Times New Roman" color=#000080>.book</FONT><FONT 
  color=#000080>后缀;另外有些程序的开局库下载下来后甚至还要手动更改后缀才能工作!不一而足】</FONT> 
  <DT>  
  <DT>  <FONT face=Arial><STRONG>C2.</STRONG></FONT><FONT 
  face="Times New Roman"> </FONT><FONT 
  face=黑体><STRONG>什么叫开局学习?</STRONG></FONT><FONT face=Arial><STRONG>(book 
  learning)</STRONG></FONT> 
  <DT>  概念简单,但形式很多样。总的来说,就是使程序从总是导致劣势<FONT 
  face="Times New Roman">(</FONT>失败<FONT 
  face="Times New Roman">)</FONT>的那些重复的开局变化中“吸取经验教训并自行改正”的功能设置。目前还不是很多<FONT 
  face="Times New Roman">Winboard</FONT>引擎有这项功能,只有一些较高的比如<FONT 
  face="Times New Roman">Crafty</FONT>,它不但把结果写入到开局库相关文件,甚至产生一个学习文档反映它究竟“学到了些什么”,使你能与别人交换和引入这些“所学成就”。 

  <DT>  
  <DT>  <FONT face=Arial><STRONG>C3.</STRONG></FONT><FONT 
  face="Times New Roman"> </FONT><FONT face=黑体><STRONG>如何使用开局库?</STRONG></FONT> 
  <DT>  不同引擎不同,但一般都是把开局库文件放在和棋弈引擎文件同一目录下,而且通常还另有一个设置文件<FONT 
  face="Times New Roman">(</FONT>可能是<FONT 
  face="Times New Roman">.ini</FONT>后缀,也可能别的,比如<FONT 
  face="Times New Roman">crafty</FONT>的是<FONT 
  face="Times New Roman">.rc</FONT>,<FONT 
  face="Times New Roman">ruffian</FONT>是<FONT 
  face="Times New Roman">.cfg</FONT>后缀<FONT 
  face="Times New Roman">)</FONT>,在设置文件里把“开局库”<FONT 
  face="Times New Roman">(opening book</FONT>,或者类似这样的表达<FONT 
  face="Times New Roman">)</FONT>设为<FONT 
  face="Times New Roman">ON</FONT>就可以。<FONT 
  color=#000080>【译注:当然有些作者喜欢用</FONT><FONT face="Times New Roman" 
  color=#000080>ON/OFF</FONT><FONT color=#000080>,有些喜欢用</FONT><FONT 
  face="Times New Roman" color=#000080>1/0</FONT><FONT 
  color=#000080>或其它,随他们高兴的】</FONT> 
  <DT>  
  <DT>  <FONT face=Arial><STRONG>C4.</STRONG></FONT><FONT 
  face="Times New Roman"> </FONT><FONT 
  face=黑体><STRONG>能令所有引擎使用统一的开局库吗?</STRONG></FONT> 
  <DT>  在<FONT 
  face="Times New Roman">Fritz</FONT>等中,可注意到不同的引擎可以使用统一的开局库。但对于<FONT 
  face="Times New Roman">Winboard</FONT>引擎,目前还没有统一的开局库格式,因此不同的引擎有不同格式的开局库。想达到题目要求,有些变通办法,但目前在通用性方面还很欠缺。需等待<FONT 
  face="Times New Roman">Winboard</FONT>的下一个新版协议出来,引入“开局引擎”<FONT 
  face="Times New Roman">(book engine)</FONT>的概念才有通用性。 
  <DT>  <FONT color=#000080>【译注:把</FONT><FONT face="Times New Roman" 
  color=#000080>C5-C11</FONT><FONT color=#000080>点转到别的译文或省略;以后不再特别说明】</FONT> 
  <DT>  
  <DT>  <FONT face=Arial><STRONG>C12.</STRONG></FONT><FONT 
  face="Times New Roman"> </FONT><FONT 
  face=黑体><STRONG>什么叫置换/哈希表</STRONG></FONT><FONT 
  face=Arial><STRONG>(Transposition/Hash tables)</STRONG></FONT> 
  <DT>  当棋弈引擎开始对一个局面进行分析时,它经常是“试验”以不同次序去走但到达同样局面的棋,程序于是把这样的局面以及对局面的评价值保存在内存中,一旦碰到以别的走棋次序但到达同样局面的变化时,换句话说,当计算“另一个”变化但到达的局面其实之前已经出现过时,程序就省下了再次估值的时间了。想详细一点了解,看<FONT 
  face="Times New Roman">Dann Corbit</FONT>在“<FONT 
  face="Times New Roman">Winboard</FONT>论坛”中的发言: 
  <DT>  哈希表是一种加快搜索的数据结构,它本身的原理模型要一点数学或程序设计基础去理解。<FONT 
  face="Times New Roman">(</FONT>不是想搞棋弈引擎写作的可以不管<FONT 
  face="Times New Roman">)</FONT> 
  <DT>  哈希表用在棋弈程序中,作用很大。举例,计算如何走棋时,我可能先走马后走车,也可能先走车后走马,假如对手各自相对应的应着不变,那么不同次序走完两步棋后到达的局面是一模一样的。 

  <DT>  如果我已经对局面进行了计算估计,那很好。如果我对已经计算过了的局面还要再次计算估计那就不好了,如果让电脑这样做,会占用它很多时间的。 
  <DT>  哈希表的用途就是在这种情况下迅速查找之前已经完成了的工作<FONT 
  face="Times New Roman">(</FONT>已经计算过的估值<FONT 
  face="Times New Roman">)</FONT>。我可以把一个估值加上一个“索引”<FONT 
  face="Times New Roman">(hash 
  key)</FONT>保存在表中,这样做的目的是制造一个“唯一的标识”,而执行过程是很快的。我对当前局面产生一个“索引”,然后看这个索引在表中是否已经有保存了。假如是有,就看表中的值是多少。表中的估值足够深入因此我不需要再次计算了吗?如果是这样,那么我就只需把值从表中取出来,而不用又再来一次计算。这大大节省了时间。 

  <DT>  哈希表是一种非特殊的数据结构,因此很容易就可作为棋弈程序的其它用途。它对程序的执行速度提高是非常大的,我们认为哈希表是好程序的一个相当必要的功能。 

⌨️ 快捷键说明

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