• 沒有找到結果。

第二章、 研究方法及系統架構

2.3 棋譜管理系統

2.3.3 新開局庫

我們的棋譜管理系統,可以建立出一個開局庫,這開局庫是傳統 的做法,樹狀結構並利用雜湊(hash)的技巧建立,棋譜來源是象棋大 師 實 戰 譜 , 資 料 庫 包 含 兩 大 資 料 表 positions 和 moves , 每 個 positions 有 id、盤面…等資訊,每個 moves 有 id、move、勝敗和 次數…等資訊,對每一個盤面我們都可以查詢棋譜所出現的棋步,並 知道走該步的勝敗機率等資訊。

不過這個傳統的開局庫有一些缺點,我們想要改進這個開局庫,

所以我們建立一個開局庫系統,專門處理開局庫相關資料,並建立新 的資料庫。為了簡化敘述,我們把傳統方法建立起來的資料庫稱為原 資料庫,新方法改進後的資料庫稱為新資料庫。

原資料庫的樹狀結構,在某一盤面會有幾個大師譜的棋步可以選 擇,然而有些棋譜步可信度低(例如棋譜數量少於 5 譜)或是棋步太差 (例如勝率 10%敗率 70%),導致我們並不想真的照該棋譜步走。如圖 2-17 所示,圓形和方形都是大師譜中的棋譜步,然而方形的我們不 想照著棋譜步走,所以我們象棋程式所採用的開局庫只有圓形部分。

圖 2-17 開局庫-棋譜走法

在實戰中,某盤面情況下,若底下沒有棋譜步或是沒有想走的棋

譜步時,我們程式就會脫譜,必頇進行思考。這個思考是在實戰中,

不能花費太多時間,否則會壓縮到以後的思考時間。然而既然會拖譜 的盤面是固定的,在脫譜的盤面必定就要程式思考,不如我們在平常 的時候,就先把這些脫譜時的盤面先行思考出最佳步,而且這時候程 式可以思考比較久,沒有時間壓力。如圖 2-18 所示,在某些盤面,

底下並沒有會選擇的棋步時,會利用程式思考新產生一步,就是圖中 三角形的搜尋步。在實戰中,我們通常會思考約 30 秒,而這裡的搜 尋步,我們的思考,會搜尋完超過 60 秒的那一層,這個方式是因為 是離線思考,我們會完整地把那一層給搜尋完,不浪費任何時間在某 層中途停止。

圖 2-18 開局庫-搜尋步

若搜尋步跟棋譜步相同時,整個樹會繼續往下走,若不同則就不 再往下走,這個是因為即使我們之前看到某些棋譜步並不想走,但是 那可能是該情況下逼不得已的走法,當我們的搜尋步和棋譜步相同 時,代表該棋譜步是必要的,我們也沒有其他走法,我們就轉為相信 該棋譜步。如圖 2-19 所示,中間的三角形因為沒 match 到棋譜步,

所以底下並沒有分支,而右邊的菱形剛好跟棋譜步相同,則底下會展 開分支繼續往下走。

圖 2-19 開局庫-搜尋步 match 棋譜步

傳統的開局庫,持黑持紅是使用相同的開局庫,然而我們的新開 局庫分成紅黑兩個開局庫,原因如下。第一個原因,輪到對方時,對 方開局庫跟我方不同,不一定照著我們的開局庫走,所以當對方脫離 我方開局庫時,我方也就跟著脫譜,不知該走什麼步。新開局庫的改 良方式是,輪對方時,對方不只是展開棋譜步,而是展開所有合法步,

如圖 2-20 所示,因此不論對方走什麼步,我方都能從新開局庫中找 到該走的步。

圖 2-20 開局庫-對方脫譜 1

然而所有合法步的分支實在太多,很多棋步完全沒有意義,例如 起始盤面帥五進一之類,所以我們要用另一種方法找出對方可能的有 效棋步。我們的方法是利用網站譜,也就是在 2.3.1 中提到的,群想

網站 2000 分以上玩家的實戰譜,將那些譜中的棋步,也加入新開局 庫對方的棋步中,使對方可能走的棋步更具多樣化,且不會完全沒道 理。新開局庫輪對方時就如圖 2-21 所示,會有棋譜步和網站譜步。

圖 2-21 開局庫-對方脫譜 2

分成紅黑兩個開局庫的第二個原因是,輪自己方時,只會選擇開 局庫中的一步去走,所以開局庫的樹不會那麼大,分支只要展開一支 就好。如圖 2-22 所示,傳統開局庫會把棋譜步中會選擇的棋步都展 開,而新開局庫會先把那些會選擇的做優劣排序,只展開最好的那 步,至於開局庫的棋步優劣怎麼選擇,一般來說主要看勝敗和機率跟 數量,詳細情形我們不多做講解。

圖 2-22 開局庫-我方選擇

根據輪我方選擇和輪對方選擇的不同策略,開局庫的樹長的如圖 2-23 所示,我們把不會走到的分支去掉,實際上的樹長的如圖 2-24 所示。因為輪我方和對方的不同策略,

圖 2-23 開局庫-改良後開局庫 1

圖 2-24 開局庫-改良後開局庫 2

新開局庫會分成紅黑兩個,持紅持黑時看不同的開局庫。新開局 庫的一個好處是不易脫譜,因為輪對方時有各種可能的棋步,且新開 局庫會比原開局庫多了至少一層搜尋步,且該搜尋步會比實戰花更多 的時間思考;另一個好處是新開局庫也不會大很多,因為雖然有 2 個 開局庫,且輪對方時的分支增加,但輪到自己的分支只有一條,大大 降低了整個樹的複雜度,而且新開局庫的所有搜尋步都可能在實戰中 用到,而不會白白展開搜尋而永遠走不到,浪費時間去搜尋。最後為 了使開局有點變化,我們讓整棵樹的前三層允許在幾條好的棋步中隨 機選一條,而不是只選最好的。

另外補充一點,就是新開局庫的搜尋程式版本和實戰中的搜尋程 式版本最好是同一個,否則可能會出現審局不同的衝突。我們舉一個 實戰例子,棋謀(red)對 ELP(black)的一場,開局某盤面如圖 2-25,

輪到紅方要走子,紅方如圖 2-26 走了俥九平四,此時還在開局庫中,

用的是新開局庫中的搜尋步,當時用的是棋謀 73 版的程式搜尋,黑 走了如圖 2-27 的棋步後,紅方脫譜,現場思考出俥四平六這步,實 戰用的搜尋程式是 85 版,這紅方俥的行為就是很明顯兩版本的程式 對於局勢的判斷不一致,導致使用開局庫和程式搜尋沒有做很好的銜 接,車來回移動浪費步數,最後紅也輸棋了。

圖 2-25 開局庫補充 1 圖 2-26 開局庫補充 2

圖 2-27 開局庫補充 3 圖 2-28 開局庫補充 4

相關文件