天天看點

教AI逐幀搓招玩《鐵拳》通關最高難度,現在的街機遊戲愛好者有點東西啊

博雯 發自 凹非寺

量子位 | 公衆号 QbitAI

現在的AI都開始學着逐幀搓招打街機了?

《拳皇98》、《街頭霸王》、《死或生》……一幹童年回憶全都玩了個遍,其中還有号稱要打5000場才能入門的3D格鬥遊戲《鐵拳》:

教AI逐幀搓招玩《鐵拳》通關最高難度,現在的街機遊戲愛好者有點東西啊

沒錯,就是那個對新手極不友好的《鐵拳》,随便拉一張角色的搓招表感受一下這個複雜度:

(沒錯,各種壓幀判定的JF技就是其特色之一)

教AI逐幀搓招玩《鐵拳》通關最高難度,現在的街機遊戲愛好者有點東西啊

△鐵拳 TT2出招表

但AI偏偏就能在入坑沒多久就通關了最高難度。

這款AI的背後是一位個人開發者,也是一位骨灰級的街機遊戲愛好者。

他訓練出來的新手“鐵匠”在Reddit的“比賽錄播”已經有近500的熱度:

教AI逐幀搓招玩《鐵拳》通關最高難度,現在的街機遊戲愛好者有點東西啊

強化學習訓練架構

這位AI鐵匠的背後,是一個叫做DIAMBRA Arena的強化學習互動架構。

DIAMBRA Arena提供了多個強化學習研究和實驗環境,具有情節性的強化學習任務,由離散的動作(如遊戲搖桿按鈕)和螢幕中的像素和資料(如人物血條)組成。

在這一架構中,智能體會向環境發送一個動作,環境對其進行處理,并相應地将一個起始狀态轉換為新狀态,再将觀察和獎勵傳回給智能體,以此互動循環:

教AI逐幀搓招玩《鐵拳》通關最高難度,現在的街機遊戲愛好者有點東西啊

要實作上述循環的代碼也非常簡單:

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:

break

env.close()

這一架構目前支援Linux、Windows、MacOS等主流的作業系統。

而這款AI的“實戰場”為早期的Tekken Tag Tournament,當然,搓招複雜度完全不遜色于之後的新版本……

教AI逐幀搓招玩《鐵拳》通關最高難度,現在的街機遊戲愛好者有點東西啊

開發者選擇了風間仁(Jin)和吉光(Yoshimitsu)兩名具有代表性的角色作為主要操作對象。

輸入分别為:從RGB轉換為灰階,并縮小到128 x 128px的遊戲螢幕像素值、對戰局數(Stage)、人物血條、遊戲界面的一側。

訓練中的獎勵是一個基于生命值的函數,如果對方生命值損傷則得到正面獎勵,己方控制的角色生命值損失則得到負面懲罰。

同時,AI的動作速率也被限定為最大速率的1/10,即遊戲中每6步發送一個動作。

由于架構使用的是一種離散的動作空間,是以,智能體在訓練中的同一時間隻能選擇一個移動動作9向上,向下等)或攻擊動作(沖擊,踢,出拳)。

是以,雖然一個連擊組合的實戰能力更強,但由于AI無法同時點選兩個動作,在真實的對戰中,便會出現AI頻繁使用踢(Kick)和更換角色(swap)兩個動作的情況。

評論區有資深PVP愛好者表示,想要看到這種頂級AI選手互虐的激烈場景,而開發者本人對此非常贊同:

我們正在建立一個平台,在這個平台上,程式員将送出他們訓練有素的AI并互相對抗,并在我們的頻道上播放比賽。

教AI逐幀搓招玩《鐵拳》通關最高難度,現在的街機遊戲愛好者有點東西啊

AI錦标賽

現在,開發者團隊已經開始正式籌備這個“AI遊戲錦标賽”,背後的程式員和開發者們相當于是“教練”或者“選手家長”,最終的獲勝者可獲得1400瑞士法郎(折合人民币9261元)。

教AI逐幀搓招玩《鐵拳》通關最高難度,現在的街機遊戲愛好者有點東西啊

“比賽項目”也不止是鐵拳一種,開發者表示,這些格鬥遊戲的底層機制都比較類似,隻需要修改一下組合技、人物血條數值等遊戲的差異性屬性。

是以,他們的DIAMBRA Arena架構面向各類街機視訊遊戲提供完全符合OpenAI Gym标準的Python API。

像死或生、街頭霸王等多個流行的街機遊戲都被囊括其中:

教AI逐幀搓招玩《鐵拳》通關最高難度,現在的街機遊戲愛好者有點東西啊

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/

繼續閱讀