?? 其他策略——策略和技巧.htm
字號(hào):
face="Times New Roman">57.5%</FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
<DL>
<DT><FONT face=楷體_GB2312 size=5><STRONG>又笨又快還是又好又慢?</STRONG></FONT>
<DT>
<DT> 跟消亡轉(zhuǎn)折類(lèi)似的問(wèn)題是:程序能否通過(guò)速度來(lái)補(bǔ)償知識(shí)的不足?對(duì)于這個(gè)問(wèn)題,<FONT face="Times New Roman">Hans
Berliner</FONT>做過(guò)一個(gè)很有名的試驗(yàn),用他的國(guó)際象棋程序<FONT
face="Times New Roman">Hitech</FONT>很好地回答了這個(gè)問(wèn)題。他去掉了程序中大量的局面評(píng)價(jià)函數(shù),由此產(chǎn)生了另一個(gè)程序,命名為<FONT
face="Times New Roman">Lotech</FONT>。然后他用<FONT
face="Times New Roman">Lotech</FONT>對(duì)陣<FONT
face="Times New Roman">Hitech</FONT>,并且給<FONT
face="Times New Roman">Lotech</FONT>多搜索一層的優(yōu)勢(shì)。一個(gè)令人驚奇的結(jié)果是:<FONT
face="Times New Roman">Lotech</FONT>總是能贏<FONT
face="Times New Roman">Hitech</FONT>。因此,有人認(rèn)為一定存在一個(gè)轉(zhuǎn)折點(diǎn),使得<FONT
face="Times New Roman">Hitech</FONT>能打敗<FONT
face="Times New Roman">Lotech</FONT>。在國(guó)際象棋中,這個(gè)轉(zhuǎn)折點(diǎn)很難找到。我曾經(jīng)用自己的西洋跳棋程序來(lái)找這個(gè)轉(zhuǎn)折點(diǎn),但是當(dāng)時(shí)我發(fā)現(xiàn)<FONT
face="Times New Roman">Lotech-Cake</FONT>總是能贏<FONT
face="Times New Roman">Hitech-Cake</FONT>。
<DT><FONT color=#0000ff> 【如果計(jì)算同樣深度,</FONT><FONT face="Times New Roman"
color=#0000ff>Hitech</FONT><FONT color=#0000ff>棋力比</FONT><FONT
face="Times New Roman" color=#0000ff>Lotech</FONT><FONT
color=#0000ff>100</FONT><FONT color=#0000ff>分的話(huà),但由于多搜索一層使得</FONT><FONT
face="Times New Roman" color=#0000ff>Lotech</FONT><FONT
color=#0000ff>增加了</FONT><FONT face="Times New Roman"
color=#0000ff>200</FONT><FONT color=#0000ff>分,所以棋力反而比</FONT><FONT
face="Times New Roman" color=#0000ff>Hitech</FONT><FONT
color=#0000ff>強(qiáng)。根據(jù)消亡轉(zhuǎn)折來(lái)推斷的,超過(guò)某個(gè)深度以后,多搜索一層使得程序的棋力沒(méi)有太大長(zhǎng)進(jìn),只要長(zhǎng)進(jìn)低于</FONT><FONT
face="Times New Roman" color=#0000ff>100</FONT><FONT
color=#0000ff>分,那么這個(gè)時(shí)候</FONT><FONT face="Times New Roman"
color=#0000ff>Hitech</FONT><FONT color=#0000ff>就能擊敗</FONT><FONT
face="Times New Roman" color=#0000ff>Lotech</FONT><FONT
color=#0000ff>了。如今電腦思考得越來(lái)越深,導(dǎo)致的結(jié)果就是:程序設(shè)計(jì)師們對(duì)知識(shí)的重視程度增加了。】</FONT>
<DT>
<DT><FONT face=楷體_GB2312 size=5><STRONG>機(jī)器學(xué)習(xí)</STRONG></FONT>
<DT>
<DT> 機(jī)器學(xué)習(xí)是一個(gè)很吸引人的主題。計(jì)算機(jī)程序利用前人經(jīng)驗(yàn)的方法有很多,其中很多方法被程序作者稱(chēng)為“學(xué)習(xí)”<FONT
face="Times New Roman">(Learning)</FONT>,我將在這里總體介紹一下。最普遍的學(xué)習(xí)是機(jī)械學(xué)習(xí),當(dāng)你的程序輸?shù)粢痪制鍟r(shí),它就把這局棋記住了。這個(gè)方法可以在開(kāi)局庫(kù)的學(xué)習(xí)中實(shí)現(xiàn),你的程序會(huì)把一個(gè)開(kāi)局庫(kù)著法標(biāo)記為劣著,如果這個(gè)著法會(huì)輸棋,那么下一盤(pán)棋它就選擇別的著法。這個(gè)方法也可以用一個(gè)小的置換表來(lái)實(shí)現(xiàn),輸?shù)舻钠寰掷锏木置娑家暂數(shù)木置娲鎯?chǔ)起來(lái),這樣,程序就不會(huì)走到這些局面里去。但是,這種學(xué)習(xí)的形式實(shí)在是太具體了,你的西洋跳棋程序會(huì)認(rèn)為某個(gè)具體的局面是壞的,類(lèi)似典型的局面也是壞的,你的程序卻視而不見(jiàn)。在西洋跳棋中“牽制”<FONT
face="Times New Roman">(Holds)</FONT>非常重要,例如你的<FONT
face="Times New Roman">3</FONT>個(gè)兵被對(duì)手的<FONT
face="Times New Roman">2</FONT>個(gè)兵牽制住,如果不考慮棋盤(pán)上的其他棋子,那么對(duì)手將要獲勝<FONT
face="Times New Roman">(</FONT>至少獲勝的機(jī)會(huì)很大<FONT
face="Times New Roman">)</FONT>,因?yàn)樗苡锌赡芤兞恕D阌米罨镜臋C(jī)械學(xué)習(xí)會(huì)知道這種牽制的其中一種局面會(huì)輸,但是還有成千上萬(wàn)種類(lèi)似的局面呢,遇到跟這個(gè)局面有微小差別的其他局面,再下一盤(pán)還是會(huì)輸。這種類(lèi)型的學(xué)習(xí)不是真正意義上的學(xué)習(xí),把這些程序稱(chēng)為“智能”<FONT
face="Times New Roman">(Learning from Mistakes)</FONT>純粹是糊弄人的。
<DT> 另一種類(lèi)型的機(jī)器學(xué)習(xí)用來(lái)自動(dòng)調(diào)整評(píng)價(jià)函數(shù)的權(quán)重,這屬于遺傳算法<FONT face="Times New Roman">(Genetic
Algorithms)</FONT>的范疇,把遺傳算法作用在評(píng)價(jià)理論上,就自然地得到了最適合的程序。以下就是這種算法的工作原理,你產(chǎn)生一個(gè)評(píng)價(jià)函數(shù)<FONT
face="Times New Roman">(</FONT>典型的評(píng)價(jià)函數(shù)是線(xiàn)性的<FONT
face="Times New Roman">)</FONT>,每一項(xiàng)都有一個(gè)權(quán)重,因此有:
<DD>
<DD>eval = w_1 * f_1 + w_2 * f_2 + ... + w_n * f_n
<DT>
<DT> <FONT
face="Times New Roman"><EM>f</EM><SUB><EM>i</EM></SUB></FONT>就是局面的各個(gè)因素,例如在西洋跳棋中,你可以把<FONT
face="Times New Roman"><EM>f</EM><SUB>1</SUB></FONT>定義為黑方有強(qiáng)大的底線(xiàn),因此<FONT
face="Times New Roman"><EM>w</EM><SUB>1</SUB></FONT>越大,你的程序就越會(huì)試圖讓底線(xiàn)留下棋子。因此當(dāng)你選擇這些因素時(shí),就必須順便優(yōu)化相應(yīng)的權(quán)重。遺傳算法在一開(kāi)始時(shí)使用一些隨機(jī)產(chǎn)生的程序,然后通過(guò)它們之間的對(duì)陣來(lái)找出哪些是好的哪些是壞的。一些壞的程序被篩選掉了,合適的程序幸存下來(lái)并得到繁衍——或者是在兩個(gè)好的程序之間作交換<FONT
face="Times New Roman">(</FONT>隨機(jī)地在兩個(gè)好的程序中選擇<FONT
face="Times New Roman"><EM>w</EM><SUB><EM>i</EM></SUB>)</FONT>,或者隨機(jī)改變一個(gè)好的程序。現(xiàn)在你只管繼續(xù)這樣的工作,指望最終能得到一個(gè)好的權(quán)重的組合。這就是上世紀(jì)<FONT
face="Times New Roman">50</FONT>年代<FONT face="Times New Roman">Arthur
Samuel</FONT>在他著名的西洋跳棋程序里用的方法。另外還有其他調(diào)節(jié)權(quán)重的方法,深藍(lán)<FONT
face="Times New Roman">(Deep
Blue)</FONT>的小組用了大量特級(jí)大師的對(duì)局,然后讓程序吻合這些局面。他們對(duì)程序和特級(jí)大師走出一樣著法的頻率作出統(tǒng)計(jì),然后修改了權(quán)重再作嘗試。如果程序能解決更多的局面,那么他們就保留這個(gè)修改,否則就重新修改。最近我知道的調(diào)整權(quán)重的辦法,是<FONT
face="Times New Roman">Michael Buro</FONT>在他的黑白棋<FONT
face="Times New Roman">(Othello)</FONT>世界冠軍程序<FONT
face="Times New Roman">Logistello</FONT>中用到的。他建立了一個(gè)巨大的局面數(shù)據(jù)庫(kù),用來(lái)儲(chǔ)存對(duì)局結(jié)果,然后他把評(píng)價(jià)函數(shù)作用在每個(gè)局面上,通過(guò)優(yōu)化評(píng)價(jià)函數(shù)使得產(chǎn)生的分?jǐn)?shù)盡可能地準(zhǔn)確。
<DT> 所有這些方法都比機(jī)械學(xué)習(xí)更有效。如果某個(gè)程序有對(duì)西洋跳棋中類(lèi)似牽制戰(zhàn)術(shù)的評(píng)價(jià),那么你在評(píng)價(jià)函數(shù)中提高這項(xiàng)的權(quán)重,會(huì)讓程序認(rèn)為所有類(lèi)似情形的局面都是壞的,并且會(huì)避免這些局面。那么這樣說(shuō)來(lái),我們是否已經(jīng)學(xué)到了知識(shí)了?我認(rèn)為還沒(méi)有。如果你的程序本身就不包括這個(gè)評(píng)價(jià)呢?即便再怎樣調(diào)節(jié)權(quán)重,也是不會(huì)有效果的。因此我們將涉及到下面的學(xué)習(xí):
<DT> 神經(jīng)網(wǎng)絡(luò)<FONT face="Times New Roman">(Neural
Networks)</FONT>能夠發(fā)明一些評(píng)價(jià)模式,而不需要有人告訴它,它能對(duì)局面作出評(píng)價(jià),并且結(jié)合到棋類(lèi)程序中。神經(jīng)網(wǎng)絡(luò)由很多輸入口,一些隱含的層次結(jié)構(gòu),以及一個(gè)出口組成。這些連接著入口和出口的層次,實(shí)際上由很多結(jié)點(diǎn)組成,結(jié)點(diǎn)有連接上一層的入口和連接下一層的出口。每個(gè)結(jié)點(diǎn)都可以和其他層有連接,每個(gè)連接是有強(qiáng)有弱的。如果同時(shí)改變連接及其強(qiáng)度,你就能得到一些評(píng)價(jià)模式,并確定他們的權(quán)重。
<DT> 把有評(píng)分的局面告訴神經(jīng)網(wǎng)絡(luò),它就會(huì)得到訓(xùn)練,而在結(jié)合了遺傳算法后,神經(jīng)網(wǎng)絡(luò)也會(huì)自我學(xué)習(xí)。有個(gè)西洋跳棋程序<FONT
face="Times New Roman">Blondie24</FONT>,就是用這種方法實(shí)現(xiàn)了自我學(xué)習(xí)的,并且下得還不錯(cuò)。我認(rèn)為這才是真正的學(xué)習(xí),它和人類(lèi)的思考很接近。<FONT
face="Times New Roman">Blondie</FONT>的作者把他們的程序吹噓得很過(guò)分,但對(duì)于目前大多數(shù)研究者來(lái)說(shuō),事實(shí)上就是如此,你必須大造聲勢(shì)來(lái)獲得資金。
<DT>
<DT><FONT face=楷體_GB2312 size=5><STRONG>改進(jìn)你的程序</STRONG></FONT>
<DT>
<DT> 你花了無(wú)數(shù)時(shí)間來(lái)寫(xiě)你的程序,它現(xiàn)在下得是否還像初學(xué)者?這是很正常的現(xiàn)象,但是請(qǐng)不要失望,我會(huì)告訴你一些技巧。首先并且最重要的是,很多問(wèn)題來(lái)源于代碼中的錯(cuò)誤。<FONT
face="Times New Roman">Alpha-Beta</FONT>算法是最容易藏匿錯(cuò)誤的,你的程序評(píng)價(jià)了成千上萬(wàn)個(gè)局面,而你只得到一個(gè)著法,即使<FONT
face="Times New Roman">10%</FONT>的局面是隨機(jī)評(píng)價(jià)的,你的程序仍然在大多數(shù)時(shí)間內(nèi)可以走得正確。因此,你需要你需要做一些額外檢查,以確認(rèn)程序的每個(gè)部分都正常工作。一個(gè)最典型的技巧就是檢驗(yàn)評(píng)價(jià)的對(duì)稱(chēng)性,如果同樣的局面黑白交換后,你的評(píng)價(jià)函數(shù)沒(méi)有返回同樣的值,那么肯定有什么地方錯(cuò)了。如果棋盤(pán)有其他的對(duì)稱(chēng)性<FONT
face="Times New Roman">(</FONT>在國(guó)際象棋的中局里你可以按<FONT
face="Times New Roman">d</FONT>列和<FONT
face="Times New Roman">e</FONT>列作左右鏡像操作<FONT
face="Times New Roman">)</FONT>,你也可以利用這樣的對(duì)稱(chēng)性。代碼要盡可能地寫(xiě)得清晰,優(yōu)化不要操之過(guò)急,否則就得不償失了。在程序用<FONT
face="Times New Roman">Alpha-Beta</FONT>算法走第一盤(pán)棋之前,不要加任何錦上添花的代碼。只有當(dāng)你根除了錯(cuò)誤,才可以著手對(duì)程序進(jìn)行調(diào)整。它是否太慢了?你可以用<FONT
face="Times New Roman">AMD
CodeAnalyst</FONT>這樣的分析測(cè)試軟件來(lái)考察程序的關(guān)鍵部分,并加以改進(jìn)。讓程序和別的程序下棋,這是個(gè)改進(jìn)程序的非常有效的辦法。程序下了幾百盤(pán)棋以后,所有的統(tǒng)計(jì)數(shù)字就都有了,對(duì)你的代碼修改一些地方<FONT
face="Times New Roman">(</FONT>搜索算法,評(píng)價(jià)函數(shù)等等<FONT
face="Times New Roman">)</FONT>,然后再打很多比賽來(lái)確認(rèn)你改得是否有效。如果你改變的只是著法順序,就可以用一組對(duì)比測(cè)試來(lái)代替長(zhǎng)時(shí)間的比賽,看看花的時(shí)間是否減少了,就知道著法順序是否改進(jìn)了。
<DT>
<DT> 原文:<A href="http://www.fierz.ch/strategy5.htm" target=_blank><FONT
face="Times New Roman">http://www.fierz.ch/strategy5.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> 類(lèi)型:全譯加譯注 </DT></DL>
<DIR>
<LI>上一篇 <A
href="http://www.elephantbase.net/computer/other_book.htm">其他策略——開(kāi)局庫(kù)</A>
<LI>下一篇 <A
href="http://www.elephantbase.net/computer/anatomy.htm">結(jié)語(yǔ)——國(guó)際象棋程序剖析</A>
<LI>返 回 <A href="http://www.elephantbase.net/computer.htm">象棋百科全書(shū)——電腦象棋</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>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -