緒論
本合集將詳細講述如何實現基於群只能遺傳演算法的五子棋AI,採用C++作為底層程式語言
本篇將簡要討論實現思路,並在後續的文中逐一展開
瞭解五子棋
五子棋規則
五子棋是一種經典的棋類遊戲,規則簡單卻充滿策略性。遊戲在一個19×19的棋盤上進行(也可以使用13×13或15×15的棋盤)。遊戲的目標是率先在棋盤上連成五個相同顏色的棋子(橫向、縱向或斜向)。
基本規則:
- 棋子:遊戲使用兩種顏色的棋子,通常為黑白兩色。
- 落子:玩家輪流在棋盤上放置自己的棋子。
- 勝利條件:第一個在直線上(橫向、縱向或對角線)連成五個棋子的玩家獲勝。
五子棋操作簡單,規則易懂,但需要很高的策略和技巧才能贏得比賽。
人類玩家是如何下五子棋的?
以下是一些五子棋對決的思路:
控制中心區域
- 中心位置的重要性:棋盤中心的控制對遊戲至關重要。控制中心區域可以給你更多的機會去建立和阻止對方的五子連線。
建立威脅
- 連線威脅:儘量讓對方必須防守而不能專注於自己的進攻。
- 雙活三:如果形成兩個三子連線,並且這兩個連線不會被對方輕易阻擋,就能夠在幾步內取得勝利。
防守對方的連線
- 觀察對方的棋子佈局:注意對方棋子的排列,尤其是對方試圖形成的三子、四子連線。
- 及時阻擋:如果對方有連續的三子或四子的排列,應該優先阻擋對方的連線。
預判對方策略
- 猜測對方意圖:瞭解對方的策略,預測對方的下一步棋,提前做出相應的防禦或進攻。
AI應該如何模仿?
為了讓AI棋手學會下五子棋,甚至超越人類玩家的水平,首先應當有以下步驟:
-
理解棋盤資訊:將棋盤的狀態轉換為程式能夠處理的格式。這通常包括將棋盤上每個位置的狀態(如空白、黑子或白子)編碼為特定的資料結構,以便程式可以進行分析和處理。
-
設定行為集合:定義AI可以執行的操作範圍。在五子棋中,AI可以在棋盤上任意未被佔據的位置落子。
-
設定決策模式:確定AI的決策方式。本例中,AI採用貪心策略,即在每一步中選擇預期回報最高的行動。貪心策略透過評估每個可能的落子位置的即時收益,選擇對當前局勢最有利的行動。
理解棋盤資訊
理論上來講,能夠給AI提供的資訊越多,那麼AI做出的決策質量就越高,對於棋盤資訊可以以格子為單位,評估該格子對於己方、和敵方的價值。
舉例來說,如果在此處落子,敵方可以構成五子連珠,那麼對於地方而言這是非常高價值的格子,那麼在己方回合,當務之急是在此處落子,阻止對方勝利,除非在其它位置落子己方可以勝出。
對此,我們可以對棋盤上每一個可行位置進行打分,評估其對於己方、敵方的價值。
如何定義該位置對己方的價值?
一枚棋子可以在四個方向上與其它棋子連成五子,即:水平、豎直、對角線、主對角線
可以採用如下方法判斷在某一具體方向上的價值
- 在四個方向中選擇某一方向
- 向正方向、負方向分別查詢4格,如遇到空格或敵方棋子則提前停止
- 統計己方棋子個數,以及兩端的被遮攔情況。
例如對於下圖,在該處落子後,形成水平方向上的兩子連珠,且一端有遮攔一端無遮攔
一共可能形成如下幾種情形,我們可以依據經驗公式評估其價值。
子數 | 1子 | 2子 | 3子 | 4子 | 5子 |
---|---|---|---|---|---|
無遮攔 | ③ | ③ | ② | ① | MAX |
一端遮攔 | - | - | ③ | ② | ① |
兩端遮攔 | - | - | - | - | ① |
'-' 表明該位置在該方向上具有的價值較低,不予考慮。然而,如果其他方向上的情況更有利,那麼該位置的價值仍然可能非常高。。
接下來,我們可以討論棋子在多個方向上的價值,一般來說,僅需要考慮最高價值的兩個方向。
這是因為兩個活三(無遮攔的三子連珠)足以致勝,三個活三並沒有明顯優勢。
價值 | 最優方向 | 次優方向 |
---|---|---|
Lv1 | MAX | ? |
Lv1 | ① | ? |
Lv2 | ② | ② |
Lv3 | ② | ③ |
Lv3 | ② | - |
Lv4 | ③ | ③ |
Lv4 | ③ | - |
Lv4 | - | - |
“?” 指代任意情況,例如(MAX-?)對應了(MAX-MAX)、(MAX-①)、(MAX-②)、(MAX-③)、(MAX-'-')
該定義方式將行為的優先順序分為了四個等級
- Lv1:下子直接取勝,或在一回合內取勝。
- Lv2:下在大機率在若干回合內取勝。
- Lv3:能夠迫使對方一直防禦。
- Lv4:收益較低。
如何綜合攻防?
若要綜合攻防,必須將具體位置對敵方的價值考慮進去。倘若某一位置對敵方來說是高價值的,那我們在此處落子可以破壞敵方陣型,削弱敵方價值,同樣我們可以給出如下價值表
綜合價值排序 | 己方價值 | 敵方價值 | 對應的獎勵數值 |
---|---|---|---|
1 | Lv1 | ? | \(2^{20}\) |
2 | ? | Lv1 | \(2^{16}\) |
3 | Lv2 | ? | \(2^{12}\) |
4 | ? | Lv2 | \(2^{8}\) |
5 | Lv3 | ? | \(2^{4}\) |
6 | Lv4 | ? | \(2^{0}\) |
“?” 指代任意情況,例如(Lv1-?)對應了(Lv1-Lv1)、(Lv1-Lv2)、(Lv1-Lv3)、(Lv1-Lv4)
在進行判斷時,應當從上往下逐一判斷。
這裡給出的獎勵數值僅供參考。
總結
在本小節中,我們精心構建了一種全新的綜合評估方法,旨在全面衡量棋盤上的每個格子對於己方和敵方的戰略價值。透過設計一系列精細的量化指標,我們賦予了AI/計算機深入解讀棋盤格局的能力,使其能夠準確判斷每個格子的具體價值。這一方法為AI/計算機制定決策提供了堅實的資料支撐。
行為集規定與決策制定
為了使AI做出高效的決策,我們首先需要定義一套合適且簡潔的行為集合。這意味著AI在做出選擇時,不必每次都逐一考慮棋盤上的所有位置。在此基礎上,我們需要開發一種策略,幫助AI從眾多可能的決策中篩選出最為恰當的一個。透過這種方式,AI能夠在複雜的環境中迅速而準確地做出最佳決策。
ROI 感興趣區域
倘若上一輪你在棋盤中心落子,那麼下一輪你不應當在棋盤的最角落落子。
一般來說,在落子時,只有與已有棋子(無論是己方還是敵方)鄰接的位子才具有價值,首先我們定義鄰接。
考慮棋盤上只有一子的情形,規劃出與其具有高價值“聯動”的區域如下:
可以給出更具體的定義:
倘若一個格子位於另一格子的水平、豎直、主對角線或副對角線方向上,並且兩格子距離小於等於2,那麼稱這兩個格子為鄰接關係。進一步的,稱距離為1為強鄰接,距離為2為弱鄰接。
進一步的,我們定義感興趣區域如下:
滿足以下要求之一的空格子為感興趣區域:
- 該格子是棋盤正中心。
- 該格子與至少一個己方棋子所處格子存在鄰接關係。
- 該格子與至少一個敵方棋子所處格子存在強鄰接關係。
下圖給出了己方落子ROI區域的示例,其中紅色為己方棋子,藍色為對方棋子,灰色表示感興趣區域。
決策進行
在進行決策前,我們可以評估感興趣區域中所有格子的價值,假定ROI中格子的個數是\(N\),格子的價值分別是\(x_0, x_1, ..., x_{N-1}\),我們可以採用下述兩種方法選擇決策
硬最大值 hardmax
選擇獎勵最大的決策,即
軟最大值 hardmax
不同於硬最大值,軟最大值以一定機率接受非最優解,其包含一個常量\(K\),常量K越大表示對低價值決策的接受程度越大,當常量\(K\to 0\)時,軟最大值退化為硬最大值;當常量\(K\to +\infty\)時,軟最大值退化為隨機抽取。
結語
下一篇中我們將繼續討論如何訓練AI。
在最後,給出一個流程圖供大家參考,在後文中我將詳細討論。