1 of 37

PAIA - 讓機器學玩遊戲

李國源

2 of 37

一張圖了解弱人工智慧(機器學習)

監督式學習�訓練資料需要做標記

迴歸�輸出數值

分類�輸出類別

增強式學習�提供遊戲記分規則

非監督式學習�訓練資料不需做標記

分群

對抗生成�(GAN)

3 of 37

機器學習二大階段

訓練階段

測試階段

機器學習數學模型�F(x)

機器學習數學模型�F(x)�(已訓練)

大量觀測資料 x

調整模型參數

x1

x2

xn

...

xtest

未觀測過之�測試資料 xtest

輸出測試結果:3

圖像來源網址�http://yann.lecun.com/exdb/mnist/

4 of 37

機器學習的三個層次(實作)

Level 1.會用AI相關的延伸工具(不寫文字式程式)

Level 2.會 Call python 函式做簡單的機器學習運用(使用已訓練模型)

Level 3.可收集資料並訓練 & 調整模型參數

5 of 37

案例實作: PAIA 打造自動玩遊戲的AI

下載 PAIA DeskTop (使用google關鍵字即可)�https://docs.paia-arena.com/zh-tw/paia-desktop

6 of 37

安裝paia desktop

7 of 37

PAIA 遊戲訓練與測試 流程

step1.maunal

step2.model_training

step3.model_playing

手動玩遊戲並記錄遊玩情資

使用step1產生之遊玩情資訓練AI模型

使用step2產生之AI模型自動玩遊戲

8 of 37

遊戲無法正常開啟怎麼辬

9 of 37

遊戲無法正常開啟怎麼辬

10 of 37

複製PAIA程序路徑

11 of 37

將PAIA資料夾排除在安全檢查之外

12 of 37

進入打磚塊遊戲

13 of 37

Step1.手動玩遊戲並記錄情資(建立與標記訓練資料)

收集完資料務必關閉遊戲視窗,以免持續收集錯誤資料

14 of 37

查看已建立之遊戲情資檔案

※Note:�feature檔存『遊戲狀態』�target檔存對應不同遊戲狀態『按下左鍵或右鍵』��玩家由目前的『遊戲狀態』(feature)�決定『輸入左鍵或右鍵』(target)�AI亦然

15 of 37

Step2 使用step1遊玩資料訓練AI模型

16 of 37

Step3 使用step2訓練好的AI模型玩遊戲

17 of 37

K最近鄰居演算法(KNN)

x

y

target: 按下右鍵 (1)

target: 按下左鍵 (2)

每個樣本的座標 (xi,yi) �可形成1個feature(特徵值)�每1個feature(特徵值) �都會對應1個target(目標值):

Q:若有一觀測樣本特徵值如圖(藍色方塊),當下可以預測下一步該按 『左鍵』 還是 『右鍵』?

K=?

18 of 37

K最近鄰居演算法(KNN)

target: 按下右鍵 (1)

target: 按下左鍵 (2)

4

2

2

KNN 參數選擇-權重:�※法I 權重=距離倒數 ⇒ 距離越近權重越的大

ex:右圖紅點的權重和為 ¼ + ½

綠點的權重和為 ½� ¼ + ½ > ½ � 故預測藍點對target類別為:

※法II 權重=平均 ⇒ 全部target權重都一樣

按下右鍵 (1)

19 of 37

Tips: 加入第三種類別 ⇒ 無動作

類別1:向右�類別2:向左�類別3:不動作

20 of 37

paia MLGame基本架構

21 of 37

paia MLGame基本架構 (python)

22 of 37

MLGame 框架運行方式

MLGame

附加 AI 指令�AI script (.py)

mlgame-遊戲本體

PAIA Desktop使用者介面(google blockly)�

.xml

python MLGame.py -i ml_play.py -f 120 arkanoid --difficulty NORMAL --level 2

23 of 37

Paia 重要檔案資料夾架構

