當計算機誕生時, 人們便想將計算機技術(shù)與博弈游戲相結(jié)合,這就是機器博弈,機器博弈 是人工智能領(lǐng)域里一個重要研究領(lǐng)域, 在國際上已經(jīng)開展了半個多世紀。
1996年2月10日,IBM的超級電腦裝載國際象棋程序“深藍”首次挑戰(zhàn)國際象棋世界冠軍加里·卡斯帕羅夫,但以2-4落敗。2月17日比賽結(jié)束后研究小組對深藍做了進一步的改良。
1997年5月11日,卡斯帕羅夫以 2.5:3.5 (1勝2負3平)輸給“深藍”。
電子計算機開端于國外, 國際象棋在國際上開展較廣泛, 所以國際象棋機器博弈的研究在國外相對較早。中國象棋雖是世界上歷史最為悠久的棋類, 早在兩千多年前的戰(zhàn)國時代就已經(jīng)有了關(guān)于象棋的記載, 但是因為在中國的電子計算機的普及及相關(guān)技術(shù)的發(fā)展遠遠落后于國外先進國家,中國象棋計算機博弈的研究近二十年才起步。
2006 年,為慶祝人工智能學科誕生50 周年, 浪潮集團贊助、中國人工智能學會舉辦了“ 浪潮杯” 首屆中國計算機博弈錦標賽暨2006 機器博弈學術(shù)研討會。2006 年8 月,來自全世界18 支中國象棋計算機博弈軟件代表隊參加了錦標賽,分別是棋天大圣、象棋奇兵、象眼競技、 理治棋壯、棋樂無窮、棋之夢、將神傳說、落花、青羽堂、天機、象棋ABC、象棋旋風、寶島一號(臺灣)、兵芯(臺灣)、深象(臺灣)、夢入神機(美國)、神乎棋技(美國)、謝謝大師(法國)。前五名棋天大圣、象棋奇兵、象棋旋風、天機、將神傳說分別與徐天紅、卜鳳波、柳大華、張強、汪洋等象棋專業(yè)選手進行了中國象棋人機大戰(zhàn)。結(jié)果棋軟以3 勝5 和2 負略占上風。
1 象棋軟件組成
中國象棋軟件就是利用計算機來下棋,將棋局狀態(tài)、行棋規(guī)則輸入計算機,由計算機根據(jù)規(guī)則進行計算,然后再給出一步合理著法的程序。
象棋軟件包括界面程序、引擎程序、開局庫、審局庫、殘局庫等。
象棋軟件各部分各自獨立,以界面程序為基礎,引擎程序為核心。
(因為各部分遵守共同的UCCI或CCI協(xié)議,所以可以獨自開發(fā),然后由界面程序集成到一起。)
打開界面程序,可設置引擎程序(可選)、開局庫(可選),以下是兩個界面程序(兵河五四、鯊魚象棋)與引擎程序和開局庫的關(guān)系:
一般來說,界面程序、引擎程序都只有幾十個M,體積龐大的是各類開局庫、對局庫、殘局庫(可選擇加載)。
1.1 界面程序
界面程序是提供象棋對奕的圖形界面程序,需要加載引擎(計算和分析工具)才具備棋力(一些界面程序也自帶引擎)。在對弈、拆棋時,引擎的計算與分析能夠直觀地顯示在不同的界面子窗口中。
基于UCCI的象棋界面程序完成用戶與人工智能博弈引擎的交互功能,一般在具有人人、人機(人與象棋博弈程序)、機機對戰(zhàn)的基本功能之外,還有棋譜編輯、棋局管理等輔助功能。
免費的界面程序有 :
32位系統(tǒng):
兵河五四3. 6,
鯊魚象棋,
鵬飛象棋v3. 3. 0.9
64位系統(tǒng):
兵河五四4.0,
兵河五四4.1
1.2 引擎程序
引擎程序是一個著法生成、搜索、評估、給出最佳著法的博弈程序?!?/p>
免費引擎程序有:
32位系統(tǒng):
象棋名手326六核版(老版破解引擎,殘局棋力尚可)
象棋旋風6. 3破解版(運算較慢,棋力差)
南澳1.6雙核版(棋力一般)
64位系統(tǒng):
國圣雙核破解版(棋力一般)
三元加強版(棋力略優(yōu)于名手326)
佳佳象棋(最高支持12S線程,強機下棋力明顯優(yōu)于其他免費引擎)
ggzero (用顯卡來運算的AI引擎,目前還在訓練提高棋力中)
1.3 開局庫
博弈程序如果能借鑒常用的開局模式,可以大大節(jié)省時間, 為中局思考留下更多時間。由于開局階段棋子多,棋型變化大, 搜索不會進行很深, 搜索的結(jié)果往往不如人們通過千遍萬遍演練得到的常用開局, 避免搜索得到一些不太好的走法。
將成千上萬的開局局面存儲在計算機中, 形成一個開局庫, 每一個局面都有一個最佳走法, 同時要注意走棋方。博弈引擎程序在開局階段首先搜索開局庫,如果有相同棋局, 則直接取出最佳走法作為當前搜索的結(jié)果。當開局庫中對應局面有多個時, 則要采取一個策略從多個中優(yōu)選一個來。如果開局庫中沒有相同局面, 則用搜索算法重新進行搜索。一旦開局庫中沒有相同局面,在后續(xù)搜索中都不再查找開局庫了。
開局庫必須要做到既方便存儲, 又方便檢索??梢杂脭?shù)據(jù)庫,也可以用文本文件。在程序開始時, 將開局庫中的內(nèi)容讀入內(nèi)存, 在內(nèi)存中檢索。如果在硬盤中檢索,時間花費太大了。
開局庫是制作出來的棋譜,加載開局庫可減輕引擎開局的運算壓力,一般一直跟庫走至少不輸,也有制作出來通過虧一步棋專門讓對方脫庫的開局庫。
開局庫也可以存儲在服務器上(云庫),由界面程序網(wǎng)絡連接調(diào)用。
1.4 對局庫
當行棋到一定的局面,只要加載的對局庫里有這個局面,界面程序會自動在對局庫里搜索到這局面的所有棋譜。
1.5 殘局庫
同樣可以把常見的殘局棋型及其最佳走法存儲在計算機中, 形成殘局庫, 供引擎程序在殘局階段檢索。開局庫因為開局是固定的, 前面幾步局面變化不大, 開局庫并不大。但殘局庫棋子沒有固定位置, 可以在它們能去的任何地方, 殘局庫蜇實在太大。
2 象棋軟件使用
2.1 打開界面程序
打開界面程序及加載需要的窗口。
2.2 設置和加載引擎
包括多引擎加載、時間設置、開局庫設置、hash設置、線程設置等。
例如有的引擎在某些局面走得好,此時可以很方便地切換引擎,例如開局、中盤、殘棋需要3個引擎,不需要打開三個界面占用系統(tǒng)資源。
2.3 啟動分析模式
點擊“分析模式”按鈕即可啟動分析模式,可看到搜索層數(shù)、提示著法及評分。
可在【視圖】菜單中打開需要的子窗口:
【思考細節(jié)】:顯示引擎的思考細節(jié),人機參考棋步很有用;
【著法窗口】:顯示開局庫的棋步;
【對局庫窗口】:顯示對局庫中的棋譜。
3 名詞
3.1 UCCI協(xié)議
中國象棋通用協(xié)議(Universal Chinese Chess Protocol,簡稱UCCI),是一種象棋界面和象棋引擎之間的基于文本的通訊協(xié)議。
設立中國象棋通用引擎協(xié)議的目的有:
(1) 使一個“可視化象棋軟件”可以使用不同的“核心智能部件”,這些核心智能部件稱為“引擎”,凡是遵循UCCI的引擎,都可以被該可視化象棋軟件(也稱為“界面”)所調(diào)用;
(2) 針對所有遵循UCCI的引擎,都可以開發(fā)不同的界面,使其具有不同的功能。
這樣,“可視化象棋軟件”和“核心智能部件”實現(xiàn)了分離,使得一部分程序設計師能專注于前者(界面)的開發(fā),而另一部分程序設計師能專注于后者(引擎)的開發(fā),讓中國象棋軟件的設計工作系統(tǒng)化、分工化,提高軟件設計效率。
UCCI是模仿國際象棋的UCI協(xié)議來制定的。UCCI協(xié)議是開放式的協(xié)議,并且具有UCI協(xié)議的所有特點。
該協(xié)議由業(yè)余研究電腦象棋程序的復旦大學研究生黃晨首倡于2004年,經(jīng)過推廣目前支持UCCI協(xié)議的公開發(fā)表的引擎已經(jīng)增加到17個(截至2006年11月底),為中國象棋的信息化鋪平了道路。
3.2 界面程序
界面程序一般集對弈、拆棋、連線于一體。
界面的主要元素有(以兵河五四為例)棋盤窗口、棋譜窗口、著法窗口、引擎信息、局勢曲線、聯(lián)賽窗口、圖形連線、弈天登錄及自動打擂、引擎聯(lián)賽等。
界面程序一般基于多線程設計,界面線程負責顯示,輔助線程負責與引擎通訊。
3.3 引擎程序
包括棋局局面表示,著法表示與生成(生成一棵博弈樹),逐層逐個搜索樹節(jié)點并做局面評估。其策略核心在于棋局評估函數(shù),核心方法是博弈樹搜索。同時開局庫和殘局庫的構(gòu)建對算法的性能也有重要的影響。
首先使用一個數(shù)據(jù)結(jié)構(gòu)來描述棋局信息,對某一特定的棋局信息由著法生成器生成當前下棋方所有合法的著法并依次存入著法隊列。然后通過搜索算法來逐一讀取著法并調(diào)用局面評估函數(shù)對該著法所產(chǎn)生的后繼局面進行評估打分,從中選出一個最有可能導致走棋方取勝的著法。在搜索的過程中還可以采用一些輔助手段來提高搜索的效率。
局面就是一盤棋經(jīng)過若干回合之后當前所處的形勢,包括棋盤、紅黑雙方所剩棋子及其在棋盤上的分布、當前該走棋一方、雙方所剩時間、雙方所剩走棋步數(shù)等內(nèi)容。局面表示是象棋程序的基礎, 局面表示的好壞直接關(guān)系到走法生成、搜索算法和局面評估的效率, 從而影響象棋程序得到的最佳走法。
象棋程序每一次思考的目的是獲取一個最佳走法(至少在程序看來是最佳的)。要實現(xiàn)這一目標的簡單方法就是生成全部所有可能的走法(及可能走法下的新的書面的可能走法……), 然后再一個一個的比較(局面評估), 找出最佳的一個。
局面評估就是判斷局面對紅方(或者黑方, 或者是當該前走棋一方) 的優(yōu)勢,并把優(yōu)勢進行量化。由于象棋程序搜索復雜度太大, 搜索函數(shù)不可能搜索到棋局終了的狀態(tài), 所以必須在某個深度的結(jié)點上結(jié)束并返回上一層。這個結(jié)點并沒有達到棋局結(jié)束(勝平負),應該給它一個值, 反映局面狀況, 對紅方有利還是對黑方有利,有多少優(yōu)勢。必須把這種優(yōu)勢量化,以便不同結(jié)點的優(yōu)勢可以進行比較, 以確定哪一個結(jié)點更好。
中國象棋的局面變化實在是太多了,有時候一個局面可能走法達100多種,一般局面也有40多種走法。要完全搜索10步棋需要3.3年,即使完全搜索7步棋也要27分鐘(按每秒搜索10^8個結(jié)點計)。按一盤棋平均100步(50個回合)計,要完全搜索100步是絕對不可能的。如何讓計算機在有限的時間內(nèi)搜索到更多的空間和更深的步數(shù),是計算機引擎程序必須考慮的問題。這除了與計算機硬件有關(guān)之外,與搜索算法關(guān)系很大。這是因為在搜索樹空間中有些分支是多余的,搜索的時候可以跳過某些分支。跳過的分支越多,搜索的速度越快, 但漏掉最優(yōu)解的可能性也在增加。搜索算法必須又快又準地找到最優(yōu)解。
對于每一個局面,都可以生成一個如下類似的“博弈樹”——樹的每一個結(jié)點表示每一種可能的著法,形成新的局面。對每一個局面(結(jié)點)根據(jù)不同的走法又產(chǎn)生不同的局面(生出新的結(jié)點),根據(jù)思考的步數(shù)增加,樹的結(jié)點以幾何倍數(shù)擴展。搜索函數(shù)可以通過搜索以當前局面為根結(jié)點、限定層數(shù)以內(nèi)的整棵樹來獲得一個最佳的著法。有些“暫時”看來很不錯的局面由于可能會產(chǎn)生很糟糕的局面因而根本沒有考慮的價值。所以當你看到某個局面有可能產(chǎn)生很糟糕的局面時(確切地說這里的“很糟糕”是與之前所分析的情況相比較而言的),你應當立刻停止對其剩余子結(jié)點的分析。
上圖所示,每展開一步就是一層,象棋軟件中所說的深度就是我們所說的層數(shù),對應多少步棋。其搜索和局面評估的計算以指數(shù)級增長。
另外,如果把中國象棋棋譜上一些公認為最佳的開局著法和殘局著法存儲在數(shù)據(jù)庫中,在開局和殘局時用查詢?nèi)〈阉骱驮u估,那么會大大提高計算機的對弈水平。
ttps://www.xqbase.com/protocol/cchess_ucci.htm
3.4 連線下棋
所謂“連線下棋”就是利用軟件連線到各個游戲平臺,讓軟件輔助你下棋或自動下棋。
界面程序一般都可以圖形連線各大網(wǎng)站的客戶端的棋盤,可以自動連線桌面上最上面的象棋客戶端。打開圖形連線界面,可以做更新方案、刪除方案、測試連線、連線對弈、人機觀戰(zhàn)等操作。
選定了人機模式后,如果選定不保持同步,人機模式,是兵河五四的走棋不傳到客戶端的棋盤,你在兵河五四的棋盤盡管拆棋,拆好了按按鈕就把棋子傳到客戶端棋盤上了。相當于拆棋后的立即出步,這點很方便人機模式,防止自己手工搬錯子!
http://sharkchess.com/sharkhelp/
3.5 開局庫
開局庫幾乎是每個象棋程序必備的部件,它的好處是:
(1) 即使再笨的程序,開局庫能使得它們在開局階段看上去不那么業(yè)余;
(2) 通過隨機選擇走法,讓開局靈活多變,增加對弈的趣味性。
3.6 FEN文件格式
FEN(Forsyth-Edwards Notation)是專門用來表示象棋局面的記錄規(guī)范,在這個規(guī)范下,一個局面可以簡單地用一行“FEN格式串”來表示,而不必煩瑣地說:“紅帥在四路次底線,黑將在5路底線……”。由于它是文本格式的(只牽涉到很有限的幾個字母、數(shù)字和符號),因此網(wǎng)上傳遞棋局就非常方便,不用把棋圖畫在紙上或用文字笨拙地描述了,而是用棋譜編輯軟件擺好局面,自動得到FEN格式串,使得棋譜交流快速而高效。
FEN格式串用來表示一個局面,局面發(fā)生變化時,界面程序向引擎程序傳遞局面信息,如以下的一個FEN格式串:
rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w – – 0 1
(1) 前面最長的一串,表示棋盤布局,中國象棋棋盤有10行,所以要用9個“/”把每一行隔開;棋子名稱用英文字母表示。小寫表示黑方,大寫表示紅方。
(2) w,表示輪到哪一方走子,“w”表示紅方,“b”表示黑方。
(3) -,空缺,始終用“-”表示。
(4) -”,空缺,始終用“-”表示。
(5) 0,表示雙方?jīng)]有吃子的走棋步數(shù)(半回合數(shù)),通常該值達到120就要判和(六十回合自然限著),一旦形成局面的上一步是吃子,這里就標記“0”。
(6) 1,表示當前的回合數(shù),在研究中局或排局時,作為研究對象的局面,這一項可以寫1,隨著局勢的發(fā)展逐漸增加。
https://www.xqbase.com/protocol/cchess_fen.htm
4.7 PGN文件格式
PGN(Portable Game Notation)是棋類游戲過程的文件格式。
(1) PGN文件是文本格式的,可以用任何文本編輯軟件建立和修改;
(2) PGN文件分為“標簽部分”和“著法部分”,兩部分都規(guī)范整齊,既方便閱讀,也便于棋譜編輯軟件產(chǎn)生和解讀;
https://www.xqbase.com/protocol/cchess_pgn.htm
5 歷年棋軟比賽成績
2006年棋軟比賽成績:
1.棋天大圣 (王驕)
2.象棋奇兵 (趙明陽)
3.象棋旋風(陳朝營)
4.天機 (張旭)
5.將神傳說(雷春鳴)
2007年棋軟比賽成績:
1.象棋旋風(陳朝營)
2.天機 (鄭旭)
3.棋天大圣 (王驕)
4.佳佳象棋 (李國來)
5.象棋奇兵(趙明陽)
2008年棋軟比賽成績:
1. Intella 倚天象棋(陳朝營、韋余濤)
2. Cyclone 象棋旋風(張閩譚卓勛)
3. EThinker 天機(鄭 旭)
4. Gagachess 佳佳象棋(李國來)
5. MonkeyKing 猴王(徐心和)
6. NEUChess 棋天大圣(王 驕)
7. 3DChess 3D象棋(劉 進)
8. XQMASTER 象棋奇兵(趙明陽)
2009年棋軟比賽成績:
1.象棋名手 (蔣志敏)
2.佳佳象棋 (李國來)
3.陶情弈趣 (譚卓勛.張閩(孤獨)
4.倚天象棋 (韋余濤)
5.天機 (鄭 旭)
6.新奇兵 (王賢谷(趙明陽))
2010年棋軟比賽成績:
1.象棋旋風Tornado (陳朝營)
2.佳佳象棋Gaga chess (李國來)
3.象棋名手XQMS (蔣志敏.張閩)
4.先知象棋OracleX (張志福)
5.棋 弈Sunrise (北京理工大學)
6.哈工程 (趙國東(哈工程))
7.哈理工象棋 (哈爾濱理工大學)
2019年第三屆楚河漢界象棋人工智能對決:
1. “旋風”
2. “名手”
3. GGZero
4. 國圣象棋
2019年10月在北京舉行的第13屆中國計算機博弈錦標賽中,小蟲象棋以8勝2和的戰(zhàn)績獲得中國象棋組冠軍。
6 資源
棋中論壇:http://www.qz777.com/
中國象棋云庫:https://www.chessdb.cn/query
以下視頻有相關(guān)免費資源的下載鏈接:
https://www.ixigua.com/i6919490649779601923/
ref
《C/C 中國象棋程序入門與提高》
-End-
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。