?? 其他策略——后臺思考.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0053)http://www.elephantbase.net/computer/other_ponder.htm -->
<HTML><HEAD><TITLE>其他策略——后臺思考</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb_2312-80">
<META content="MSHTML 6.00.3790.2817" name=GENERATOR></HEAD>
<BODY background=其他策略——后臺思考_files/background.gif>
<DL>
<DIV align=center>
<CENTER>
<DT>《對弈程序基本技術》專題 </CENTER></DT></DIV>
<DIV align=center>
<CENTER>
<DT> </CENTER></DT></DIV>
<DIV align=center>
<CENTER>
<DT><FONT face=隸書 size=6>后臺思考</FONT> </CENTER></DT></DIV>
<DIV align=center>
<CENTER>
<DT> </CENTER></DT></DIV>
<DIV align=center>
<CENTER>
<DT><FONT face="Times New Roman">Bruce Moreland (</FONT><A
href="mailto:brucemo@seanet.com"><FONT
face="Times New Roman">brucemo@seanet.com</FONT></A><FONT
face="Times New Roman">) / </FONT>文 </CENTER></DT></DIV>
<DT>
<DT><FONT face=楷體_GB2312 size=5><STRONG>對手在走棋的時候你會做什么</STRONG></FONT>
<DT>
<DT> 國際象棋程序能夠在規定的時間內思考局面,走出它認為的最佳著法,然后坐在一邊等對手下,對手出了著法后,再做同樣的事。
<DT> 對于程序來說這太簡單了,但是缺點是浪費了很多可以處理的時間,因為對手在思考時,程序做在一邊空閑著。
<DT> 在一些國際象棋書上,有一些思想說的是你不著棋時該做什么。一個想法就是在對手思考時,你也在考慮對策,關注到你走棋時將出現的路線。這對人類棋手來說是個不錯的主意,但是如果要在電腦國際象棋程序上實現,這并不簡單。
<DT> 我用我的程序參加<FONT face="Times New Roman">1995</FONT>年在香港舉行的世界電腦國際象棋錦標賽<FONT
face="Times New Roman">(WCCC)</FONT>時,自以為合理地解決了這個問題。輪到對手走棋時,我的程序就扮演對手的角色,也坐在那里想。當我的程序又開始走棋時,“<A
href="http://www.elephantbase.net/computer/search_hashing.htm"
target=_blank>散列表</A>”里已經記錄了很多很有用的信息,前面幾層能夠很快地搜索完。
<DT>
<DT><FONT face=楷體_GB2312 size=5><STRONG>我認為這是一個更好的方法</STRONG></FONT>
<DT>
<DT> 這個方法用得很好,使得我沒有得最后幾名,但是那次比賽我學到了一個更好的辦法,我想現在所有人都用這個辦法了<FONT
face="Times New Roman">(</FONT>可能那時候就是如此<FONT
face="Times New Roman">)</FONT>。這個技術稱為“沉思”<FONT
face="Times New Roman">(Pondering)</FONT>或其他諸如德語中翻譯過來的“永久智能”<FONT
face="Times New Roman">(Permanent Brain)</FONT>。我不懂德語,但是更好的翻譯可能應該是“連續思考”。
<DT> 當你的程序在走棋時,它會產生一個“<A
href="http://www.elephantbase.net/computer/other_pvcollect.htm"
target=_blank>主要變例</A>”。這個主要變例通常不止一個著法,主要變例中的第一個著法就是下到棋盤上的,而剩下的那些只是顯示在屏幕上。
<DT> 第二個著法就是程序認為的對手會走的著法,它通常是個好的著法,并且在很多情況下對手最終會走這個著法。
<DT> 這有點像是在賭對手會走這個著法,賭贏了就告訴程序對手確實走了這個著法。
<DT> 因此對手在思考一個著法的時候,你的程序就猜了一個可能會選擇的著法,并且在此基礎上思考你的應對。
<DT> 如果你的程序猜得正確,你會在走下一步著法的時候有一個很好的開端,你的程序從而很可能想得更遠,并且很快就能出子。
<DT> 有一種情況經常出現在兩臺計算機的比賽中:一個程序在思考著法,然后出子,另一個程序就馬上回應。第一個程序又開始思考并出子,而第二個又馬上回應。這種情況會持續很多步,直到第二個程序在自己的時鐘上積累了足夠的時間,使得它認為沒有必要馬上出子。
<DT> <FONT color=#0000ff>【譯注:根據剩下的時間和需要走的步數,國際象棋程序可以決定一步棋允許花多少時間的</FONT><FONT
face="Times New Roman" color=#0000ff>(</FONT><FONT
color=#0000ff>國際比賽通常是時段制的,當然加時制也可以作相應的處理</FONT><FONT face="Times New Roman"
color=#0000ff>)</FONT><FONT
color=#0000ff>。當立即出子時,剩下的時間沒有減少,而需要走的步數減少了,因此一步棋允許花的時間就多了,這就相當于積累了時間。</FONT>
<DT><FONT
color=#0000ff> 某些程序可以估計它多搜索一層所需要的時間,如果它沒有積累到足夠的時間來多搜索一層,那么在后臺思考中已經把前面的搜索做完了,它就會馬上出子。如果它積累到了足夠的時間,那么它通常會選擇多搜索一層,讓棋下得更好。】</FONT>
<DT> 如果對手沒有走出預測的著法,你的程序只要簡單地撤消這個預測著法,執行對手走的那個,然后開始為自己思考著法。
<DT>
<DT><FONT face=楷體_GB2312 size=5><STRONG>另一個思想</STRONG></FONT>
<DT>
<DT> 在<FONT face="Times New Roman">1995</FONT>年的<FONT
face="Times New Roman">WCCC</FONT>上,我的程序有機會挑戰<FONT
face="Times New Roman">Hitech</FONT>。我的程序下出了要輸的局面并且開始長時間思考。在我的程序思考走哪步時,<FONT
face="Times New Roman">Hitech</FONT>對我將要走的那步想了足夠長的時間,并且開始考慮另一種著法了。如果我的程序可能走出的著法<FONT
face="Times New Roman">Hitech</FONT>都能想到,那么它當然可以迅速出子。
<DT> 我不知道這樣做是好是壞,但這是很值得考慮的。
<DT><FONT color=#008000> 【為對手預測著法來進行后臺思考,是目前普遍的做法。在</FONT><FONT
face="Times New Roman" color=#008000>UCI</FONT><FONT
color=#008000>協議</FONT><FONT face="Times New Roman"
color=#008000>(</FONT><FONT color=#008000>國際象棋通用引擎協議</FONT><FONT
face="Times New Roman" color=#008000>)</FONT><FONT
color=#008000>中,引擎甚至沒有必要自己設計這樣的策略。</FONT><FONT face="Times New Roman"
color=#008000>UCI</FONT><FONT
color=#008000>協議只要求引擎在給出著法的同時給出后臺思考的預測著法</FONT><FONT face="Times New Roman"
color=#008000>(</FONT><FONT color=#008000>即主要變例中的第二個著法</FONT><FONT
face="Times New Roman" color=#008000>)</FONT><FONT color=#008000>,例如:</FONT>
<DD><FONT color=#0000ff>bestmove e2e4 ponder e7e5</FONT>
<DT><FONT color=#008000> 如果界面的后臺思考功能打開,界面就會根據預測著法把局面告訴引擎,讓引擎進行后臺思考,例如:</FONT>
<DD><FONT color=#ff0000>position startpos moves e2e4 e7e5</FONT>
<DD><FONT color=#ff0000>go ponder <time_settings></FONT>
<DT><FONT
color=#008000> 此時引擎就在對手著棋的時間里思考,而自己的時鐘是關閉的。當對手出子后,如果預測命中,界面就會向引擎發出后臺思考命中的指令:</FONT>
<DD><FONT color=#ff0000>ponderhit</FONT>
<DT><FONT color=#008000> 讓引擎開啟自己的時鐘,繼續思考,直到它想出著法為止,例如:</FONT>
<DD><FONT color=#0000ff>bestmove g1f3 ponder b8f6</FONT>
<DT><FONT color=#008000> 如果預測沒有命中,那么界面就必須中止引擎的思考:</FONT>
<DD><FONT color=#ff0000>stop</FONT>
<DD><FONT color=#0000ff>bestmove g1f3 ponder b8f6</FONT>
<DT><FONT
color=#008000> 中止思考后,引擎同樣會返回一個著法,但界面不會理會。隨后界面把對手的著法告訴引擎,并讓引擎重新思考,例如:</FONT>
<DD><FONT color=#ff0000>position startpos moves e2e4 c7c5</FONT>
<DD><FONT color=#ff0000>go <time_settings></FONT>
<DT><FONT color=#008000> 在</FONT><FONT face="Times New Roman"
color=#008000>UCI</FONT><FONT color=#008000>協議中,原作者提到</FONT><FONT
face="Times New Roman" color=#008000>Hitech</FONT><FONT
color=#008000>的這種后臺思考策略</FONT><FONT face="Times New Roman"
color=#008000>(</FONT><FONT
color=#008000>即預測著法想了足夠長的時間,開始想第二個預測著法了</FONT><FONT face="Times New Roman"
color=#008000>)</FONT><FONT color=#008000>是無法實現的。】</FONT>
<DT>
<DT><FONT face=楷體_GB2312 size=5><STRONG>后臺思考對棋力的增強</STRONG></FONT>
<DT>
<DT> 我沒有考慮過這個問題,但是它會使搜索進行得更深,或者時間花得更短,所以肯定會增強棋力的。
<DT>
<DT> 原文:<A href="http://www.seanet.com/~brucemo/topics/pondering.htm"
target=_blank><FONT
face="Times New Roman">http://www.seanet.com/~brucemo/topics/pondering.htm</FONT></A>
<DT> 譯者:黃晨 <FONT face="Times New Roman">(</FONT><A
href="mailto:webmaster@elephantbase.net"><FONT
face="Times New Roman">webmaster@elephantbase.net</FONT></A><FONT
face="Times New Roman">)</FONT>
<DT> 類型:全譯加譯注 </DT></DL>
<DIR>
<LI>上一篇 <A
href="http://www.elephantbase.net/computer/other_contempt.htm">其他策略——藐視因子</A>
<LI>下一篇 <A
href="http://www.elephantbase.net/computer/other_egtb.htm">其他策略——殘局庫</A>
<LI>返 回 <A href="http://www.elephantbase.net/computer.htm">象棋百科全書——電腦象棋</A>
</LI></DIR>
<DIV align=center>
<CENTER>
<TABLE border=0>
<TBODY>
<TR>
<TD>
<P align=center><A href="http://www.elephantbase.net/" target=_blank><IMG
height=31 src="其他策略——后臺思考_files/elephantbase.gif" width=88
border=0></A></P></TD></TR>
<TR>
<TD><A href="http://www.elephantbase.net/" target=_blank><FONT face=Arial
size=2><STRONG>www.elephantbase.net</STRONG></FONT></A></TD></TR></TBODY></TABLE></CENTER></DIV></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -