電腦象棋簡介
(史帝芬, idealist@gcn.net.tw, 2003/10/12)
自從二十幾前IBM PC進入台灣開始,台灣就有人致力於電腦象棋的研究,電腦象棋的棋力也不斷突破,
"聽說"目前已達到六段的棋力! 在這麼漫長的歲月裡,許多的論文不斷的被發表,不過,大部份似乎都是
許舜欽教授所指導的學生! 在書籍方面,我只看過兩本,資料如下:
- 電腦象棋 原理、設計、實作及工具箱:何宏發、謝秋桂著,第三波出版。
- 電腦象棋 人工智慧程式設計:吳身潤著,旗標出版。
有興趣的人千萬不要到書局找,因為這兩本都是多年前的書,早就絕版了! 或許圖書館裡會有吧? 如果找不到也
不會灰心,這兩本書只是將一些研究生發表的論文(所有論文似乎都是碩士論文)整理成書,直接到國家圖書
館找出相關論文反而還可以找到更新的資訊。底下我將對電腦象棋做個簡單介紹。
- 序言
一般來說,象棋劃分成開局、中盤、殘局三個階段,在製作電腦象棋時,這三個階段的演算法也會不同,
開局階段大多以資料庫儲存開局棋譜,下棋時就由資料庫查詢得知下一手,當然啦,棋局不可能儲存無限
多,當局勢發展超出資料庫範圍,就進入了中盤。
如果不要求棋力很高,或是初次製作電腦象棋,中盤和殘局可以不用細分,用同樣的演算法就行了,
一般來說程式中一定會有個審局函數和一個對局樹,這也是這篇文章的重點,當進入殘局階段,因為象棋
的殘局有許多特例,通常電腦象棋會特別為這些特例建立一個殘局資料庫和特殊的演算法,這裡先不討論
。
- 審局函數
審局函數是作用在於評估盤面的敵我形勢,玩過象棋大師2的人就會知道,在對奕中畫面會有個數字隨盤勢
而變化,那就是審局函數算出來的值,電腦透過這個值可以判斷目前的局勢。
審局函數判斷棋力的依據,主要根據下列三項:
A. 子力:子力是評做局勢最簡單的方法,高手讓對手雙馬或一車來平衡棋力,就是最好的說明,我們可以看看
前人怎麼來設計,應該特別注意的是,象棋的規則勝負在於吃掉對方的主帥,所以將(帥)的值應大於所以其餘
子力的總和。
| | 1981年 張躍騰 | 1982年 廖嘉成 | 1988年 曹國明 |
| 將(帥) | 4096 | 10000 | 2000 |
| 士(仕) | 16 | 250 | 40 |
| 象(相) | 16 | 250 | 40 |
| 車(?) | 64 | 1640 | 200 |
| 馬(傌) | 32 | 750 | 90 |
| 包(炮) | 32 | 780 | 90 |
| 卒(兵) | 12 | 100 | 10 |
B. 位置:在象棋的開局裡,對局雙方通常會儘速的將車馬炮移到重要位置上,尤其
是車一定要搶住要線,可見位置對局勢的影響。在為位置評分時,可以為每個不同的棋子設計一個
二維陣列,用以記錄棋盤上每個點的重要性,下面以馬(傌)為例。
| 4 | 4 | 4 | 10 | 4 | 10 | 4 | 4 | 4 |
| 4 | 10 | 17 | 11 | 8 | 11 | 17 | 10 | 4 |
| 6 | 12 | 13 | 17 | 13 | 17 | 13 | 12 | 6 |
| 7 | 22 | 13 | 21 | 14 | 21 | 13 | 22 | 7 |
| 4 | 14 | 13 | 17 | 18 | 17 | 13 | 14 | 4 |
| 4 | 12 | 15 | 16 | 17 | 16 | 15 | 12 | 4 |
| 6 | 8 | 12 | 9 | 12 | 9 | 12 | 8 | 6 |
| 7 | 6 | 8 | 9 | 6 | 9 | 8 | 6 | 7 |
| -4 | 4 | 6 | 7 | -6 | 7 | 6 | 4 | -4 |
| 0 | -5 | 4 | 7 | 4 | 7 | 4 | -5 | 0 |
C. 靈活度:在象棋裡,每一種棋子都有它自己的限制,如果在下棋的過程中,讓棋子限制變很多,將
會使棋子的能力降低,所以在評估局勢時,棋子的靈活度也是考慮的重點。
- 對局樹
下象棋時,棋力越高的人,就能看到越遠的著手,一個能看到十三步以後著手的人,比一個只能看到五步著手的人
棋力肯定是要高。在電腦象棋裡,使用對局樹來達到往前看的能力。如下圖是對局樹的一個範例。

當建好對局樹之後,再用廣度搜尋或深度搜尋將最佳著手找出來,在象棋比賽裡會有時間限制,所以通常會以
廣度搜尋先搜尋到某個深度之後,再針對幾個重要著手做深度搜尋。要特別注意的是,審局函數設計越精準棋力固
然會越高,但是,越精準的審局函數也會計算越久,因為對局樹每個結點都要呼叫審局函數一次,如果審局函數計
算太久,在有限時間內,對局樹就不能建立太多層,這將影響到電腦的棋力,如何在兩者間取得一個平衡,就要靠
經驗了。
因為象棋的變化很多,如果所有可能著手都要建立對局樹,那麼對局樹將會非常龐大,所以又有各種演算法
被發展出來,用來修減對局樹,將不必要的著手先修減掉,目前最常用的當屬Alpha-Beta修減法,其演算法就留給
各位網友自行查閱相關論文了。