python玩轉(zhuǎn)街機游戲,操作親民包个!

這是一個允許你在幾乎任何街機游戲中訓(xùn)練你的強化學(xué)習(xí)算法的Python庫刷允,它目前在Linux系統(tǒng)上可用。通過這個工具包碧囊,你可以定制算法逐步完成游戲過程树灶,同時接收每一幀的數(shù)據(jù)和內(nèi)部存儲器地址值以跟蹤游戲狀態(tài),以及發(fā)送與游戲交互的動作糯而。

安裝

GitHub地址:github.com/M-J-Murray/MAMEToolkit/blob/master/README.md

你可以用pip安裝這個庫天通,只需運行以下命令:

pip install MAMEToolkit

演示:街霸

街霸是史上最經(jīng)典的游戲之一。現(xiàn)在工具包內(nèi)包含的街霸版本是街頭霸王3:三度沖擊(Japan 990608, NO CD)熄驼,我們以此為例像寒,用以下代碼寫一個隨機智能體:

支持hogwild!

hogwild!? Niu等人引入了一個叫做 Hogwild! 的更新策略瓜贾,可以使 SGD 可以在多 CPU 上并行更新诺祸。處理器在無需對參數(shù)加鎖的情況下就可以訪問共享內(nèi)存。但僅在輸入的是稀疏數(shù)據(jù)時才有效祭芦,因為每次更新僅修改所有參數(shù)的一小部分筷笨。他們展示了在這種情況下,更新策略幾乎可以達到一個最優(yōu)的收斂率龟劲,因為處理器不太可能覆蓋掉有用的信息胃夏。


建立自己的游戲環(huán)境

這個工具包之所以易于上手,是因為它和模擬器本身不需要太多交互昌跌,只需注意兩點——一是查找你關(guān)注的內(nèi)部狀態(tài)相關(guān)聯(lián)的內(nèi)存地址值仰禀,二是用選取的環(huán)境跟蹤狀態(tài)。你可以用MAME Cheat Debugger蚕愤,它會反饋游戲的內(nèi)存地址值如何隨時間變化答恶。如果要創(chuàng)建游戲模擬囊榜,你得先獲得正在模擬的游戲的ROM,并知道MAME使用的游戲ID亥宿,比如街霸的ID是'sfiii3n'卸勺。

游戲ID

你可以通過運行以下代碼找到游戲的ID

這個命令會打開MAME仿真器。你可以搜索游戲列表以找到想要的游戲烫扼,游戲的ID位于游戲標(biāo)題末尾的括號中曙求。

內(nèi)存地址

如果獲得了ID,也有了想要跟蹤的內(nèi)存地址映企,你可以開始模擬:

這會啟動仿真器悟狱,并在工具包連接到模擬器進程時暫停。

分步運行仿真器

連接工具箱后堰氓,你可以分步運行仿真器:

step函數(shù)會把幀數(shù)據(jù)作為NumPy矩陣返回挤渐,同時,它也會返回該時間步長的所有內(nèi)存地址整數(shù)值双絮。

如果要向仿真器輸入動作浴麻,你還需要確定游戲支持的輸入端口和字段。比如玩街霸需要先投幣囤攀,這個代碼是:

要確定哪些端口可用软免,請使用list actions命令:

下面這個返回的列表就包含街霸環(huán)境中可用于向步驟函數(shù)發(fā)送動作的所有端口和字段:

[

{'port':':scsi:1:cdrom:SCSI_ID','field':'SCSI ID'},{'port':':INPUTS','field':'P2 Jab Punch'},{'port':':INPUTS','field':'P1 Left'},{'port':':INPUTS','field':'P2 Fierce Punch'},{'port':':INPUTS','field':'P1 Down'},{'port':':INPUTS','field':'P2 Down'},{'port':':INPUTS','field':'P2 Roundhouse Kick'},{'port':':INPUTS','field':'P2 Strong Punch'},{'port':':INPUTS','field':'P1 Strong Punch'},{'port':':INPUTS','field':'2 Players Start'},{'port':':INPUTS','field':'Coin 1'},{'port':':INPUTS','field':'1 Player Start'},{'port':':INPUTS','field':'P2 Right'},{'port':':INPUTS','field':'Service 1'},{'port':':INPUTS','field':'Coin 2'},{'port':':INPUTS','field':'P1 Jab Punch'},{'port':':INPUTS','field':'P2 Up'},{'port':':INPUTS','field':'P1 Up'},{'port':':INPUTS','field':'P1 Right'},{'port':':INPUTS','field':'Service Mode'},{'port':':INPUTS','field':'P1 Fierce Punch'},{'port':':INPUTS','field':'P2 Left'},{'port':':EXTRA','field':'P2 Short Kick'},{'port':':EXTRA','field':'P2 Forward Kick'},{'port':':EXTRA','field':'P1 Forward Kick'},{'port':':EXTRA','field':'P1 Roundhouse Kick'},{'port':':EXTRA','field':'P1 Short Kick'}

]

