現(xiàn)在的 AI 都開始學著逐幀搓招打街機了?《拳皇 98》《街頭霸王》《死或生》…… 一干童年回憶全都玩了個遍,其中還有號稱要打 5000 場才能入門的 3D 格斗游戲《鐵拳》:
沒錯,就是那個對新手極不友好的《鐵拳》,隨便拉一張角色的搓招表感受一下這個復雜度:(沒錯,各種壓幀判定的 JF 技就是其特色之一)
▲ 鐵拳 TT2 出招表
但 AI 偏偏就能在入坑沒多久就通關(guān)了最高難度:
▲ 左側(cè)為 AI
這款 AI 的背后是一位個人開發(fā)者,也是一位骨灰級的街機游戲愛好者。他訓練出來的新手“鐵匠”在 Reddit 的“比賽錄播”已經(jīng)有近 500 的熱度:
強化學習訓練框架
這位 AI 鐵匠的背后,是一個叫做 DIAMBRA Arena 的強化學習交互框架。DIAMBRA Arena 提供了多個強化學習研究和實驗環(huán)境,具有情節(jié)性的強化學習任務,由離散的動作(如游戲手柄按鈕)和屏幕中的像素和數(shù)據(jù)(如人物血條)組成。
在這一框架中,智能體會向環(huán)境發(fā)送一個動作,環(huán)境對其進行處理,并相應地將一個起始狀態(tài)轉(zhuǎn)換為新狀態(tài),再將觀察和獎勵返回給智能體,以此交互循環(huán):
要實現(xiàn)上述循環(huán)的代碼也非常簡單:
import diambraArena # Mandatory settings settings = {} settings["gameId"] = "do" # 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)。而這款 AI 的“實戰(zhàn)場”為早期的 Tekken Tag Tournament,當然,搓招復雜度完全不遜色于之后的新版本……
開發(fā)者選擇了風間仁(Jin)和吉光(Yoshimitsu)兩名具有代表性的角色作為主要操作對象。輸入分別為:從 RGB 轉(zhuǎn)換為灰度,并縮小到 128 x 128px 的游戲屏幕像素值、對戰(zhàn)局數(shù)(Stage)、人物血條、游戲界面的一側(cè)。
訓練中的獎勵是一個基于生命值的函數(shù),如果對方生命值損傷則得到正面獎勵,己方控制的角色生命值損失則得到負面懲罰。
同時,AI 的動作速率也被限定為最大速率的 1/10,即游戲中每 6 步發(fā)送一個動作。由于框架使用的是一種離散的動作空間,因此,智能體在訓練中的同一時間只能選擇一個移動動作 9 向上,向下等)或攻擊動作(沖擊,踢,出拳)。
因此,雖然一個連擊組合的實戰(zhàn)能力更強,但由于 AI 無法同時點擊兩個動作,在真實的對戰(zhàn)中,便會出現(xiàn) AI 頻繁使用踢(Kick)和更換角色(swap)兩個動作的情況:
評論區(qū)有資深 PVP 愛好者表示,想要看到這種頂級 AI 選手互虐的激烈場景,而開發(fā)者本人對此非常贊同:
我們正在創(chuàng)建一個平臺,在這個平臺上,程序員將提交他們訓練有素的 AI 并互相對抗,并在我們的頻道上播放比賽。
AI 錦標賽
現(xiàn)在,開發(fā)者團隊已經(jīng)開始正式籌備這個“AI 游戲錦標賽”,背后的程序員和開發(fā)者們相當于是“教練”或者“選手家長”,最終的獲勝者可獲得 1400 瑞士法郎(折合人民幣 9261 元)。
“比賽項目”也不止是鐵拳一種,開發(fā)者表示,這些格斗游戲的底層機制都比較類似,只需要修改一下組合技、人物血條數(shù)值等游戲的差異性屬性。
所以,他們的 DIAMBRA Arena 框架面向各類街機視頻游戲提供完全符合 OpenAI Gym 標準的 Python API。像死或生、街頭霸王等多個流行的街機游戲都被囊括其中:
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/
廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。