• 沒有找到結果。

分割殘局庫

在文檔中 象棋殘局庫之研究 (頁 27-31)

本章說明如何利用兵卒的走法進一步分割象棋殘局庫,並為有兵 卒的象棋殘局庫間的關係新增定義。第 3.1 節說明兵卒的走法以及用 兵卒的位置來細分殘局類型。第 3.2 節說明以兵卒的位置分割象棋殘 局庫時,有兵卒的象棋殘局庫會有甚麼結構,以及其結構特性將有何 種效益。第 3.3 節說明以兵卒的位置分割象棋殘局庫時,盤面資訊應 該做的相應的改變。

3.1 兵卒走法(The Movement of the Pawn)

象棋的兵卒走法為只能前進一格不能後退,並且在兵卒過河後,

有能夠左右橫向移動一格的能力;若把兵卒在同一列上的所有盤面視 為同一殘局類型會發現,當兵卒橫向移動時子盤面仍然是同一殘局類 型,但當兵卒前進時子盤面便轉換到另一殘局類型,而且這轉換是不 可逆的;這個特性跟吃子後子盤面轉換到子資料庫一樣,根據這個特 性,可以以兵卒的位置將象棋殘局庫再做一次分割。

圖 3-1 卒在不同列的位置關係圖

18

3.2 分割殘局庫(Split Endgame Databases)

第 2 列。在此為與「子資料庫」(Supporting Database)作區別,在 此另外定義同一個類型殘局庫中的所有盤面能經由兵卒前進(但不吃 子)所走到的各種類型子盤面所在的的殘局庫為其「進資料庫」

(Advancing Database),例如 KP1K 是 KP2K 的進資料庫。

如此分割象棋殘局庫後,如圖 3-2(a)與圖 3-2(b),和子資料庫 類似,建立象棋殘局庫時也必須先建立所有進資料庫。在建立進資料 庫時,也因為有些進資料庫之間是互相獨立的,例如 KP5P7K 與 KP6P6K,這些進資料庫是可以平行處理的;另外原本 KPKA 需等到 KPK 建立完後才可開始建立,KP1KA 則不必等到 KP1K~KP7K 全部建立完才 能開始建立,只要 KP1K 建立完畢,KP1KA 即可開始建立。而在分割 象棋殘局庫後,每個進資料庫的大小都比原來的未分割的資料庫小,

因此有些進資料庫就能完全載入到記憶體中處理。

19

20

圖 3-2(a) 象棋殘局庫結構(KPK)

圖 3-2(b) 象棋殘局庫結構(KPPK)

3.3 盤面資訊的問題(Problem of Position Value)

前面提過,使用 DTC(Distance-To-Conversion)時會造成必勝盤 面可能贏的更慢的問題,但象棋的 50 回合規則影響不大,原因是吃 子後不吃子回合數會重算;而轉換到進資料庫的棋步是兵卒前進但並 不吃子,所以贏的太慢可能會超過 50 回合,雖然在產生象棋殘局庫 時忽略 50 回合規則,但我們還是希望它對於分割象棋殘局庫的影響 不要太大,因而減少殘局庫的實用性;如果在轉換到進資料庫時使用 DTC,則 50 回合規則對象棋殘局庫的影響可能會太大,因為在一般的 情況下,兵卒保持在比較高的位置的會比較有利,機動性也比較好。

為了避免分割象棋殘局庫後,因為使用 DTC 而被 50 回合規則影 響殘局庫的實用性,我們建議改使用 DTM 來紀錄盤面資訊,但為了避 免使用 DTM 導致殘局庫變大,如果子盤面在子資料庫時,我們仍然使 用 DTC 來減少最大棋步,也就是說我們利用兵卒位置分割象棋殘局庫 後混合使用 DTM 與 DTC,但 DTM 只限於當子盤面在進資料庫時,例如 當兵卒前進而又同時可以吃掉一顆子時,我們還是優先使用 DTC 來記 錄盤面資訊,因此盤面資訊的值會與未分割前的殘局庫的 DTC 值一模 一樣,所以搜尋最佳棋步的方法也跟 DTC 一樣選擇走向距離減 1 的子 盤面,這樣就可以避免優先選擇兵卒前進一步而贏的太慢,畢竟對於 能贏的盤面沒有人會希望因為贏的太慢而被判和。

圖 3-3 DTC 與 DTM 的差別

21

在文檔中 象棋殘局庫之研究 (頁 27-31)

相關文件