24 of 37

Paia 重要檔案資料夾架構

所有arkanoid 的 AI Script 的.py檔都放在此資料夾

25 of 37

遊戲基本物理環境-參考github說明

  1. 遊戲物件
    • 板子
      • 綠色長方形 寬度40,高度5
      • 每一影格的移動速度是 (±5, 0)
      • 初始位置在 (75, 400) 此數值為物件左上角的座標
      • 藍色正方形 邊長5
      • 每一影格的移動速度是 (±7, ±7)�故簡單模式中球進行向量只會有四種可能:左上,左下,右上,右下
      • 球會從板子所在的位置發出,可以選擇往左或往右發球。
      • 如果在 150 影格內沒有發球,則會自動往隨機兩個方向發球
      • 初始位置在 (93, 395) 此數值為物件左上角的座標
    • 磚塊
      • 橘色長方形 寬度25,高度10
      • 其位置由關卡地圖決定
    • 硬磚塊
      • 紅色長方形 寬度25,高度10
      • 硬磚塊要被打兩次才會被破壞。其被球打一次後,會變為一般磚塊。�但是如果被加速後的球打到,則可以直接被破壞

40

500

200

y=400

26 of 37

遊戲基本物理環境-參考github說明

  • 行動機制
    • 左右移動板子,每次移動 5px
  • 座標系統
    • 螢幕大小 200 x 500
    • 系統提供物件的座標資料,皆是物件左上角的座標
    • 板子 40 x 5
    • 球 5 x 5 ⇒ 有接到球的時候 y=395
    • 磚塊、硬磚塊 25 x 10
  • 切球機制�球的 x 方向速度會因為接球時板子的移動方向而改變:
    • 如果板子與球的移動方向相同,則球的 x 方向速度會增為 ±10,可以一次打掉硬磚塊
    • 如果板子不動,則球的 x 方向速度會回復為 ±7
    • 如果板子與球的移動方向相反,則球會被打回原來來的方向,速度會回復為 ±7
  • 此機制加入在普通難度中。

(0,0)

x

y

27 of 37

碰撞反彈之處理圖示

(100,390)

原本該為 (100+7,390+7)�但因碰撞發生,球被推回表面

(107,395)

(107+7,395-7)

frame=100

frame=101

frame=102

28 of 37

直接以物理方式遞迴求球之落點

29 of 37

使用人工智慧之迴歸模型求球之落點

30 of 37

如何上傳寫好的AI至paia網站上進行對戰?

31 of 37

給使用 python 解題之使用者的建議

建議安裝 thonny

搭配python版本:3.9

======必備套件=======

pygame==2.0.1 (遊戲建構套件)

scikit-learn==0.24.1 (機器學習套件)

pandas==1.4.1 (資料處理套件)

======選用套件======

box2d-py==2.3.8 (for 迷宮車)

pyinstaller==4.2 (製造exe檔)

matplotlib==3.3.4 (繪圖表套件)

pynput==1.7.6

32 of 37

加入「增強式學習」之概念

程式於每次失敗後,收集訓練資料,更新模型

隨著訓練資料的累積,自動玩遊戲的AI將越來越強

33 of 37

如果提早知道訓練出來的模型有沒有問題?

訓練階段

測試階段

機器學習數學模型�F(x)

機器學習數學模型�F(x)�(已訓練)

訓練資料集

調整模型參數

xtest

未觀測過之�測試資料 xtest

輸出測試結果:3

驗証資料集

驗証辨識效果

34 of 37

訓練資料之 K-交錯驗証(k-fold cross validation)

https://jason-chen-1992.weebly.com/home/-cross-validation

35 of 37

Q-Learning

https://colab.research.google.com/github/Hvass-Labs/TensorFlow-Tutorials/blob/master/16_Reinforcement_Learning.ipynb

用機器學習預估這一項

36 of 37

參考線上教學連結

37 of 37

感謝聆聽

Q & A