五子棋AI:實現邏輯與相關背景探討(上)

SXWisON發表於2024-09-07

緒論

本合集將詳細講述如何實現基於群只能遺傳演算法的五子棋AI,採用C++作為底層程式語言
本篇將簡要討論實現思路,並在後續的文中逐一展開

瞭解五子棋

五子棋規則


五子棋是一種經典的棋類遊戲,規則簡單卻充滿策略性。遊戲在一個19×19的棋盤上進行(也可以使用13×13或15×15的棋盤)。遊戲的目標是率先在棋盤上連成五個相同顏色的棋子(橫向、縱向或斜向)。

基本規則:

  1. 棋子:遊戲使用兩種顏色的棋子,通常為黑白兩色。
  2. 落子:玩家輪流在棋盤上放置自己的棋子。
  3. 勝利條件:第一個在直線上(橫向、縱向或對角線)連成五個棋子的玩家獲勝。

五子棋操作簡單,規則易懂,但需要很高的策略和技巧才能贏得比賽。

人類玩家是如何下五子棋的?

以下是一些五子棋對決的思路:

控制中心區域

  • 中心位置的重要性:棋盤中心的控制對遊戲至關重要。控制中心區域可以給你更多的機會去建立和阻止對方的五子連線。

建立威脅

  • 連線威脅:儘量讓對方必須防守而不能專注於自己的進攻。
  • 雙活三:如果形成兩個三子連線,並且這兩個連線不會被對方輕易阻擋,就能夠在幾步內取得勝利。

防守對方的連線

  • 觀察對方的棋子佈局:注意對方棋子的排列,尤其是對方試圖形成的三子、四子連線。
  • 及時阻擋:如果對方有連續的三子或四子的排列,應該優先阻擋對方的連線。

預判對方策略

  • 猜測對方意圖:瞭解對方的策略,預測對方的下一步棋,提前做出相應的防禦或進攻。

AI應該如何模仿?

為了讓AI棋手學會下五子棋,甚至超越人類玩家的水平,首先應當有以下步驟:

  1. 理解棋盤資訊:將棋盤的狀態轉換為程式能夠處理的格式。這通常包括將棋盤上每個位置的狀態(如空白、黑子或白子)編碼為特定的資料結構,以便程式可以進行分析和處理。

  2. 設定行為集合:定義AI可以執行的操作範圍。在五子棋中,AI可以在棋盤上任意未被佔據的位置落子。

  3. 設定決策模式:確定AI的決策方式。本例中,AI採用貪心策略,即在每一步中選擇預期回報最高的行動。貪心策略透過評估每個可能的落子位置的即時收益,選擇對當前局勢最有利的行動。

理解棋盤資訊

理論上來講,能夠給AI提供的資訊越多,那麼AI做出的決策質量就越高,對於棋盤資訊可以以格子為單位,評估該格子對於己方、和敵方的價值。

舉例來說,如果在此處落子,敵方可以構成五子連珠,那麼對於地方而言這是非常高價值的格子,那麼在己方回合,當務之急是在此處落子,阻止對方勝利,除非在其它位置落子己方可以勝出。

對此,我們可以對棋盤上每一個可行位置進行打分,評估其對於己方、敵方的價值。

如何定義該位置對己方的價值?


一枚棋子可以在四個方向上與其它棋子連成五子,即:水平、豎直、對角線、主對角線

description

可以採用如下方法判斷在某一具體方向上的價值

  1. 在四個方向中選擇某一方向
  2. 向正方向、負方向分別查詢4格,如遇到空格或敵方棋子則提前停止
  3. 統計己方棋子個數,以及兩端的被遮攔情況。

例如對於下圖,在該處落子後,形成水平方向上的兩子連珠,且一端有遮攔一端無遮攔

description

一共可能形成如下幾種情形,我們可以依據經驗公式評估其價值。

子數 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 感興趣區域


倘若上一輪你在棋盤中心落子,那麼下一輪你不應當在棋盤的最角落落子。

一般來說,在落子時,只有與已有棋子(無論是己方還是敵方)鄰接的位子才具有價值,首先我們定義鄰接。

考慮棋盤上只有一子的情形,規劃出與其具有高價值“聯動”的區域如下:

description

可以給出更具體的定義:

倘若一個格子位於另一格子的水平、豎直、主對角線或副對角線方向上,並且兩格子距離小於等於2,那麼稱這兩個格子為鄰接關係。進一步的,稱距離為1為強鄰接,距離為2為弱鄰接。

進一步的,我們定義感興趣區域如下:

滿足以下要求之一的空格子為感興趣區域:

  1. 該格子是棋盤正中心
  2. 該格子與至少一個己方棋子所處格子存在鄰接關係。
  3. 該格子與至少一個敵方棋子所處格子存在強鄰接關係。

下圖給出了己方落子ROI區域的示例,其中紅色為己方棋子,藍色為對方棋子,灰色表示感興趣區域。
description

決策進行


在進行決策前,我們可以評估感興趣區域中所有格子的價值,假定ROI中格子的個數是\(N\),格子的價值分別是\(x_0, x_1, ..., x_{N-1}\),我們可以採用下述兩種方法選擇決策

硬最大值 hardmax

選擇獎勵最大的決策,即

\[h(\mathbf{x}) = \arg\max_{i} x_i \]

軟最大值 hardmax
不同於硬最大值,軟最大值以一定機率接受非最優解,其包含一個常量\(K\),常量K越大表示對低價值決策的接受程度越大,當常量\(K\to 0\)時,軟最大值退化為硬最大值;當常量\(K\to +\infty\)時,軟最大值退化為隨機抽取

\[\text{softmax}(x_i) = \frac{e^{x_i/K}}{\sum_{j=1}^N e^{x_j/K}} \]

結語

下一篇中我們將繼續討論如何訓練AI。

在最後,給出一個流程圖供大家參考,在後文中我將詳細討論。

description

相關文章