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

SXWisON發表於2024-09-07

前文回顧


在上篇文章中,我們約定了一種衡量格子價值的方式,如下表。

綜合價值排序 己方價值 敵方價值 對應的獎勵數值
1 Lv1 ? \(2^{20}\)
2 ? Lv1 \(2^{16}\)
3 Lv2 ? \(2^{12}\)
4 Lv2 \(2^{8}\)
5 Lv3 \(2^{4}\)
6 Lv4 \(2^{0}\)

在該表中,對不同的情形,設計了不同的獎勵數值,這些數值大多是採用經驗公式,人為估計的數值,並不是最優良的數值。同樣的,在上表中的除前兩類為,其餘都可根據實際情況進一步的細分權重,這裡給出一個樣例供大家參考/理解:

綜合價值排序 己方價值 敵方價值 對應的獎勵數值
3.1 Lv2 Lv2 \(2^{13}\)
3.2 Lv2 Lv3 \(2^{12}\)
3.3 Lv2 Lv4 \(2^{11}\)

同樣是能構成殺招(Lv2等級),能順便堵死對面殺招/優良的位置自然是更好的。

在附錄中給出了詳細的權重表

本篇中我們將基於遺傳演算法討論如何讓AI學習獎勵值。

遺傳演算法概述


遺傳演算法(Genetic Algorithm, GA)是一種模擬自然選擇和遺傳機制的最佳化演算法。它用於尋找問題的最優解,特別適用於複雜的最佳化問題和搜尋問題。遺傳演算法基於達爾文的自然選擇理論,透過模擬生物進化過程來逐步改進解決方案。

遺傳演算法的基本步驟如下:

  1. 初始化:建立一個初始種群,種群中的每一個個體(通常稱為染色體或解)是問題的一個潛在解。

  2. 評估:計算種群中每個個體的適應度值,這通常透過一個目標函式來進行,適應度值表示個體的優劣。

  3. 選擇:根據適應度值選擇個體進行繁殖,優良個體有更高的機率被選擇,以生成下一代種群。

  4. 交叉(Crossover):透過將兩個個體的部分基因交換,生成新的個體。這一步模仿了生物的交配過程,可以產生新的解。

  5. 變異(Mutation):在某些個體中隨機改變基因,以引入新的基因變異。這一步幫助演算法跳出區域性最優解,增加解的多樣性。

  6. 替換:將一部分個體替換為最優良的個體,保留最優秀的基因,使得種群的型狀不會出現下降或震盪。

  7. 終止:判斷演算法是否滿足終止條件,如達到最大迭代次數或找到足夠好的解。如果滿足條件,演算法終止,返回最優解;否則,返回第2步。

遺傳演算法實現思路

初始化


本文所設計的AI決策方案共包含12個引數,其中11個是獎勵權重\(R_i\),1個是對劣質選項接受度\(K\)

我們可以定義\(N\)個智慧體,分別用初始權重進行初始化,一般來說,\(N\)可以取10~100,最好選擇偶數,否則會有一些不必要的麻煩。

初始化過程可以用數學公式表示為:

\[W_i^{t=0} = W_0 \]

其中,\(W_0\)表示初始權重,\(W_i^{t=0}\)表示第\(t\)代的第\(i\)個個體。

評估


本例中,採用讓AI對弈的方式,根據AI在棋局中的表現評估AI得分,具體流程如下:

  1. 生成一個從1到N的隨機排列,並將其按順序分配給AI
  2. 將序號為1、3、5、...的AI與序號為2、4、6、...的AI對弈
  3. 將棋局結果記錄到AI得分表內。
  4. 是否完成\(N_R\)輪對局,倘若未完成,則返回到1。
  5. 對AI進行排名。

交叉


當完成排名時,讓排名後50%的AI及前50%的AI兩兩組合,其數學公式如下

\[\begin{align*} W_{i}^{t+1}&=W_i^t\times(1-c)+W_{i-50}^t\times c, &N/2 \leq &t \leq N \\ W_{i}^{t+1}&=W_i^t\times(1-c)+W_{i+50}^t\times c, &0 \leq &t \leq N/2 \end{align*} \]

其中:\(c\)為學習因子(交叉率),表示AI在學習過程中對新知識(權重)的接受程度,\(c\)越大,AI越傾向於接受新權重,\(c\)越小,AI越傾向於保留舊權重。交叉率\(c\)一搬可取\(0.01\sim0.3\)

替換


首先定義區域性最優個體和全域性最優個體。

  • 區域性最優\(W_b^t\):如果一個個體在本輪中的綜合成績排名為第一名(勝場最多),那麼稱其為區域性最優個體。

  • 全域性最優\(W_B\):當只進行一輪迭代時,全域性最優個體等於區域性最優個體,即:\(W_B=W_b^{t=0}\)。當進行了不止一局遊戲時,將新的區域性最優個體與全域性最優個體進行\(N_R\)輪對局,倘若全域性最優個體獲勝,則其依舊為全域性最優個體,倘若其失敗,則區域性最優個體成為新的全域性最優個體。可以用數學公式表示為:

\[W_B= \begin{cases} W_b^t &\text{if}\;W_b^t \;\text{win},\\ W_B &\text{otherwise}. \end{cases} \]

為了保留最優的性狀,將排名靠後的部分個體替換為全域性最優個體,記替換率為\(s\),一般取\(0.02\sim 0.1\)

變異


在變異過程中,個體的基因發生隨機的改變。定義變異係數\(m\),其絕對了變異的程度,一般來說\(m\)的範圍在\(0.01\sim0.1\)數學公式如下:

\[W_{i,j}^{t}=W^t_{i,j}\times (1+m_j) \]

其中\(W_{i,j}^{t}\)表示第\(t\)代的第\(i\)個個體的第\(j\)個權重,\(m_j\)是在\((-m,m)\)內的隨機數。

流程彙總


以下給出遺傳演算法學習的流程

  1. 初始化種群

  2. 建立棋局,各個個體互相對戰,統計得分並進行排名

  3. 判斷是否達到停止條件,若不是則繼續。

  4. 依排名將個體兩兩匹配,進行交叉操作

  5. 將排名靠後的個體分別替換為區域性最優個體和全域性最優個體

  6. 進行變異操作

  7. 轉至步驟2

附錄

行為優先順序

  • Lv1:下子直接取勝,或在一回合內取勝。
  • Lv2:下在大機率在若干回合內取勝。
  • Lv3:能夠迫使對方一直防禦。
  • Lv4:收益較低。

初始權重表

綜合價值排序 己方價值 敵方價值 對應的獎勵數值
1 Lv1 ? \(2^{20}\)
2 ? Lv1 \(2^{16}\)
3.1 Lv2 Lv2 \(2^{13}\)
3.2 Lv2 Lv3 \(2^{12}\)
3.3 Lv2 Lv4 \(2^{11}\)
4.1 Lv3 Lv2 \(2^{9}\)
4.2 Lv4 Lv2 \(2^{8}\)
5.1 Lv3 Lv3 \(2^{6}\)
5.2 Lv3 Lv4 \(2^{4}\)
6.1 Lv4 Lv3 \(2^{2}\)
6.2 Lv4 Lv4 \(2^{0}\)

符號說明

符號 意義 數值範圍
\(W\) 個體(權重) -
\(R\) 行動的獎勵 -
\(K\) 對劣選項的接受程度 -
\(N\) 種群大小 10~100
\(N_R\) 評估時的對局輪數 10~100
\(T\) 迭代次數 20~500
\(c\) 交叉率 0.01~0.03
\(s\) 替換率 0.02~0.1
\(m\) 變異率 0.01~0.1

相關文章