從世界矚目的圍棋游戲 AlphaGo,近年來(lái),強(qiáng)化學(xué)習(xí)在游戲領(lǐng)域里不斷取得十分引人注目的成績(jī)。自此之后,棋牌游戲、射擊游戲、電子競(jìng)技游戲,如 Atari、超級(jí)馬里奧、星際爭(zhēng)霸到 DOTA 都不斷取得了突破和進(jìn)展,成為熱門的研究領(lǐng)域。
突然襲來(lái)的回憶殺~
今天為大家介紹一個(gè)在街機(jī)游戲《街頭霸王 3》中進(jìn)行模擬來(lái)訓(xùn)練改進(jìn)強(qiáng)化學(xué)習(xí)算法的工具包。不僅在 MAME 游戲模擬器中可以使用,這個(gè) Python庫(kù)可以在絕大多數(shù)的街機(jī)游戲中都可以訓(xùn)練你的算法。
下面營(yíng)長(zhǎng)就從安裝、設(shè)置到測(cè)試分步為大家介紹一下。
目前這個(gè)工具包支持在Linux系統(tǒng),作為MAME的包裝器來(lái)使用。通過(guò)這個(gè)工具包,你可以定制算法逐步完成游戲過(guò)程,同時(shí)接收每一幀的數(shù)據(jù)和內(nèi)部存儲(chǔ)器的地址值來(lái)跟蹤游戲狀態(tài),以及發(fā)送與游戲交互的動(dòng)作。
首先你需要準(zhǔn)備的是:
操作系統(tǒng):Linux
Python 版本:3.6+
▌安裝
你可以使用 pip來(lái)安裝該庫(kù),運(yùn)行下面的代碼:
▌《街頭霸王3》示例
這個(gè)工具包目前已用于游戲《街頭霸王 3》(Street Fighter III Third Strike: Fight for the Future), 還可以用于MAME上的任何游戲。下面的代碼演示了如何在街頭霸王的環(huán)境下編寫一個(gè)隨機(jī)智能體。
此外,這個(gè)工具包還支持hogwild訓(xùn)練:
▌?dòng)螒颦h(huán)境設(shè)置
游戲 ID
在創(chuàng)建一個(gè)模擬環(huán)境之前,大家需要先加載游戲的 ROM,并獲取 MAME所使用的游戲 ID。比如,這個(gè)版本街頭霸王的游戲 ID是“sfiii3n”,你可以通過(guò)運(yùn)行以下代碼來(lái)查看游戲ID:
該命令會(huì)打開(kāi) MAME模擬器,你可以從游戲列表中選擇你所要的那款游戲。游戲的 ID通常位于標(biāo)題后面的括號(hào)中。
內(nèi)存地址
實(shí)際上該工具包與模擬器本身不需要太多的交互,只需要查找和內(nèi)部狀態(tài)相關(guān)聯(lián)的內(nèi)存地址,同時(shí)用所選取的環(huán)境對(duì)狀態(tài)進(jìn)行跟蹤。你可以使用 MAME Cheat Debugger 來(lái)觀察隨著時(shí)間的變化,內(nèi)存地址值發(fā)生了怎樣的改變。
可以使用以下命令運(yùn)行Debugger:
更多關(guān)于該調(diào)試工具的使用說(shuō)明請(qǐng)參考此教程:
https://www.dorkbotpdx.org/blog/skinny/use_mames_debugger_to_reverse_engineer_and_extend_old_games
當(dāng)你確定了所要跟蹤的內(nèi)存地址后可以執(zhí)行以下命令進(jìn)行模擬:
該命令會(huì)啟動(dòng)模擬器,并在工具包導(dǎo)入到模擬器進(jìn)程時(shí)暫停。
分步模擬
在工具包導(dǎo)入完成后,你可以使用 step 函數(shù)分步進(jìn)行模擬:
step 函數(shù)將以 Numpy 矩陣的形式返回 frame 和 data 的值,同時(shí)也會(huì)返回總時(shí)間步長(zhǎng)的所有內(nèi)存地址整數(shù)值。
發(fā)送輸入
如果要向仿真器輸入動(dòng)作,你還需要確定游戲支持的輸入端口和字段。例如,在街頭霸王游戲中需要執(zhí)行以下代碼進(jìn)行投幣:
可以使用 list actions命令查看所支持的輸入端口,代碼如下:
以下返回的列表就包含了街頭霸王游戲環(huán)境中可用于向 step 函數(shù)發(fā)送動(dòng)作的所有端口和字段:
模擬器還有一個(gè) frame_ratio參數(shù),可以用來(lái)調(diào)整你的算法幀率。在默認(rèn)設(shè)置下,NAME每秒能生成 60幀。當(dāng)然,如果你覺(jué)得這樣太多了,你也能通過(guò)以下代碼將其改為每秒 20幀:
▌性能基準(zhǔn)測(cè)試
目前該工具包的開(kāi)發(fā)和測(cè)試已經(jīng)在8核AMD FX-8300 3.3GHz CPU以及3GB GeForce GTX 1060 GPU上完成。在使用單個(gè)隨機(jī)智能體的情況下,街頭霸王游戲環(huán)境可以以正常游戲速度的600%+運(yùn)行。而如果用8個(gè)隨機(jī)智能體進(jìn)行hogwild訓(xùn)練的話,街頭霸王游戲環(huán)境能以正常游戲速度的300%+運(yùn)行。
▌簡(jiǎn)單的 ConvNet 智能體
為了確保該工具包能夠訓(xùn)練算法,我們還設(shè)置了一個(gè)包含 5 層 ConvNet 的架構(gòu),只需進(jìn)行微調(diào),你就能用它來(lái)進(jìn)行測(cè)試。在街頭霸王的實(shí)驗(yàn)中,這個(gè)算法能夠成功學(xué)習(xí)到游戲中的一些簡(jiǎn)單技巧如:連招 (combo) 和 格擋 (blocking)。街頭霸王的游戲機(jī)制是由易到難設(shè)置了 10 個(gè)關(guān)卡,玩家在每個(gè)關(guān)卡都要與不同的對(duì)手對(duì)戰(zhàn)。剛開(kāi)始時(shí),智能體平均只能打到第二關(guān),而當(dāng)經(jīng)過(guò)了 2200 次訓(xùn)練后,它平均能打到第 5 關(guān)。學(xué)習(xí)率的設(shè)置是通過(guò)每一局中智能體所造成的凈傷害和所承受的傷害來(lái)計(jì)算的。
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7632瀏覽量
166357 -
python
+關(guān)注
關(guān)注
56文章
4823瀏覽量
86138 -
強(qiáng)化學(xué)習(xí)
+關(guān)注
關(guān)注
4文章
269瀏覽量
11514
原文標(biāo)題:用這個(gè)Python庫(kù),訓(xùn)練你的模型成為下一個(gè)街頭霸王!
文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Facebook推出ReAgent AI強(qiáng)化學(xué)習(xí)工具包
樹莓派街機(jī)
深度強(qiáng)化學(xué)習(xí)實(shí)戰(zhàn)
什么是強(qiáng)化學(xué)習(xí)?純強(qiáng)化學(xué)習(xí)有意義嗎?強(qiáng)化學(xué)習(xí)有什么的致命缺陷?

基于強(qiáng)化學(xué)習(xí)的MADDPG算法原理及實(shí)現(xiàn)
如何構(gòu)建強(qiáng)化學(xué)習(xí)模型來(lái)訓(xùn)練無(wú)人車算法
NVIDIA遷移學(xué)習(xí)工具包 :用于特定領(lǐng)域深度學(xué)習(xí)模型快速訓(xùn)練的高級(jí)SDK
谷歌AI發(fā)布足球游戲強(qiáng)化學(xué)習(xí)訓(xùn)練環(huán)境“足球引擎”
基于PPO強(qiáng)化學(xué)習(xí)算法的AI應(yīng)用案例
機(jī)器學(xué)習(xí)中的無(wú)模型強(qiáng)化學(xué)習(xí)算法及研究綜述

基于強(qiáng)化學(xué)習(xí)的虛擬場(chǎng)景角色乒乓球訓(xùn)練
7個(gè)流行的強(qiáng)化學(xué)習(xí)算法及代碼實(shí)現(xiàn)
7個(gè)流行的強(qiáng)化學(xué)習(xí)算法及代碼實(shí)現(xiàn)

模擬矩陣在深度強(qiáng)化學(xué)習(xí)智能控制系統(tǒng)中的應(yīng)用

評(píng)論