1. 程式人生 > >用這個Python庫,訓練你的模型成為下一個街頭霸王!

用這個Python庫,訓練你的模型成為下一個街頭霸王!

640?wx_fmt=gif


作者 | MJ-Murray

譯者 | 孤鴻

整理 | Jane

出品 | AI科技大本營


從世界矚目的圍棋遊戲 AlphaGo,近年來,強化學習在遊戲領域裡不斷取得十分引人注目的成績。自此之後,棋牌遊戲、射擊遊戲、電子競技遊戲,如 Atari、超級馬里奧、星際爭霸到 DOTA 都不斷取得了突破和進展,成為熱門的研究領域。


640?wx_fmt=jpeg


640?wx_fmt=gif


突然襲來的回憶殺~


今天為大家介紹一個在街機遊戲《街頭霸王 3》中進行模擬來訓練改進強化學習演算法的工具包。不僅在 MAME 遊戲模擬器中可以使用,這個 Python 庫可以在絕大多數的街機遊戲中都可以訓練你的演算法。


640?wx_fmt=gif

640?wx_fmt=gif


下面營長就從安裝、設定到測試分步為大家介紹一下。


目前這個工具包支援在 Linux 系統,作為 MAME 的包裝器來使用。通過這個工具包,你可以定製演算法逐步完成遊戲過程,同時接收每一幀的資料和內部儲存器的地址值來跟蹤遊戲狀態,以及傳送與遊戲互動的動作。


首先你需要準備的是

  • 作業系統:Linux

  • Python 版本:3.6+


▌安裝


你可以使用 pip 來安裝該庫,執行下面的程式碼:


640?wx_fmt=png


《街頭霸王3》示例


這個工具包目前已用於遊戲《街頭霸王 3》(Street Fighter III Third Strike: Fight for the Future), 還可以用於 MAME 上的任何遊戲。下面的程式碼演示瞭如何在街頭霸王的環境下編寫一個隨機智慧體


640?wx_fmt=png


此外,這個工具包還支援 hogwild 訓練:


640?wx_fmt=png


640?wx_fmt=gif

640?wx_fmt=gif


遊戲環境設定


  • 遊戲 ID


在建立一個模擬環境之前,大家需要先載入遊戲的 ROM,並獲取 MAME 所使用的遊戲 ID。比如,這個版本街頭霸王的遊戲 ID 是“sfiii3n”,你可以通過執行以下程式碼來檢視遊戲ID


640?wx_fmt=png


該命令會開啟 MAME 模擬器,你可以從遊戲列表中選擇你所要的那款遊戲。遊戲的 ID 通常位於標題後面的括號中


  • 記憶體地址


實際上該工具包與模擬器本身不需要太多的互動,只需要查詢和內部狀態相關聯的記憶體地址,同時用所選取的環境對狀態進行跟蹤。你可以使用 MAME Cheat Debugger 來觀察隨著時間的變化,記憶體地址值發生了怎樣的改變。

可以使用以下命令執行 Debugger


640?wx_fmt=png


更多關於該除錯工具的使用說明請參考此教程:

https://www.dorkbotpdx.org/blog/skinny/use_mames_debugger_to_reverse_engineer_and_extend_old_games


當你確定了所要跟蹤的記憶體地址後可以執行以下命令進行模擬


640?wx_fmt=png


該命令會啟動模擬器,並在工具包匯入到模擬器程序時暫停。


  • 分步模擬


在工具包匯入完成後,你可以使用 step 函式分步進行模擬


640?wx_fmt=png


step 函式將以 Numpy 矩陣的形式返回 frame 和 data 的值,同時也會返回總時間步長的所有記憶體地址整數值。


  • 傳送輸入


如果要向模擬器輸入動作,你還需要確定遊戲支援的輸入埠和欄位。例如,在街頭霸王遊戲中需要執行以下程式碼進行投幣:


640?wx_fmt=png


可以使用 list actions 命令檢視所支援的輸入埠,程式碼如下:


640?wx_fmt=png


以下返回的列表就包含了街頭霸王遊戲環境中可用於向 step 函式傳送動作的所有埠和欄位:


640?wx_fmt=png


模擬器還有一個 frame_ratio 引數,可以用來調整你的演算法幀率。在預設設定下,NAME 每秒能生成 60 幀。當然,如果你覺得這樣太多了,你也能通過以下程式碼將其改為每秒 20 幀:


640?wx_fmt=png


640?wx_fmt=gif


▌效能基準測試


目前該工具包的開發和測試已經在 8 核AMD FX-8300 3.3GHz CPU 以及 3GB GeForce GTX 1060 GPU 上完成。在使用單個隨機智慧體的情況下,街頭霸王遊戲環境可以以正常遊戲速度的 600%+ 執行。而如果用 8 個隨機智慧體進行 hogwild 訓練的話,街頭霸王遊戲環境能以正常遊戲速度的 300%+ 執行。

簡單的 ConvNet 智慧體


為了確保該工具包能夠訓練演算法,我們還設定了一個包含 5 層 ConvNet 的架構,只需進行微調,你就能用它來進行測試。在街頭霸王的實驗中,這個演算法能夠成功學習到遊戲中的一些簡單技巧如:連招 (combo) 和 格擋 (blocking)。街頭霸王的遊戲機制是由易到難設定了 10 個關卡,玩家在每個關卡都要與不同的對手對戰。剛開始時,智慧體平均只能打到第二關,而當經過了 2200 次訓練後,它平均能打到第 5 關。學習率的設定是通過每一局中智慧體所造成的淨傷害和所承受的傷害來計算的。


640?wx_fmt=jpeg640?wx_fmt=gif


原文連結:

https://github.com/M-J-Murray/MAMEToolkit



——【完】——


2018 中國大資料技術大會將於 12 月 6 - 8 日在新雲南皇冠假日酒店舉行。匯聚超百位國內外實力講師從學界翹楚到行業一線大拿:

管曉巨集:中國科學院院士;

張巨集江:原始碼資本投資合夥人;

張曉東:美國俄亥俄州立大學 Robert M. Critchfield 講席教授;

陳性元:北京資訊科學技術研究院副院長;

周靖人:阿里巴巴集團副總裁;

李浩源:Alluxio 公司創始人&CEO

......

全方位立體解讀大資料時代的技術程序,為眾技術愛好者奉上一場優質乾貨盛宴。


640?wx_fmt=jpeg