整合性電腦象棋自動對局系統之研製
吳光哲
*陳柏年
*劉邦鋒
*許舜欽
***
台灣大學資訊工程系
**長榮大學資訊管理學系
[email protected] [email protected] [email protected] [email protected]
1. 前言
一般研究象棋的人,通常會對某一特定的棋局 盤面,做一番仔細的推演、歸納,以求對該盤面局 勢徹底的了解。不過,即使如此仔細的研究過程, 所得到的結論卻仍無法完全正確,因此仍需靠實戰 來加以驗證。此時,如果研究者能利用電腦象棋做 為輔助工具,將具有模擬實戰驗證的功效,使研究 效率大為提昇。 然而目前以程式開發出來的象棋軟體,主要可 區分成以下類別: 1. 打譜軟體 例如:象棋橋、象棋演播室等 2. 多媒體象棋教學軟體 例如:中國象棋個人賽、象棋兵法等 3. 網路象棋對局軟體 例如:ICCS,奕象網,奕天棋緣等 4. 具有人工智慧的電腦象棋軟體 例如:Elp、象棋世家、mrsj 等 以上四類軟體當中,以第四類最具模擬實戰驗 證的功效。2.
自動對局系統
的需求
但是,目前的電腦象棋程式使用搜尋演算法來 尋找著手。由於審局函數是固定的,因此如果時間 相同,則其搜尋結果也將一致。此時如果研究者希 望產生不同的策略組合,來對目前的盤面加以分 析,還是需要一個能夠結合第三類軟體,而且能夠 自動上線對局的系統,做為各種實驗著手研究的工 具。 另一方面,電腦象棋的研究者則常會需要比較 不同電腦象棋程式的棋力,或者需要快速的產生棋 局資料庫[1]。但兩個不同的電腦象棋程式介面不 同,如果以手動的方式來處理,則效率很差,因此 也需要有一套自動化的介面程式,使兩個不同的電 腦象棋程式能互相對奕[2]。 我們所設計的ChessSpy 就是一個利用網路連 線,讓不同的電腦象棋程式自動對奕的程式[3]。 它可用來比較不同電腦象棋程式的棋力[4];並且 可以自動對奕。
使用者做完前置動作後,只要等 棋下完後再來處理即可,可以省去許多不必要的工 夫。它與遠端的電腦象棋伺服器連線後,就可與本 地端的電腦象棋程式對奕。3. ChessSpy 的網路架構
ChessSpy 連接兩個象棋程式的接口,一邊是 本地端的電腦象棋程式,一邊是遠端伺服器,為提 供遠端對奕的電腦象棋程式。 當ChessSpy 與伺服器連線後,便扮演兩個象 棋程式的溝通介面[5]。圖 1、圖 2 為象棋介面透過 ChessSpy 與伺服器對奕。 伺服器端電腦象棋程式的通訊協定使用 TCP/IP,預設使用 port 8862。ChessSpy 與伺服器 連線之後,伺服器端等待ChessSpy 傳送下棋的指 令,並且隨時將著法回傳給ChessSpy,指令主要 有兩種: 1. 伺服器端電腦走子:傳送Think_Message 給伺 服器端,則伺服器端電腦開始思考,並且當電腦走 子後,將其著法傳送給ChessSpy (Result_Message,包含 Src 與 Dest,即該著法所 代表棋盤位置的起點與終點)。ChessSpy 讀取到著 法後,再將此著法對應到本地端的棋盤畫面,自動 控制滑鼠走出該著法。2. 程式走子:即本地端的程式走子後,經由 ChessSpy 偵測到並傳送給伺服器端。 圖 1. ChessSpy 執行畫面 圖 2. 象棋介面執行畫面
4. ChessSpy 流程介紹
ChessSpy 的運作流程如如圖 3 所示: 1. 利用 TCP/IP 通訊協定,與遠端伺服器 連線並進行對奕的交談動作 2. 尋找棋盤視窗 3. 鎖定棋盤 4. 前置動作(1~3)完成後,開始對奕, 每0.2 秒擷取畫面一次,並判斷棋子位 置及盤面變化 5. 自動化移動棋子 網路架構已於前一節介紹,以下四小節將對 「尋找棋盤視窗」、「鎖定棋盤」、「判斷棋子位置及 盤面變化」、「自動化移動棋子」等流程詳細解說。 4.1、ChessSpy 尋找棋盤視窗 ChessSpy 利用視窗系統所提供的 API 來取得 畫面上的所有視窗資訊,然後顯示視窗的標題,供 使用者選擇,使用者可以藉由視窗標題來找到棋盤 視窗。開始
遠端連線
連線成功
否
已完成棋盤
鎖定工作
否
尋找棋盤視窗
鎖定棋盤
是
α
圖 3(a). ChessSpy 流程圖α
Timer 訊
息處理函
4.2、鎖定棋盤 為了取得不同電腦象棋介面中的棋盤內容,程 式須先找到該棋盤所在的視窗位置,再由棋盤的比 例計算出每顆棋子的位置,程式會記錄棋盤的相對 位置,因此將來即使將視窗移動過,也不會有任何 影響。由於每個電腦象棋程式的棋子移動方式不一 定相同,但不外乎兩種方式,即double-click 與 drag-drop,因此使用者必須設定棋子移動方式。 4.3、判斷棋子位置及盤面變化 在第一次使用時必須先設定好視窗中棋盤的 位置及大小。設好之後,程式便依此資訊,算出每 圖 3(b). ChessSpy 流程圖擷取並檢查盤
否
是否有改變
是
是否
2 格改變
否
是否
3 格改變
是
是否a
1→
否,有
4 格改
移動a
3→
a
4否
是否a
4=a
1是
是
移動a
3→
a
1移動a
3→
a
2是
否
自動移動棋子
個棋子所在位置。ChessSpy 在使用者按下 Start 按 鈕之後,約每 0.2 秒檢查一次畫面,以判斷盤面是 否有改變。檢查時,對棋盤上的每個棋子,皆以棋 子的圓心為中點,取一個小正方形做為樣本點加以 記錄,以節省運算時間, 避免佔用過多計算資源。 然後比較目前所記錄的盤面與前一次記錄的盤面 是否有差異,以判斷棋盤的變化及棋子移動後的位 置。此方法可將問題表示為"已知棋盤狀態, 並知 道畫面上某幾格的圖形有變化,求對方走了什麼?" 假設網路端走了 a1→a2, 接下來 windows 象棋 程式走了 a3→a4,依畫面變化情況有以下幾種可 能: case 1. 畫面上 4 個格子有變化: 在這 0.2 秒內,我方走一步 a1→a2,對方走 a3→a4,畫面更新後跟上次的畫面比起來, 有四格 改變。 case 2. 畫面上 2 個格子有變化: 一種可能是我們剛移動的a1→a2,忽略不管, 否則應該是 a3→a4 (a3=對方顏色,a4=非對方顏 色)。 case 3. 畫面上 3 個格子有變化: (如圖4)
這有兩種可能,一是a4=a1,一是a4=a2,對方a3→a4 這步的終點,剛好是我們剛剛那步的起點或終點, a4=a2比較常見,也就是我們走了某一步之後,對 方馬上把那隻吃掉,若 a3→a1跟a3→a2都是合法的 棋步,不靠顏色或形狀,事實上無法判斷, 這通 常發生在對方有背景思考,我們走了之後剛好被猜 到,馬上被吃。 除了case 3 有時無法判斷外,ChessSpy 對於 某些象棋程式也無法處理,譬如: 1. 棋子移動時有移動動畫的顯示,如果不檢查棋 子是否已停止移動,則無法得知棋子的正確位置, 改進方法是看「輪紅」、「輪黑」的標示,大部分程 式都有提供此類標示。 2. 象棋程式會在棋盤上做記號,譬如 xiexie,他會 在一些棋子上做記號,譬如標示上一步移動的棋 子、上一步的路線、以及建議著法等,若要正確判 讀此類象棋程式的畫面,則須觀察顏色及圖形的變 化才能達到。 圖 4. 三格有變化之範例 4.4、自動化移動棋子 利用系統提供的函式控制其他視窗程式,對其 做輸入的動作,可以達到自動化輸入的效果。移動 棋子的方式,便是對棋盤所在的視窗,輸入滑鼠訊 息,模擬將棋子拿起、放下的動作。如此,當伺服 器程式走子後,ChessSpy 便將其輸入視窗上的棋 盤;視窗上的棋盤有變化時,ChessSpy 也將偵測出
來,並將其著法傳送到伺服器,以達到自動化對奕 的效果[6]。
5. 優缺點探討
ChessSpy 是一個利用網路連線,讓不同的電腦 象棋程式自動對奕的程式。它能自動找出系統中正 在執行的程式,使用者只要打開一個電腦象棋程 式,按下scan 按鈕後,即可在下拉式選單中找到該 程式。並且只須在第一次使用時,將棋盤位置拉好, 之後便可直接套用棋盤設定。按下開始後,即可完 全自動化對奕,不但可節省許多不必要的操作時 間,還可以快速產生大量棋譜以供研究分析,成為 研究電腦象棋一個不可或缺的工具。 不過,在自動化的過程中,使用者不能操作滑 鼠,否則容易造成干擾;另外,ChessSpy 判斷盤面 變化時有時會造成錯誤,也是一項缺點,但一般不 容易發生錯誤。6. 未來發展方向
1. 目前的 ChessSpy 提供電腦象棋伺服器與另 一個電腦象棋程式的介面進行通訊的功能,藉此可 以分析伺服器端的電腦象棋程式的棋力。將此概念 加以擴充,我們可以設計一個ChessSpy Server and Client,使其同時具有伺服器及客戶端的功能,並且 與一個電腦象棋程式進行通訊,而要進行對奕則需 要兩個ChessSpy Server and Client 互相通訊,互傳著 法,並自動更新盤面。這種架構將可讓任意兩套電 腦象棋程式進行對奕,使象棋的研究工作更加便利。 2. ChessSpy 對於盤面判斷的方法,是取得棋盤 的畫面內容,但由於考慮到程式執行的速度,因此 未考慮棋盤畫面的顏色、及圖形的變化,而只判斷 畫面是否有改變。如此雖然可使執行效率相當高, 但有時也會造成無法判斷的錯誤,錯誤的原因在於 ChessSpy 並無取得棋盤所在視窗的視窗訊息,而是 每隔約0.2 秒擷取畫面一次,如果該視窗的更新動作 在0.2 秒內發生,則程式將有可能造成錯誤。有一種 可能的改良方法是使用視窗訊息,讓棋盤所在視窗 在走子時提供訊息給ChessSpy,ChessSpy 才擷取畫 面,判斷其著法,如此不僅有助於解決上述問題, 也可使ChessSpy 具有處理非瞬間移動棋子的電腦象 棋程式。7. 參考文獻
1. Donskoy, M.V. (2001). How the Computer-Chess Methods Help to Build Better user Interfaces. Advances in Computer Games 9 (eds. H.J. van den Herik and B. Monien), pp. 53-58. IKAT,
Universiteit Maastricht, Maastricht, The
Netherlands. ISBN 90-6216-5761 / 90-6216-5664. 2. Kierulf, A. (1990). Smart Game Board: a
Workbench for Game-Playing Programs, with Go and Othello as Case Studies. Ph.D. Thesis, Informatik-Dissertationen, No. 22, Verlag der Fachvereine, ETH Zurich, Switzerland.
3. Kotěšovec, V. (1996). Mezi šachovnicí a počítačem [Between chessboard and computer], Praha.
4. Kraus, S., Ephrati, E. and Lehmann, D. (1989). An Automated Diplomacy Player. Heuristic Programming in Artificial Intelligence: the first computer olympiad (eds. D.N.L. Levy and D.F. Beal), pp. 136-153. Ellis Horwood, Chichester. ISBN 0-7458-0778-X.
5. Lake, R., Schaeffer, J., and Lu, P. (1994). Solving Large Retrograde-Analysis Problems Using a Network of Workstations. Advances in Computer Chess 7 (eds. H.J. van den Herik, I.S. Herschberg, and J.W.H.M. Uiterwijk), pp. 135-162. University of Limburg, Maastricht, The Netherlands. ISBN 90-621-6101-4.
6. Muller, M. (1991). The Smart Game Board as a Tool for Game Programmers. Heuristic Programming in Artificial Intelligence 2: the second computer olympiad (eds. D.N.L. Levy and
D.F. Beal), pp. 217-231. Ellis Horwood Ltd., Chichester, UK. ISBN 0-13-382615-5.