前文回顧
在上篇文章中,我們約定了一種衡量格子價值的方式,如下表。
綜合價值排序 | 己方價值 | 敵方價值 | 對應的獎勵數值 |
---|---|---|---|
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)是一種模擬自然選擇和遺傳機制的最佳化演算法。它用於尋找問題的最優解,特別適用於複雜的最佳化問題和搜尋問題。遺傳演算法基於達爾文的自然選擇理論,透過模擬生物進化過程來逐步改進解決方案。
遺傳演算法的基本步驟如下:
-
初始化:建立一個初始種群,種群中的每一個個體(通常稱為染色體或解)是問題的一個潛在解。
-
評估:計算種群中每個個體的適應度值,這通常透過一個目標函式來進行,適應度值表示個體的優劣。
-
選擇:根據適應度值選擇個體進行繁殖,優良個體有更高的機率被選擇,以生成下一代種群。
-
交叉(Crossover):透過將兩個個體的部分基因交換,生成新的個體。這一步模仿了生物的交配過程,可以產生新的解。
-
變異(Mutation):在某些個體中隨機改變基因,以引入新的基因變異。這一步幫助演算法跳出區域性最優解,增加解的多樣性。
-
替換:將一部分個體替換為最優良的個體,保留最優秀的基因,使得種群的型狀不會出現下降或震盪。
-
終止:判斷演算法是否滿足終止條件,如達到最大迭代次數或找到足夠好的解。如果滿足條件,演算法終止,返回最優解;否則,返回第2步。
遺傳演算法實現思路
初始化
本文所設計的AI決策方案共包含12個引數,其中11個是獎勵權重\(R_i\),1個是對劣質選項接受度\(K\)。
我們可以定義\(N\)個智慧體,分別用初始權重進行初始化,一般來說,\(N\)可以取10~100,最好選擇偶數,否則會有一些不必要的麻煩。
初始化過程可以用數學公式表示為:
其中,\(W_0\)表示初始權重,\(W_i^{t=0}\)表示第\(t\)代的第\(i\)個個體。
評估
本例中,採用讓AI對弈的方式,根據AI在棋局中的表現評估AI得分,具體流程如下:
- 生成一個從1到N的隨機排列,並將其按順序分配給AI
- 將序號為1、3、5、...的AI與序號為2、4、6、...的AI對弈
- 將棋局結果記錄到AI得分表內。
- 是否完成\(N_R\)輪對局,倘若未完成,則返回到1。
- 對AI進行排名。
交叉
當完成排名時,讓排名後50%的AI及前50%的AI兩兩組合,其數學公式如下
其中:\(c\)為學習因子(交叉率),表示AI在學習過程中對新知識(權重)的接受程度,\(c\)越大,AI越傾向於接受新權重,\(c\)越小,AI越傾向於保留舊權重。交叉率\(c\)一搬可取\(0.01\sim0.3\)
替換
首先定義區域性最優個體和全域性最優個體。
-
區域性最優\(W_b^t\):如果一個個體在本輪中的綜合成績排名為第一名(勝場最多),那麼稱其為區域性最優個體。
-
全域性最優\(W_B\):當只進行一輪迭代時,全域性最優個體等於區域性最優個體,即:\(W_B=W_b^{t=0}\)。當進行了不止一局遊戲時,將新的區域性最優個體與全域性最優個體進行\(N_R\)輪對局,倘若全域性最優個體獲勝,則其依舊為全域性最優個體,倘若其失敗,則區域性最優個體成為新的全域性最優個體。可以用數學公式表示為:
為了保留最優的性狀,將排名靠後的部分個體替換為全域性最優個體,記替換率為\(s\),一般取\(0.02\sim 0.1\)
變異
在變異過程中,個體的基因發生隨機的改變。定義變異係數\(m\),其絕對了變異的程度,一般來說\(m\)的範圍在\(0.01\sim0.1\)數學公式如下:
其中\(W_{i,j}^{t}\)表示第\(t\)代的第\(i\)個個體的第\(j\)個權重,\(m_j\)是在\((-m,m)\)內的隨機數。
流程彙總
以下給出遺傳演算法學習的流程
-
初始化種群
-
建立棋局,各個個體互相對戰,統計得分並進行排名
-
判斷是否達到停止條件,若不是則繼續。
-
依排名將個體兩兩匹配,進行交叉操作
-
將排名靠後的個體分別替換為區域性最優個體和全域性最優個體
-
進行變異操作
-
轉至步驟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 |