教AI逐幀搓招玩《鐵拳》通關(guān)最高難度,現(xiàn)在的街機(jī)游戲愛(ài)好者有點(diǎn)東西啊
精通拳皇98、街頭爭(zhēng)霸、死或生
博雯 發(fā)自 凹非寺
量子位 | 公眾號(hào) QbitAI
現(xiàn)在的AI都開(kāi)始學(xué)著逐幀搓招打街機(jī)了?
《拳皇98》、《街頭霸王》、《死或生》……一干童年回憶全都玩了個(gè)遍,其中還有號(hào)稱要打5000場(chǎng)才能入門(mén)的3D格斗游戲《鐵拳》:
沒(méi)錯(cuò),就是那個(gè)對(duì)新手極不友好的《鐵拳》,隨便拉一張角色的搓招表感受一下這個(gè)復(fù)雜度:
(沒(méi)錯(cuò),各種壓幀判定的JF技就是其特色之一)
△鐵拳 TT2出招表
但AI偏偏就能在入坑沒(méi)多久就通關(guān)了最高難度:
△左側(cè)為AI
這款A(yù)I的背后是一位個(gè)人開(kāi)發(fā)者,也是一位骨灰級(jí)的街機(jī)游戲愛(ài)好者。
他訓(xùn)練出來(lái)的新手“鐵匠”在Reddit的“比賽錄播”已經(jīng)有近500的熱度:
強(qiáng)化學(xué)習(xí)訓(xùn)練框架
這位AI鐵匠的背后,是一個(gè)叫做DIAMBRA Arena的強(qiáng)化學(xué)習(xí)交互框架。
DIAMBRA Arena提供了多個(gè)強(qiáng)化學(xué)習(xí)研究和實(shí)驗(yàn)環(huán)境,具有情節(jié)性的強(qiáng)化學(xué)習(xí)任務(wù),由離散的動(dòng)作(如游戲手柄按鈕)和屏幕中的像素和數(shù)據(jù)(如人物血條)組成。
在這一框架中,智能體會(huì)向環(huán)境發(fā)送一個(gè)動(dòng)作,環(huán)境對(duì)其進(jìn)行處理,并相應(yīng)地將一個(gè)起始狀態(tài)轉(zhuǎn)換為新?tīng)顟B(tài),再將觀察和獎(jiǎng)勵(lì)返回給智能體,以此交互循環(huán):
要實(shí)現(xiàn)上述循環(huán)的代碼也非常簡(jiǎn)單:
import diambraArena
# Mandatory settings
settings = {}
settings[“gameId”] = “doapp” # Game selection
settings[“romsPath”] = “/path/to/roms/” # Path to roms folder
env = diambraArena.make(“TestEnv”, settings)
observation = env.reset()
while True:
actions = env.action_space.sample()
observation, reward, done, info = env.step(actions)
if done:
observation = env.reset()
break
env.close()
這一框架目前支持Linux、Windows、MacOS等主流的操作系統(tǒng)。
而這款A(yù)I的“實(shí)戰(zhàn)場(chǎng)”為早期的Tekken Tag Tournament,當(dāng)然,搓招復(fù)雜度完全不遜色于之后的新版本……
開(kāi)發(fā)者選擇了風(fēng)間仁(Jin)和吉光(Yoshimitsu)兩名具有代表性的角色作為主要操作對(duì)象。
輸入分別為:從RGB轉(zhuǎn)換為灰度,并縮小到128 x 128px的游戲屏幕像素值、對(duì)戰(zhàn)局?jǐn)?shù)(Stage)、人物血條、游戲界面的一側(cè)。
訓(xùn)練中的獎(jiǎng)勵(lì)是一個(gè)基于生命值的函數(shù),如果對(duì)方生命值損傷則得到正面獎(jiǎng)勵(lì),己方控制的角色生命值損失則得到負(fù)面懲罰。
同時(shí),AI的動(dòng)作速率也被限定為最大速率的1/10,即游戲中每6步發(fā)送一個(gè)動(dòng)作。
由于框架使用的是一種離散的動(dòng)作空間,因此,智能體在訓(xùn)練中的同一時(shí)間只能選擇一個(gè)移動(dòng)動(dòng)作9向上,向下等)或攻擊動(dòng)作(沖擊,踢,出拳)。
因此,雖然一個(gè)連擊組合的實(shí)戰(zhàn)能力更強(qiáng),但由于AI無(wú)法同時(shí)點(diǎn)擊兩個(gè)動(dòng)作,在真實(shí)的對(duì)戰(zhàn)中,便會(huì)出現(xiàn)AI頻繁使用踢(Kick)和更換角色(swap)兩個(gè)動(dòng)作的情況:
評(píng)論區(qū)有資深PVP愛(ài)好者表示,想要看到這種頂級(jí)AI選手互虐的激烈場(chǎng)景,而開(kāi)發(fā)者本人對(duì)此非常贊同:
我們正在創(chuàng)建一個(gè)平臺(tái),在這個(gè)平臺(tái)上,程序員將提交他們訓(xùn)練有素的AI并互相對(duì)抗,并在我們的頻道上播放比賽。
AI錦標(biāo)賽
現(xiàn)在,開(kāi)發(fā)者團(tuán)隊(duì)已經(jīng)開(kāi)始正式籌備這個(gè)“AI游戲錦標(biāo)賽”,背后的程序員和開(kāi)發(fā)者們相當(dāng)于是“教練”或者“選手家長(zhǎng)”,最終的獲勝者可獲得1400瑞士法郎(折合人民幣9261元)。
“比賽項(xiàng)目”也不止是鐵拳一種,開(kāi)發(fā)者表示,這些格斗游戲的底層機(jī)制都比較類似,只需要修改一下組合技、人物血條數(shù)值等游戲的差異性屬性。
所以,他們的DIAMBRA Arena框架面向各類街機(jī)視頻游戲提供完全符合OpenAI Gym標(biāo)準(zhǔn)的Python API。
像死或生、街頭霸王等多個(gè)流行的街機(jī)游戲都被囊括其中:
GitHub鏈接:
https://github.com/diambra/diambraArena
視頻鏈接:
https://www.youtube.com/watch?v=9HAKEjhIfJY
參考鏈接:
[1]https://www.reddit.com/r/reinforcementlearning/comments/sq1s3f/deep_reinforcement_learning_algorithm_completing/
[2]https://www.reddit.com/r/MachineLearning/comments/sqra1n/p_deep_reinforcement_learning_algorithm/