国际象棋译文苑》文摘
 
残局库对引擎棋力的负面影响
 
Aaron Tay
 
  说EGTB(残局库)有可能降低棋弈引擎的水平,这乍一听起来好像违反了常识。关于全套的345子残局库究竟对引擎的水平有多大帮助大概是有争论,有些人认为能提高50个等级分,有些人认为最多20分,甚至有些人认为没有任何提高帮助(曾有测试指出Crafty用或不用残局库,棋力并没什么实质性不同)。持最后一种意见的认为应取决于设计引擎时给它加入了多少残局知识,不过用上残局库也应该不会对引擎有妨碍。但读完此文你会发现,在有些局面里使用残局库的确会导致棋力水平的降低,或者使引擎为寻找最佳着法所花的时间更长。目前6子残局库还不大采用,本文只研究5子及以下的残局库。以后的随技术进步以后再说。【译注:而且本文只主要说最常用的Nalimov式残局库】
  你可能认为那些局面很少出现而不以为意。要说明的是,我们认为残局库的使用能提高引擎棋力,是因为引擎不但在局面已经出现时、而且可能还在搜索时就能调用它们【译注:即哪怕当前局面虽然在残局库里没有,但如果即将进入了,于是引擎在进行更深搜索时就已经可以预先探测调用相关残局库了;搜索(search)指只凭引擎的算法进行棋步寻找计算;探测(probe)指对残局数据库进行棋步寻找探查;至少在本译文中如此定义】。但我也可以指出,这有些因素反而可能妨碍引擎,以致抵消甚至损害使用残局库的优越性。这里列出一些残局库如何降低棋力的可能性(从最轻微的到最严重的)
 
1) 不完整的残局库
 
  这是第一个可能性。已经“很著名”的了,避免办法也容易,要么使用完整的,要么在引擎设计时解决。之前的文章已谈到过这个问题。
 
2) 残局库不考虑王车易位
 
  Nalimov式残局库是不考虑王车易位的。
  如图1局面,黑先,条件是后翼易位还可行【译注:所以如果你在自己的软件上摆这个局面测试时,一定不要忘记设定易位可能】
 
 
  结果Winboard下的使用了有关345子残局库的Crafty18.13会走 1..Kxd7?。非常奇怪,它认为 2 0-0-0+ 之后白方17步杀是当前局面的最佳路线!
  假如去掉残局库,Crafty会走 1.. Kd8,然后白方面临h兵的升变威胁,最苟延残喘的是 2.Ra8+ Kxd7,于是随后简单的15步杀。结果事实上当前局面不是白方,而应该是黑方的17步杀!
  我认为这样的局面极罕见(试问大家见过几次到如此残局了还保留易位权利的吗?),所以倒不必过于不安。另外引擎设计者也可以有所改动,加入检查易位权利以避免这个问题。
 
3) 残局库不考虑50步自然限着
 
  我认为这个问题大得多。
  如图2局面,白先。
 
 
  在短思考时限下,Crafty要走 1.Rxf5 Rxf5,然后根据王车象对王的残局库所示,是白方65步杀。可惜根据FIDE规则,黑方可根据50步自然限着规则要求和棋的。对于所有需要超过50步才能胜的残局库(当然前提是期间没有吃子和没有走兵),这个问题都存在。过去FIDE曾专为一些特殊的残局放宽过限制(例如王双马对王兵),但后来又统一为都是50步限着。
  然而这个局面一定是和棋吗?事实上,如果你让Crafty想得足够长时间,它就会发现先有48步杀(1.Kd8),进而发现23步就杀(1.Kd6);另一个引擎Gandalf更发现 1.Kd6 之后17步杀,因此我们知道至少有17步杀存在!主变是 1.Kd6 Kg7 2.Rf4! Rxf4 3.Bxf4,然后……这是我见过的最短路线,尽管未必敢说没有更短的路线。
  要注意的是,尽管这个问题是因为Nalimov式残局库属于DTM类型的库。至于DTC类型的残局库,虽然理论上应可解决这个问题,只需在同一个库里检查最终的杀棋没有突破50步自然限着即可。然而,当前的托普森残局库也没考虑这一点。至于其它类型的残局库考虑了50步自然限着,但又有它们自身的问题。
  似乎除了让引擎懂得如果在残局库里找到了能杀但却是突破50步自然限着的路线,就继续搜索,之外引擎作者还难以找到其它解决办法。别说这只是部分的解决,而且该法本身还有不少技术困难。
 
