國際象棋譯文苑》文摘
 
殘局庫對引擎棋力的負面影響
 
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.ejnwjd.tw
    快乐双彩今晚开奖结果