棋弈软件基础:残局库
转载于:国际象棋译文苑
Aaron Tay
A1. 什么叫残局库?(endgame tablebase,简称egtb)
概述性地说残局数据库是储存了残局局面[经回溯分析计算过]的数据库文件,它使用在棋弈程序上,当进入残局时只要适合使用的残局数据库文件存在,程序将走得非常完美。
多数棋弈引擎并不一定要到达残局库所涵盖的局面时才使用残局库。例如,在到达如此局面之前几步,引擎计算(但还没走棋)一系列交换之后直接进入残局库里存有的局面。引擎于是搜索探查残局库并取得那个设想局面的结果。如此当然提高了棋力。
【译注:作者说他不熟悉残局数据库的技术细节;译者也不熟悉,那也需要一定数学和程序设计基础。但作者的解释未免也太过简单些了,不妨试着这样解释:残局库是经特别算法产生的特定格式的、储存各限定棋子数目的残局之所有局面及其估值的数据库文件集合。比如王+车对王的最简单残局,其相应数据库文件就储存了由这三个棋子在棋盘上组成的一切可能局面及估值,所以当局面到达王+车对王局面时,引擎就直接在数据库中搜索、对照局面并取出相应估值,这样它“想都不用想”就知道该如何走。因为制作残局库文件时,用回溯分析计算过所有局面,得出最佳结果,因此按残局库里的走法走相对应的残局是最正确最完美的(这是对合格残局库的要求)。所以使用残局库大大提高了引擎走末段残局的棋力--几乎不花时间计算且又走出最准确的棋步。目前,棋子数目最大的是六子残局,即双方剩下棋子加起来一共六只,不管什么组合(显而易见,双方各有一只王加起来就占了两子)。】
A2. 有多少种残局库格式?彼此有什么不同?
有各种各样的残局库格式,包括肯·托普森式(Ken Thompson)、史蒂文·爱德华兹式(Steven J. Edwards)、欧根尼·纳利莫夫式(Eugene Nalimov)以及Chessmaster9000专用的EDGB残局库格式。
不过总的来说它们划分为两种残局库类型:将杀步数(DTM)类型和变换步数(DTC)类型。粗略地以非专业语言来说,彼此之间区别如下:
将杀步数(DTM)类型:即Distance to mate,这种类型的库为每一个局面储存最短的将杀可能(以层,即ply来计算,一层相当于半个回合)。例如Nalimov残局库。
变换步数(DTC)类型:即Distance to conversion,这种类型的库储存每一个局面及其一个“转换”之间的最短层数。所谓一个转换,指或者是兵升变,或者某子被吃去,或者出现将杀。例如Thompson残局库。
另外,无论是DTM还是DTC类型的残局库,都不能识别50回合自然限着规则。为了克服它们的缺点,已经提出了DTZ和DTR另外两种类型。但至今只停留在理论上。
说到具体每种格式的区别,还不能简单就说得清楚的。Crafty的作者于2000年10月在新闻组作过如下解释:
“Edwards式:属于将杀步数(DTM)类型。Edwards式的主要问题是这种残局库体积比其它的庞大。
“Nalimov式:也属于将杀步数(DTM)类型,但Nalimov式的残局库文件是压缩的,也可以以压缩形式使用而无不利之处。对于拥有全部3、4、5子残局的残局库,别的格式其文件总数大小超过30G,而使用这种格式的大约只有7.5G。
“Thompson式:属于变换步数(DTC)类型(每当发生吃子,残局的“级数”都变小)。这种格式难以以压缩形式使用,相对于Nalimov式,它提供的信息也不相同……比如,它告诉你一些信息,却没有区分是负还是和,而Nalimov式对此则有区分。
“Nalimov式是最佳选择。几乎每个引擎都支持它……”
当然,他没有提及仅是Chessmaster9000专用的EDGB格式残局库,因为EDGB是2002年8月才发布的。Nalimov式仍然是最流行的在用残局库格式,因此我想再多谈一点这种格式。
Nalimov式几近“完美”,因为它把吃过路兵也考虑进去了。但是没把王车易位也考虑进去。只不过,大概只有排局迷才会对此计较。
总的来说,现代几乎所有的国际象棋程序包括大多数Winboard引擎使用Nalimov式残局库,一部分原因是它们不设版权,一部分原因它们更高效。现在Nalimov式残局库已经出了部分6子残局库。Nalimov式残局库有两种形式,压缩的和非压缩的,压缩的以"emd"为文件后缀。
多数现代棋弈程序能解压使用压缩的残局库,例如Crafty从16.5版本后就支持压缩的Nalimov式残局库。我注意到有个Winboard引擎Esc只能用非压缩的。
残局库还有其它一些格式,但比较少见。比较著名的,商业性高级棋弈软件Nimzo8使用它的Nimzo残局库,这种残局库放入到内存中使用,因此读取比较快。一直没有公开发表但棋力不俗的Ferret也使用它的专用残局库。我文章余下部分,除非特别说明,残局库都是指Nalimov式。
A4. 常见棋弈程序是否支持、以及各支持什么格式的残局库?
这里有一些:Chessbase出版发行的那些大名鼎鼎的高级软件比如(Deep)Fritz、Junior、HIARCS、Shredder 5.0+等都支持Nalimov式;Shredder 5.0+另支持Thompson;Nimzo8+另支持自身的Nimzo残局库;Rebel Tiger 2.0和Chess Tiger 14.0也支持Nalimov式【CT15也是】,早期Rebel不支持任何残局库;Chessmaster 9000及以后版本支持其专用的EDGB残局库;Chess Genius 6.5支持Thompson式;绝大部分免费的Winboard引擎都是支持Nalimov式,其中Crafty在15.21版本之前使用Edwards式,之后只支持Nalimov式;16.5版本之后可使用压缩的Nalimov式残局库。
A5. 从哪里可得到残局库?
如果你有Chessbase发行的软件比如Fritz,你就同时拥有3-4子压缩Nalimov式残局库。但你可能觉得不够,有三种方法可得到更多:购买、下载、自造。如果你有Chessmaster9000,CD原盘上已附带所有4子和部分5子残局库。写作此文时,Chessmaster9000专用的这种EDGB残局库既还没有得出售、也没有地方下载。
Chessbase出版发行的The Chessbase Endgame Turbo CD一共四张CD,包含Nalimov式全部3和4子、以及部分重要的5子残局库,还可找得到一套9CD的,包含更全。
关于下载,你可以到ftp://ftp.cis.uab.edu/pub/hyatt/TB去下载所有3、4、5和少部分6子残局库【译注:对于熟悉国际象棋软件的,这个FTP站可说大大有名,既可以下载Nalimov式残局库,也是提供各版本Crafty下载的老家】,要下载5子以上的残局库,你需要较快的网上下载速度,因为它们很大。【单单一个文件上百M是很平常的,而且文件很多】
至于自造残局库,可使用tbgen.exe这个工具,下载:ftp://ftp.cis.uab.edu/pub/hyatt/TB/tbexe.zip,教程可在http://moq.pythoz.com/WinBoard.htm找;http://www.aarontay.per.sg/winboard/EndgameP.html也有。但想自造5子残局,需要很快的电脑和大量的内存。
A9. 残局库文件有多大?我需要完整的5子残局库吗?
注意都是指Nalimov式。
安装残局库文件越多,程序的棋力就越强。可是,一套完整的3、4、5子残局文件要占7.05GB的硬盘空间!【所以想下载的话有些心理准备】注意你购买的很多号称“全版”的残局库CD其实并不是完整的,有些不重要的残局库被剔除了,比如王+后+车+象对单王这样的5子残局,引擎靠算完全足够了,没必要用残局库。人们多数都是下载完整的3子和4子库,然后选择一些5子库来下载。由于残局中有车存在的情况较多,所以优先下载带车的残局库文件。
一般不同子数的残局库文件放在同一目录下,然后在引擎的设置文件中指明残局库的路径就可使用了。除非另有特别需求可有些放在子目录下,而且要检查一下你的引擎、或界面是否允许设置指向不同的残局库路径。Yace的作者指出,几乎所有的引擎都支持同时指向不同的残局库路径。
使用残局库时,有个问题要注意处理好,否则可能出现啼笑皆非的情况。比如你有王+车+兵对王+车的残局库文件(假定你已有全套3和4子残局库),这种情况下你应同时还有王+后+车对王+车的残局库文件,因为要考虑兵升变为后的情况!
有些引擎很“笨”的,假如你缺少王+后+车对王+车的残局库文件,在某些强方可胜的王+车+兵对王+车残局里,且兵可升变为后的情况下,它竟然不懂得升变的!为什么会这样呢?因为你有王+车+兵对王+车的残局库文件,对于当前局面引擎通过查找残局库看到强方胜;而对于兵升变为后的局面,引擎找不到相应王+后+车对王+车残局库文件,虽然兵升变为后,引擎当然评价强方获得很高分的优势(其实也是胜势),但也是只会定为“相对不确定”,也就是说很高分的优势还是不如已明确指出的胜利“更高分”!类似的情况还有,比方你有王+后+兵对王+后的残局库文件却没有王+后+后对王+后文件,那么……
有些引擎比较“智能”,能避免这个问题,因此缺乏某些残局库文件也没关系;但有些比如Fritz、Tiger、Amy、Comet、Gandalf就不会处理了。【译注:原文如此,但他没说到哪个版本的Fritz和Tiger都有这个问题】
当然,上述那个情况,如果是存在有快速将杀的可能,倒不一定出现这个问题。
注意,Yace目前还不支持4+1的5子残局库,即一方有王和随便三子/兵,另一方单王;【译注:4+1未必很好胜,甚至难胜的;原文提到,但没说什么,这种特殊情况,比如:王+三只最边的兵叠在一起对处在这边上的单王……】
A10. 关于6子残局库
就我所知,使用到6子残局的引擎还不多,尽管从原理上让引擎使用6子残局库很简单。
6子残局库的用法没什么变的,一样。能下载Nalimov式6子残局库的地方是ftp://ftp.cis.uab.edu/pub/hyatt/TB/Six/,目前还不多,而且一个文件就大于2G,所以分成两部分供下载。 引擎使用查找6子残局库,对于系统还有一些严厉的技术要求,要求很高。
目前的6子残局库,不包含兵的几乎齐了,而包含兵的还没出现。估计全套的6子残局库要占用1000G的空间大小。
A11. 关于残局库是否工作正常和是否出现内部错误。
残局库的内部错误,是指下载下来或自己制作的残局库中的某个(或某些)文件内部出现“腐朽”,结果不但发挥不了效力,甚至可能导致某些使用它(们)的引擎启动不了。这当然是个问题,想想看残局库的文件有这么多啊,想抓出究竟是哪一个文件有内部错误很不容易。
不过要知道残局库是否工作正常并非没有办法,用引擎中分析局面时,特别是专门根据你所拥有的残局库而设定局面时,往往光凭观察就知道残局库是否在使用:引擎走棋或给出估值很迅速,“想都不想地”,而且给出的估值一般恒定不变【译注:另外那些“一眼看出”数十步之后杀棋的肯定使用到了残局库】。有些引擎在分析模式时会在思考变化上指出估值是来自残局库,例如Crafty在主变后方会加上“<EGTB>”字样。【译注:也可以打开引擎的log模式,分析后手工文本方式查看log文件,往往有说残局库的使用情况,比如Ruffian】
假如你使用Nalimov式残局库,要批量检查一大批文件有更简单办法:
1、使用datacomp.exe;
2、下载残局库时会见到MD5验证文件,可以使用之检查,见http://www.aarontay.per.sg/Winboard/md5.html;
这些需要做一些操作,供有兴趣者自行研究。另外译者还推荐你若有光盘刻录机,不妨刻录备份一到两套残局库,有什么问题覆盖回来就是了。不少人用了几年的残局库,也未出现过这种文件内部错误。
A13. Crafty怎么样使用残局库?
Winboard下的引擎一般都要手工编辑引擎配置文件。编辑Crafty的引擎配置文件Crafty.rc,在里面加一行 tbpath=你的残局库硬盘实际路径。其它引擎的设置大同小异,只不过:1)不同引擎的配置文件名称可能不同,比如yace是yace.ini,Ruffian是ruffian.ctg 等等,都是文本方式打开;2)参数写法不同,不过从字面上一般都可以看出是哪个。
假如你是用Fritz等商业程序,则是在option项里的tablebase标签设定,以Deep Fritz7为例如下:
可注意到它有三栏,如果你的残局库都放在同一个目录里,可以只在第一栏填或按选残局库路径,否则可填更多路径。残局库是可以分放在不同路径的,目的是可临时手工选择使用哪些。那里还可顺便设残局库缓存数目。
其它软件的残局库设定方法,一般在菜单中也不难找到。
A14. 残局库文件的成对性
譬如残局库文件kqkr,即王+后对王+车,但哪方持后哪方持车呢?显然一个完整的残局库应该是白方黑方的情况都要考虑,即要对称考虑。
早期的Nalimov式残局库需要两个文件.nbw 和.nbb来考虑这种对称性,上述例子就是分别有kqkr.nbw.emd和kqkr.nbb.emd两个文件。所有残局库文件都是这样成对出现的,下载时两个都要下载才构成一个完整的王+后对王+车残局库。最后的后缀.emd表示这是经过压缩的残局库文件,不压缩的话体积大很多。现在大多数引擎能直接使用压缩的残局库。
但自从六子残局库开始出现之后,出现新的格式,某些残局库只需要一个文件就足够了。但同时也需要更新版本的引擎才支持只需一个文件的残局库,而且绝对对称的那些残局,比如krkr等还是两个文件都要。这个以后再说。
目前为稳妥着想,最好还是成对文件都下载使用。
顺便说说,免费下载下来的Nalimov残局文件是,比如kqkr.nbw.emd,而Chessbase发售的endgame turbo光盘所带的则是,比如kqkrnbw.emd,中间少了个圆点。但使用起来这两者看不出有什么区别,反正Fritz两种都认。它们可以互换。
A15. 救命!残局库还是用不了怎么办!
原因可能有:
1、残局库路径指向错误;
2、文件内部错误(“腐朽了”)或文件名错误地改了;
3、没有成对下载使用,.nbw 和.nbb要一起有的;
4、残局库规格不符合当前引擎要求。
第一个原因最常见,特别是改了路径却忘了改指向;文件“腐朽”有可能出现在下载过程中出错,也可能硬盘有错或其它软硬件操作错误导致(断电、非法操作等有可能导致);第三个原因其实也经常出现,下载时一定要看清,尤其五子残局以上的由于太大,不少人都是选择只下载一部分;第四原因要先了解引擎是否只支持别的残局库,一般Nalimov式最通用,但chessmaster就不用它。
如果某些局面里,引擎奇怪地不愿意走最明显取胜的着法[一般是升变为后],那就要怀疑是不是出现残局库不完整的问题【不是前面说的文件内部错误】,其它文章有说。当然前提是你要证实引擎是不是发现还有更明显的胜法。
A16. 有什么图形界面工具可以更直观察看残局库?
1、有一个免费的数据库工具SCID http://scid.sourceforge.net/,它的作者说有这个功能;
2、Shredder6的"endgame oracle" ;
3、一个叫Wihelm的免费工具。
出处: Aaron's Winboard and Chess Engines FAQ
译者: michael
类型: 略有删节