《對弈程序基本技術》專題
 
后臺思考
 
Bruce Moreland /
 
對手在走棋的時候你會做什么
 
  國際象棋程序能夠在規定的時間內思考局面,走出它認為的最佳著法,然后坐在一邊等對手下,對手出了著法后,再做同樣的事。
  對于程序來說這太簡單了,但是缺點是浪費了很多可以處理的時間,因為對手在思考時,程序做在一邊空閑著。
  在一些國際象棋書上,有一些思想說的是你不著棋時該做什么。一個想法就是在對手思考時,你也在考慮對策,關注到你走棋時將出現的路線。這對人類棋手來說是個不錯的主意,但是如果要在電腦國際象棋程序上實現,這并不簡單。
  我用我的程序參加1995年在香港舉行的世界電腦國際象棋錦標賽(WCCC)時,自以為合理地解決了這個問題。輪到對手走棋時,我的程序就扮演對手的角色,也坐在那里想。當我的程序又開始走棋時,“散列表”里已經記錄了很多很有用的信息,前面幾層能夠很快地搜索完。
 
我認為這是一個更好的方法
 
  這個方法用得很好,使得我沒有得最后幾名,但是那次比賽我學到了一個更好的辦法,我想現在所有人都用這個辦法了(可能那時候就是如此)。這個技術稱為“沉思”(Pondering)或其他諸如德語中翻譯過來的“永久智能”(Permanent Brain)。我不懂德語,但是更好的翻譯可能應該是“連續思考”。
  當你的程序在走棋時,它會產生一個“主要變例”。這個主要變例通常不止一個著法,主要變例中的第一個著法就是下到棋盤上的,而剩下的那些只是顯示在屏幕上。
  第二個著法就是程序認為的對手會走的著法,它通常是個好的著法,并且在很多情況下對手最終會走這個著法。
  這有點像是在賭對手會走這個著法,賭贏了就告訴程序對手確實走了這個著法。
  因此對手在思考一個著法的時候,你的程序就猜了一個可能會選擇的著法,并且在此基礎上思考你的應對。
  如果你的程序猜得正確,你會在走下一步著法的時候有一個很好的開端,你的程序從而很可能想得更遠,并且很快就能出子。
  有一種情況經常出現在兩臺計算機的比賽中:一個程序在思考著法,然后出子,另一個程序就馬上回應。第一個程序又開始思考并出子,而第二個又馬上回應。這種情況會持續很多步,直到第二個程序在自己的時鐘上積累了足夠的時間,使得它認為沒有必要馬上出子。
  【譯注:根據剩下的時間和需要走的步數,國際象棋程序可以決定一步棋允許花多少時間的(國際比賽通常是時段制的,當然加時制也可以作相應的處理)。當立即出子時,剩下的時間沒有減少,而需要走的步數減少了,因此一步棋允許花的時間就多了,這就相當于積累了時間。
  某些程序可以估計它多搜索一層所需要的時間,如果它沒有積累到足夠的時間來多搜索一層,那么在后臺思考中已經把前面的搜索做完了,它就會馬上出子。如果它積累到了足夠的時間,那么它通常會選擇多搜索一層,讓棋下得更好。】
  如果對手沒有走出預測的著法,你的程序只要簡單地撤消這個預測著法,執行對手走的那個,然后開始為自己思考著法。
 
另一個思想
 
  在1995年的WCCC上,我的程序有機會挑戰Hitech。我的程序下出了要輸的局面并且開始長時間思考。在我的程序思考走哪步時,Hitech對我將要走的那步想了足夠長的時間,并且開始考慮另一種著法了。如果我的程序可能走出的著法Hitech都能想到,那么它當然可以迅速出子。
  我不知道這樣做是好是壞,但這是很值得考慮的。
  【為對手預測著法來進行后臺思考,是目前普遍的做法。在UCI協議(國際象棋通用引擎協議)中,引擎甚至沒有必要自己設計這樣的策略。UCI協議只要求引擎在給出著法的同時給出后臺思考的預測著法(即主要變例中的第二個著法),例如:
bestmove e2e4 ponder e7e5
  如果界面的后臺思考功能打開,界面就會根據預測著法把局面告訴引擎,讓引擎進行后臺思考,例如:
position startpos moves e2e4 e7e5
go ponder <time_settings>
  此時引擎就在對手著棋的時間里思考,而自己的時鐘是關閉的。當對手出子后,如果預測命中,界面就會向引擎發出后臺思考命中的指令:
ponderhit
  讓引擎開啟自己的時鐘,繼續思考,直到它想出著法為止,例如:
bestmove g1f3 ponder b8f6
  如果預測沒有命中,那么界面就必須中止引擎的思考:
stop
bestmove g1f3 ponder b8f6
  中止思考后,引擎同樣會返回一個著法,但界面不會理會。隨后界面把對手的著法告訴引擎,并讓引擎重新思考,例如:
position startpos moves e2e4 c7c5
go <time_settings>
  在UCI協議中,原作者提到Hitech的這種后臺思考策略(即預測著法想了足夠長的時間,開始想第二個預測著法了)是無法實現的。】
 
后臺思考對棋力的增強
 
  我沒有考慮過這個問題,但是它會使搜索進行得更深,或者時間花得更短,所以肯定會增強棋力的。
 
  原文:http://www.seanet.com/~brucemo/topics/pondering.htm
  譯者:象棋百科全書網 ([email protected])
  類型:全譯加譯注
  • 上一篇 其他策略——藐視因子
  • 下一篇 其他策略——殘局庫
  • 返 回 象棋百科全書——電腦象棋
  • www.ejnwjd.tw
    快乐双彩今晚开奖结果