4) “懂得太多”的尴尬
 
  由于有残局库,引擎有时会因为“懂得太多看得太远”了反而出现尴尬情况。比如,装有残局库的一方引擎在残局库里发现自己要输棋,它就可能过早投降;问题是对方(人或者没有装残局库的引擎)却不一定知道怎么杀的【译注:比如要漫长几十步之后才能杀且很不好找到正着的那些局面】。类似的尴尬还有,某个局面里假如走某个变化取胜的机会达到99%,对方只有在最精确的防守下才能和棋(如果没有残局库将非常困难);可是正因为残局库就是指示最精确的变化,结果持有利一方的引擎由于发现在这“最精确”的变化里必然成和,于是就会放弃这条有99%取胜机会的路线。
  不过严格来说,这也不好怪残局库,特别是你要追求100%客观着法的时候。某些情况下,几乎所有引擎,不管用没用上残局库,都会由于看得太远而出这些“过于精确”的尴尬。
 
5) 残局库降低了搜索速度
 
  由于要在残局数据库里探测,所以引擎的搜索速度下降。这个效应很难评估。我们知道探测数据库会降低引擎的每秒搜索速度,通常使单位时间内搜索的深度下降【译注:残局数据库是存放在硬盘上的文件,搜硬盘当然比在CPU和内存中运算慢很多;这主要是当前硬件技术决定的】。有时搜索深度下降,但由于使用到了残局库,也能找到好棋。问题是在部分分支变化里找得到好棋一定能抵消搜索速度全面下降的负面影响吗?在还没探测到残局库末端的情况下搜索速度全面下降意味着引擎思考短浅得多;假如当前探测的其实是没有用的局面,根本不会发生的或者能避免的,这种时候搜索速度全面下降的负面影响就大了。
  这个问题如果在引擎-引擎之间对战情况,就只能通过专用测试局面来解决。曾经有一次残局能力测试,包括7种商业引擎,使用了10个专用残局测试局面。引擎(轮流)分成一方用残局库另一方不用,残局库包括全部5子残局。测试结果,用残局库一方仅以1分之微险胜不用残局库一方,70.5-69.5
  但是,人们发现在其中某些局面里,不用的那一方表现得比用的那一方更好!把其中一个看来非常需要残局库的局面拿走(在这个局面的测试里用的一方大胜),余下9个局面的测试总结果,却是不用的那一方以66-60大胜!
  不用残局库的一方成绩最好的是图3局面,黑先。
 
 
  当然我们可以看出,仅仅拿走一个测试局面就导致成绩逆转,可见测试局面的选择有很大关系。但这个测试仍然充分说明了对于某些引擎和某些局面来说,用上全套35子残局库的确降低了引擎的棋力水平,而不仅是有没有作用那么简单。
  【译注:译者也曾在本站留言簿发过一个棋图局面,如图4白先。
 
 
只要有些经验可以看出白方走哪步胜,高级的引擎也很快看出这步(另一步1.Nf3也行),但前提是不要用残局库;如果给这些引擎挂了残局库,结果是哭笑不得的——虽然也不能说它们一定错。试试?】
  我认为需要做更多的测试,测试更多的局面和使用更多的引擎。我无法细分每种引擎来说,所以如果有引擎设计调试得用上残局库全部都表现得好也不是不可能的。
  另外,若用5子残局库,要注意优选做法可能是也装上其残局库子集。似乎使用4子残局库很“安全”,另外再加上王车兵对王车残局库吧,它很常出现。【译注:所谓“残局库子集”,是指上一级残局库演变而来的各种可能残局,典型的比如王兵对王兵,既然兵有可能升变为后、车、马、象,那么残局库子集就是王后对王兵、王车对王兵等等类推,由于Nalimov残局库每一种残局文件总是一白方一黑方成对出现下载的,所以只要成对下载,究竟是哪一方升变就不用专门考虑了;否则若只有王兵对王兵残局库,却没有王后对王兵等子集,如其它文章说过,有些引擎到此会出现糊涂的;到译此文为止,不知道这个问题有多少引擎已解决了;大可一试】
  有一个情况要注意,上面提到的残局库削弱引擎棋力水平的五种情况(可能要除去第一种),只会是当引擎在搜索的同时又已经开始进行残局库探测的情况下,才会产生所说的负面影响。如果当前局面已经到达了你残局库里所拥有的局面,就不会出现上述负面问题。
  有研究者提出的建议很有意义,如果引擎能够让使用者指定在引擎搜索过程中去探测哪些残局库(最理想的是探测那些光靠引擎自己的常规搜索和内建知识还不能很好处理的局面),以及指定局面到了哪个阶段才去探测残局库(其它的就不探测),那就太好了。
 
结论
 
  我希望这篇文章不会吓得你不敢用残局库了。我个人认为,上述五点除了最后一点,其它的都不大可能有显著影响,即使是最后一点也还需要更多测试去说明。我自己还是会用全套的残局库。
 
  出处:Aaron's Winboard and Chess Engines FAQ
  译者:michael
  类型:略有删节
  • 上一篇 棋弈软件基础——残局库
  • 下一篇 国际象棋程序设计():引言
  • 返 回 象棋百科全书——电脑象棋
  • www.xqbase.com