• 沒有找到結果。

結論與未來方向

BitBoard 能應用在多種不同的程式上,但是在有些遊戲中會出現特殊狀況 或規則,例如本研究的炮位問題,這時就可以利用本研究的切割與合併的技巧 來解決許多本來難以解決的狀況,這不只是解決單一問題的方法,也是一種新 的思維,經過些許轉換,就能簡化不同問題。圖 8.1 為產生西洋棋城堡走步簡 化範例,此問題原本是使用一種稱為 Magic Bits 的方法解決[5],非常複雜。

圖 8.1 簡化範例

0 1 0

0 1 0

1 1 1

1 1 1

R R 1 1 1

1 1 1

1 0 0

1 0 0

範例盤面 A B C D E

範例盤面為一個西洋棋盤面,R 為城堡,黑色框框為任意一子,白色框框 為空格,A、B、C、D、E 為各行的索引。

這裡以產生與城堡同一行的走步做為示範,同一列的走步可以用一樣的方 法產生,和產生炮之走步的方法一樣,先將與城堡同一行的資料切割下來移到 第一行,得到行 A,再將它分為上下兩段得到行 B,上半段中找出離城堡最近 的黑色框框,本範例中為上面數下來第二個位置,則將從上面數下來第二個位 置以上的位元全部填入 0(城堡不能走的位置),第三個位置以下全部填入 1(城堡 可以走的位置)得到行 C,行 B 中下半段也是找出離城堡最近的黑色框框,與上 一個步驟相反,以上全部填 1,以下全部填 0 得到行 D,將行 C 與 C 行 D 做一 次 AND 的運算就可以得到城堡在該行的走步了。

演算法部份,透過本研究所研發出來的暗棋程式 DarkCraft,棋力有很大的 提升,在比賽中也有不錯的成績,這些演算法確有實效。

第二節 未來方向

目前電腦皆為 64 位元和 32 位元,許多遊戲的棋盤不是剛好有 64 格或 32 格。例如 19 路圍棋棋盤有 361 格,若要儲存 361 個位元就需要 6 組 64 位元,

還會空下 23 個位元,要整合 6 組 64 位元也不容易。9 路圍棋有 81 格也不是 32 的倍數,像這類遊戲要使用 BitBoard 就需要克服更多問題或讓許多位元空著,

這部分仍有很大的發展空間。

暗棋與其他遊戲最大的不同處在於,它非常容易和局,正式比賽中也常出 現。本來大贏的盤面以和局收場,或要輸可是能拖到和局的盤面卻輸掉。由於 這個遊戲有未翻子,加上棋子會循環相剋,就算知道剩下那些子沒翻開,也不 知道他們到底在哪裡,所以要準確判斷局勢好壞非常困難。如果能想出完整判 斷局勢好壞的方法,就可以在大贏但快和局的盤面翻子,以增加獲勝的機會。

但在快輸的盤面不要翻子,一直拖到和局,也能結合翻子與走子的搜尋產生更 多變化的下法。未來可以加入機器學習和動態審局配分再強化程式。

目前初步推測,選擇良好的翻子時機能解決上述問題,目前演算法翻子時 機為「得到盤面資料先做走步搜尋,當目前無法吃到敵方子,且己方沒有子會

被吃時才翻子」。若改成「得到盤面資料先做翻子搜尋,得到期望值分數,再做

走步搜尋,並設計一個基準來比較哪個動作較好,再選擇接下來的動作」,當我

們劣勢時,翻子分數可能會較低,就不會翻子,盡量走空步讓遊戲和局,優勢

相關文件