仿真器類還有一個frame_ratio參數(shù),可用于調(diào)整算法所見的幀速率焚挠。默認情況下膏萧,MAME以每秒60幀的速度生成幀,如果你覺得這太多了蝌衔,想把它改成每秒20幀榛泛,可以輸入以下代碼:

MAME性能基準(zhǔn)測試

目前這個工具包的開發(fā)和測試已在8核AMD FX-8300 3.3GHz CPU以及3GB GeForce GTX 1060 GPU上完成树姨。在使用單個隨機智能體的情況下绣的,街頭霸王環(huán)境可以以正常游戲速度的600%+運行猾普。而如果是用8個隨機智能體進行hogwild!訓(xùn)練次舌,環(huán)境可以以正常游戲速度的300%+運行。

ConvNet智能體

為了確保工具包能夠訓(xùn)練算法约素,作者還設(shè)置了一個簡單的5層ConvNet书释,只需少量調(diào)整,你就可以用它進行測試硅急。在街霸實驗中,這個算法能夠成功學(xué)習(xí)到游戲的一些簡單技巧佳遂,比如連擊(combo)和格擋(blocking)营袜。街霸本身的游戲機制是分成10個關(guān)卡(難度遞增),玩家在每個關(guān)卡都要迎戰(zhàn)不同的對手丑罪。剛開始的時候荚板,這個智能體平均只能打到第2關(guān)凤壁。但在經(jīng)過2200次訓(xùn)練后,它平均能打到第5關(guān)跪另。


至于智能體的學(xué)習(xí)率拧抖,它是用每一局智能體所造成的凈傷害和所承受的傷害來計算的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末免绿,一起剝皮案震驚了整個濱河市唧席,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嘲驾,老刑警劉巖淌哟,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辽故,居然都是意外死亡徒仓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門誊垢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掉弛,“玉大人,你說我怎么就攤上這事喂走≌恚” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵缴啡,是天一觀的道長壁晒。 經(jīng)常有香客問我,道長业栅,這世上最難降的妖魔是什么秒咐? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮碘裕,結(jié)果婚禮上携取,老公的妹妹穿的比我還像新娘。我一直安慰自己帮孔,他們只是感情好雷滋,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著文兢,像睡著了一般晤斩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姆坚,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天澳泵,我揣著相機與錄音,去河邊找鬼兼呵。 笑死兔辅,一個胖子當(dāng)著我的面吹牛腊敲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播维苔,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼碰辅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了介时?” 一聲冷哼從身側(cè)響起乎赴,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎潮尝,沒想到半個月后榕吼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡勉失,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年羹蚣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乱凿。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡顽素,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出徒蟆,到底是詐尸還是另有隱情胁出,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布段审,位于F島的核電站全蝶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏寺枉。R本人自食惡果不足惜抑淫,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姥闪。 院中可真熱鬧始苇,春花似錦、人聲如沸筐喳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽避归。三九已至荣月,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間槐脏,已是汗流浹背喉童。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留顿天,地道東北人堂氯。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像牌废,于是被迫代替她去往敵國和親咽白。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • MYSQL 基礎(chǔ)知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 7,817評論 5 116
  • 小時候,看到路邊拉著手的老人懂从,我們會掩著嘴授段,偷著笑。 長大后番甩,看著路邊挽著手侵贵,有說有笑老人時,我們不再偷笑缘薛,然后站...
    4e57b8f24a48閱讀 269評論 0 0
  • 如果說2016是中國網(wǎng)絡(luò)“短視頻年”宴胧,那么2017則是網(wǎng)絡(luò)”惡搞年”漱抓。過去的前半年里,以小羅團隊為首的網(wǎng)紅...
    我是任一閱讀 2,108評論 2 0
  • 櫻木花道恕齐,日本動漫《灌籃高手》的中心人物乞娄,在劇中,他是湘北高中籃球隊五大主力之一显歧。我們上高中的時候补胚,該片很火...
    平凡的愛好閱讀 679評論 32 10
  • 跳(tiào)繩(shéng) 學(xué)校要求每位一年級(jí)的新(xīn)同學(xué)跳(tiào)繩(shén...
    劉昱辰的成長日記閱讀 115評論 0 0