?? 中國(guó)象棋對(duì)弈程序elephanteye(象眼).htm
字號(hào):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0050)http://www.elephantbase.net/league/elephanteye.htm -->
<HTML><HEAD><TITLE>中國(guó)象棋對(duì)弈程序ElephantEye(象眼)</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb_2312-80">
<META content="MSHTML 6.00.3790.536" name=GENERATOR></HEAD>
<BODY background=中國(guó)象棋對(duì)弈程序ElephantEye(象眼)_files/background.gif>
<DL>
<DIV align=center>
<CENTER>
<DT><FONT face=隸書 size=6><IMG height=32
src="中國(guó)象棋對(duì)弈程序ElephantEye(象眼)_files/elephanteye.gif"
width=32>中國(guó)象棋對(duì)弈程序</FONT><FONT face=Arial
size=6><STRONG>ElephantEye(</STRONG></FONT><FONT face=隸書 size=6>象眼</FONT><FONT
face=Arial size=6><STRONG>)</STRONG></FONT><FONT face=楷體_GB2312
size=4><STRONG> 版本:</STRONG></FONT><FONT face=Arial
size=4><STRONG>1.3</STRONG></FONT> </CENTER></DT></DIV>
<DIV align=center>
<CENTER>
<DT> </CENTER></DT></DIV>
<DIV align=center>
<CENTER>
<DT>黃晨 <FONT face="Times New Roman">*</FONT> <FONT
face="Times New Roman">2006</FONT>年<FONT face="Times New Roman">3</FONT>月
</CENTER></DT></DIV>
<DIV align=center>
<CENTER>
<DT><FONT face="Times New Roman">( * </FONT>聯(lián)系地址:復(fù)旦大學(xué)化學(xué)系表面化學(xué)實(shí)驗(yàn)室,<FONT
face="Times New Roman">eMail</FONT>:<A
href="mailto:webmaster@elephantbase.net"><FONT
face="Times New Roman">webmaster@elephantbase.net</FONT></A><FONT
face="Times New Roman">)</FONT> </CENTER></DT></DIV>
<DIV align=left>
<DT> </DT></DIV>
<DIV align=left>
<DT><FONT face=楷體_GB2312 size=4><STRONG>一、簡(jiǎn)介</STRONG></FONT> </DT></DIV>
<DIV align=left>
<DT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">ElephantEye </FONT>是一款自由的中國(guó)象棋程序,在遵循《<FONT
face="Times New Roman">GNU</FONT>通用公共許可協(xié)議》<FONT face="Times New Roman">(GNU
General Public Licence)</FONT>的前提下,廣大象棋愛好者和程序設(shè)計(jì)師可以以任何非商業(yè)的目的使用 <FONT
face="Times New Roman">ElephantEye </FONT>及其源程序。 </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">ElephantEye
</FONT>中文名稱為“象眼”,它跟“馬腿”和“炮架子”一起構(gòu)成了中國(guó)象棋“棋盤上的第三維”。<FONT
face="Times New Roman">ElephantEye </FONT>通常與一個(gè)象棋棋譜編輯軟件<FONT
face="Times New Roman">ElephantBoard </FONT>配合使用,寓意有板有眼<FONT
face="Times New Roman">(</FONT>英文 <FONT face="Times New Roman">Board
</FONT>的意思是“板”<FONT face="Times New Roman">)</FONT>。<FONT
face="Times New Roman">(</FONT>注:現(xiàn)在 <FONT face="Times New Roman">ElephantBoard
</FONT>已更名為“象棋巫師”。<FONT face="Times New Roman">)</FONT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">ElephantEye 1.00 </FONT>作為<FONT
face="Times New Roman">2005</FONT>年在臺(tái)北舉辦的第<FONT
face="Times New Roman">10</FONT>屆電腦奧林匹克大賽的參賽程序,得到了鄭明政<FONT
face="Times New Roman">(</FONT>網(wǎng)名 <FONT
face="Times New Roman">Poor)</FONT>、施金山<FONT
face="Times New Roman">(</FONT>網(wǎng)名專家<FONT
face="Times New Roman">)</FONT>以及《象棋百科全書論壇》全體網(wǎng)友的大力支持,在此作者向他們表示感謝。 </DT></DIV>
<DIV align=left>
<DT> </DT></DIV>
<DIV align=left>
<DT><FONT face=楷體_GB2312 size=4><STRONG>二、引擎協(xié)議</STRONG></FONT> </DT></DIV>
<DIV align=left>
<DT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">ElephantEye </FONT>支持<FONT
face="Times New Roman">UCCI</FONT>協(xié)議<FONT
face="Times New Roman">1.02</FONT>,<FONT face="Times New Roman">ElephantEye
1.04</FONT>及其以后版本不再支持淺紅象棋協(xié)議,淺紅象棋用戶可使用<FONT
face="Times New Roman">UCCI</FONT>引擎適配器<FONT
face="Times New Roman">(UCCI2QH)</FONT>。 </DT></DIV>
<DIV align=left>
<DT><FONT face="Times New Roman">(1) </FONT>支持的<FONT
face="Times New Roman">UCCI</FONT>協(xié)議的命令有: </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">ucci</FONT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">setoption ...</FONT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">position {<special_position> | fen
<fen_str>} [moves <move_list>]</FONT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">banmoves <move_list></FONT>
</DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">go [ponder] {time <time> [movestogo
<moves_to_go> | increment <increment>] | depth <depth> |
infinite}</FONT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">ponderhit | stop</FONT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">quit</FONT> </DT></DIV>
<DIV align=left>
<DT><FONT face="Times New Roman">(2) </FONT>可以返回的<FONT
face="Times New Roman">UCCI</FONT>協(xié)議的信息有: </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">id {name <engine_name> | copyright
<copyright_info> | author <author_name> | user
<user_name>}</FONT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">option ...</FONT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">ucciok</FONT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">info ...</FONT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">{nobestmove | bestmove <best_move>
[ponder <ponder_move>]}</FONT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">bye</FONT> </DT></DIV>
<DIV align=left>
<DT> </DT></DIV>
<DIV align=left>
<DT><FONT face=楷體_GB2312 size=4><STRONG>三、參數(shù)設(shè)置</STRONG></FONT> </DT></DIV>
<DIV align=left>
<DT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">ElephantEye </FONT>作為<FONT
face="Times New Roman">UCCI</FONT>引擎,有若干可以設(shè)置的參數(shù)<FONT
face="Times New Roman">(</FONT>可以直接在《象棋巫師》中設(shè)置<FONT
face="Times New Roman">)</FONT>。 </DT></DIV>
<DIV align=left>
<DT><FONT face="Times New Roman">(1) </FONT>開局庫(kù): </DT></DIV>
<DIV align=left>
<DT> 默認(rèn)的開局庫(kù)為 <FONT face="Times New Roman">ElephantEye </FONT>程序<FONT
face="Times New Roman">(ELEEYE.EXE)</FONT>當(dāng)前目錄下的 <FONT
face="Times New Roman">BOOK.DAT</FONT>,在設(shè)置完開局庫(kù)后,必須執(zhí)行“導(dǎo)入開局庫(kù)”命令才會(huì)生效,建立新局或者重新啟動(dòng)《象棋巫師》都會(huì)自動(dòng)導(dǎo)入開局庫(kù)。目前
<FONT face="Times New Roman">ElephantEye
</FONT>只支持一個(gè)開局庫(kù)文件,設(shè)置多個(gè)開局庫(kù)反而會(huì)導(dǎo)致程序連一個(gè)開局庫(kù)也無(wú)法讀取。 </DT></DIV>
<DIV align=left>
<DT><FONT face="Times New Roman">(2) </FONT>思考時(shí)間: </DT></DIV>
<DIV align=left>
<DT> 限定思考深度通常不是很好的選擇,建議給定限時(shí)讓程序自動(dòng)分配時(shí)間。而在解殺局或分析局面時(shí),則可讓程序無(wú)限制思考,并可隨時(shí)中止思考。
</DT></DIV>
<DIV align=left>
<DT><FONT face="Times New Roman">(3) </FONT>置換表大小: </DT></DIV>
<DIV align=left>
<DT> 盡管置換表大小對(duì)程序的運(yùn)行速度影響不大,默認(rèn)<FONT
face="Times New Roman">16MB</FONT>的設(shè)置已經(jīng)足夠,但<FONT
face="Times New Roman">ElephantEye
</FONT>還是提供了設(shè)置置換表大小的功能。在內(nèi)存允許的情況下,下慢棋時(shí)可以適當(dāng)增加置換表的大小,但建議不要超過物理內(nèi)存的一半。 </DT></DIV>
<DIV align=left>
<DT><FONT face="Times New Roman">(3) </FONT>裁剪程度: </DT></DIV>
<DIV align=left>
<DT> 為加快程序的運(yùn)算速度,<FONT face="Times New Roman">ElephantEye
</FONT>默認(rèn)使用空著裁剪和歷史表裁剪,并且產(chǎn)生負(fù)面影響的可能性很小,因此推薦使用最高級(jí)別。中間兩個(gè)級(jí)別會(huì)禁用歷史表裁剪,最低級(jí)別會(huì)禁用空著裁剪。
</DT></DIV>
<DIV align=left>
<DT><FONT face="Times New Roman">(4) </FONT>知識(shí)量: </DT></DIV>
<DIV align=left>
<DT> 知識(shí)量和局面評(píng)價(jià)的準(zhǔn)確性有關(guān),在 <FONT face="Times New Roman">ElephantEye
</FONT>的知識(shí)量等級(jí)中,只有最低級(jí)別是不采用局面評(píng)價(jià)函數(shù)的<FONT
face="Times New Roman">(</FONT>只考慮子力價(jià)值<FONT
face="Times New Roman">)</FONT>,在解排局等不需要依靠審局知識(shí)來(lái)分析的局面時(shí),可以嘗試用這種設(shè)置。 </DT></DIV>
<DIV align=left>
<DT><FONT face="Times New Roman">(5) </FONT>選擇性: </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">ElephantEye </FONT>設(shè)有<FONT
face="Times New Roman">4</FONT>級(jí)選擇性。選擇性越大,程序越有可能走出它認(rèn)為不是最好的著法,但“不是最好的著法”并非一點(diǎn)好處也沒有,尤其在沒有啟用開局庫(kù)時(shí),適當(dāng)增大選擇性,可以避免程序在相同的局面下走出一樣的著法。
</DT></DIV>
<DIV align=left>
<DT> </DT></DIV>
<DIV align=left>
<DT><FONT face=楷體_GB2312 size=4><STRONG>四、規(guī)則</STRONG></FONT> </DT></DIV>
<DIV align=left>
<DT> </DT></DIV>
<DIV align=left>
<DT> 盡管 <FONT face="Times New Roman">ElephantEye
</FONT>現(xiàn)有的規(guī)則知識(shí)僅限于“單方面長(zhǎng)將作負(fù)”,但有很多變通的做法讓 <FONT face="Times New Roman">ElephantEye
</FONT>適應(yīng)各種規(guī)則。例如作為淺紅象棋引擎,長(zhǎng)捉的著法會(huì)自動(dòng)被“淺紅象棋”所禁止。 </DT></DIV>
<DIV align=left>
<DT> 而作為<FONT face="Times New Roman">UCCI</FONT>引擎,盡管目前支持 <FONT
face="Times New Roman">UCCI </FONT>引擎的程序《象棋巫師》不會(huì)向引擎發(fā)送 <FONT
face="Times New Roman">banmoves </FONT>的禁著指令,但當(dāng)局面出現(xiàn)三次重復(fù)時(shí),<FONT
face="Times New Roman">ElephantEye </FONT>會(huì)自動(dòng)變著,避免走出長(zhǎng)捉等禁止著法。因此用戶在與 <FONT
face="Times New Roman">ElephantEye </FONT>對(duì)弈時(shí),可按照以下步驟來(lái)讓 <FONT
face="Times New Roman">ElephantEye </FONT>適應(yīng)規(guī)則: </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">a. </FONT>當(dāng)局面出現(xiàn)三次重復(fù)時(shí),《象棋巫師》會(huì)作出一個(gè)初步的裁定;
</DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">b. </FONT>如果判定結(jié)果是某方長(zhǎng)打作負(fù),則不應(yīng)該存在異議;
</DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">c. </FONT>如果《象棋巫師》判定和棋,則需要由用戶確認(rèn)是否的確是和棋;
</DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">d. </FONT>如果用戶判定確實(shí)為和棋,則可結(jié)束棋局; </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">e. </FONT>如果用戶判定 <FONT
face="Times New Roman">ElephantEye </FONT>存在長(zhǎng)打的著法,則可繼續(xù)對(duì)局,此后<FONT
face="Times New Roman">ElephantEye </FONT>會(huì)自動(dòng)變著,避免重復(fù)局面的出現(xiàn)。 </DT></DIV>
<DIV align=left>
<DT> </DT></DIV>
<DIV align=left>
<DT><FONT face=楷體_GB2312 size=4><STRONG>五、博弈算法</STRONG></FONT> </DT></DIV>
<DIV align=left>
<DT> </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">ElephantEye
</FONT>屬于偏向蠻力的象棋程序,使用了嚴(yán)謹(jǐn)而有效的博弈算法: </DT></DIV>
<DIV align=left>
<DT><FONT face="Times New Roman">(1) </FONT>使用位行和位列的著法生成器: </DT></DIV>
<DIV align=left>
<DT> 位行<FONT face="Times New Roman">(BitRanks)</FONT>和位列<FONT
face="Times New Roman">(BitFiles)</FONT>有利于滑動(dòng)棋子<FONT
face="Times New Roman">(</FONT>車和炮<FONT
face="Times New Roman">)</FONT>的著法<FONT
face="Times New Roman">(</FONT>尤其是吃子著法<FONT
face="Times New Roman">)</FONT>生成,位行和位列可以用查表來(lái)代替在射線上做的循環(huán)運(yùn)算。在<FONT
face="Times New Roman">ElephantEye </FONT>中,位行和位列的技術(shù)不僅用在著法生成器中,也用到了牽制的判斷上。
</DT></DIV>
<DIV align=left>
<DT><FONT face="Times New Roman">(2) </FONT>靜態(tài)局面搜索: </DT></DIV>
<DIV align=left>
<DT> 在做靜態(tài)搜索時(shí),<FONT face="Times New Roman">ElephantEye
</FONT>搜索了吃子或解將的著法,在搜索吃子著法時(shí),<FONT face="Times New Roman">ElephantEye
</FONT>過濾掉不重要的吃子,例如吃不過河的兵、吃不處于防守中的士象等著法,都不在靜態(tài)搜索的范圍之內(nèi)。 </DT></DIV>
<DIV align=left>
<DT><FONT face="Times New Roman">(3) </FONT>循環(huán)著法和長(zhǎng)將檢測(cè): </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">ElephantEye
</FONT>可以識(shí)別循環(huán)著法,出現(xiàn)循環(huán)著法時(shí)可以判斷哪方為長(zhǎng)將,并且會(huì)利用禁止長(zhǎng)將的規(guī)則來(lái)謀求優(yōu)勢(shì),但目前 <FONT
face="Times New Roman">ElephantEye </FONT>還無(wú)法識(shí)別長(zhǎng)捉。 </DT></DIV>
<DIV align=left>
<DT><FONT face="Times New Roman">(4) </FONT>置換表: </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">ElephantEye
</FONT>參考了中國(guó)象棋程序“縱馬奔流”的設(shè)計(jì)思路,使用深度優(yōu)先和始終覆蓋的雙層置換表,并采用低出<FONT
face="Times New Roman">(</FONT>高出<FONT
face="Times New Roman">)</FONT>邊界修正的置換表更新策略。 </DT></DIV>
<DIV align=left>
<DT><FONT face="Times New Roman">(5) </FONT>帶檢驗(yàn)的空著裁剪: </DT></DIV>
<DIV align=left>
<DT> <FONT face="Times New Roman">ElephantEye </FONT>使用 <FONT
face="Times New Roman">R=2 </FONT>的空著裁剪,在殘局階段使用帶檢驗(yàn)的空著裁剪。 </DT></DIV>
<DIV align=left>
<DT><FONT face="Times New Roman">(6) </FONT>迭代加深<FONT
face="Times New Roman">/</FONT>吃子著法<FONT
face="Times New Roman">/</FONT>殺手著法<FONT face="Times New Roman">/</FONT>歷史表啟發(fā):
</DT></DIV>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -