這款超火的游戲,AI只用4小時(shí),就秀出了人類花1年才能達(dá)到的水平
Reddit熱度2.7k
蕭簫 發(fā)自 凹非寺
量子位 報(bào)道 | 公眾號(hào) QbitAI
操控一輛賽車,在空中帶球射門,需要練習(xí)多長(zhǎng)時(shí)間?
通常來(lái)說(shuō),一名普通玩家要達(dá)成這樣的水平,至少要練習(xí)上一年時(shí)間。
這是一款國(guó)外很火的游戲《火箭聯(lián)盟》?(Rocket League),玩家會(huì)操作一輛賽車,利用各種辦法將球“踢”進(jìn)門。
然而,現(xiàn)在已經(jīng)有人開發(fā)出了一個(gè)基于深度強(qiáng)化學(xué)習(xí)的賽車游戲環(huán)境RoboLeague。通過(guò)環(huán)境訓(xùn)練的賽車,不僅能看準(zhǔn)時(shí)機(jī)射門:
還在4小時(shí)的訓(xùn)練后,就能長(zhǎng)時(shí)間顛球,保證車和球都不落地:
這個(gè)RoboLeague,一下子在Reddit炸出了2.7k的熱度。
有網(wǎng)友調(diào)侃,看到這些比自己玩得好的“AI選手”,總會(huì)讓他感覺很挫敗。
那么,這個(gè)賽車游戲環(huán)境,究竟優(yōu)秀在哪里?
比已有的游戲環(huán)境更好用
事實(shí)上,這并不是第一個(gè)基于《火箭聯(lián)盟》做出的游戲環(huán)境。
有網(wǎng)友很快指出,此前已有支持用自定義賽車玩《火箭聯(lián)盟》的RLBot,效果挺不錯(cuò)。
在RLBot中,同樣允許玩家用自己編寫的代碼來(lái)控制賽車。
而且,玩家能通過(guò)游戲場(chǎng)景的反饋,對(duì)代碼進(jìn)行反復(fù)調(diào)試,最終做出想要的機(jī)器人賽車。
事實(shí)上,作者在訓(xùn)練強(qiáng)化學(xué)習(xí)模型前,并非沒有考慮過(guò)RLBot。
畢竟,這個(gè)框架支持各種語(yǔ)言,讓玩家能編寫出想要的機(jī)器人賽車。
然而,在嘗試過(guò)RLBot后,作者還是決定基于Unity引擎,自己開發(fā)一個(gè)游戲環(huán)境。
主要有3點(diǎn)原因:
- 基于Unity引擎打造的環(huán)境,能夠自己創(chuàng)建想要的游戲場(chǎng)景。
- 此外,在RLBot中,基于實(shí)時(shí)數(shù)據(jù)訓(xùn)練AI模型的速度,其實(shí)并不快。而如果游戲再大點(diǎn),在RLBot中訓(xùn)練可能就會(huì)出現(xiàn)問(wèn)題了。
- 自己創(chuàng)建的游戲環(huán)境,可以并行訓(xùn)練游戲中的多個(gè)實(shí)例。相比之下,RLBot基于《火箭聯(lián)盟》搭建,只能同時(shí)玩1場(chǎng)游戲,無(wú)法并行訓(xùn)練。
那么,在RoboLeague環(huán)境中,如何訓(xùn)練出這樣一個(gè)“聰明的”智能體?
基于強(qiáng)化學(xué)習(xí),訓(xùn)練出智能體
在訓(xùn)練之前,先來(lái)了解一下,《火箭聯(lián)盟》中大致有些什么規(guī)則,玩家又是怎么射門的。
整體來(lái)說(shuō),這是一個(gè)玩家通過(guò)控制賽車,來(lái)進(jìn)球射門的游戲。
其中,這里面的賽車和球,符合一些物理規(guī)則:
球具有彈性,可以從地面/墻壁反彈、受摩擦力和重力影響
賽車在地面可以加速制動(dòng),在空中的控制也符合物理?xiàng)l件
賽車的輪子具有某種黏力,可以在墻壁上運(yùn)動(dòng)不脫落下來(lái)
而《火箭聯(lián)盟》中的一些高級(jí)玩家,通常會(huì)想辦法讓自己和球不落地,完成空中帶球射門。
但要達(dá)到這樣的水平,不僅要對(duì)場(chǎng)地有足夠的了解,操作水平也必須在線。
這其中,作者利用了強(qiáng)化學(xué)習(xí)中的“獎(jiǎng)勵(lì)機(jī)制”,來(lái)告訴智能體應(yīng)該怎么做。
智能體并不需要基于先驗(yàn)知識(shí)完成操作,而會(huì)通過(guò)嘗試各種隨機(jī)行為,試圖達(dá)成“獎(jiǎng)勵(lì)機(jī)制”的要求。
而作者給出的唯一一個(gè)獎(jiǎng)勵(lì)機(jī)制,就是保證賽車和球不落地,即“活著”。
因?yàn)橹灰宦涞?,空中帶球的條件就完成了大半。
在反復(fù)嘗試后,智能體發(fā)現(xiàn),只要讓賽車盡可能垂直豎在空中,同時(shí)保持顛球的穩(wěn)定,就能保證“活著”。
也正是在這樣的獎(jiǎng)勵(lì)機(jī)制下,只用4個(gè)小時(shí)(約50M次運(yùn)行),賽車就完成了自己的目標(biāo)。
如果想要讓智能體完成更復(fù)雜的任務(wù),如空中帶球射門等,也只需要找到對(duì)應(yīng)的獎(jiǎng)勵(lì)機(jī)制,利用強(qiáng)化學(xué)習(xí)訓(xùn)練就能達(dá)成。
目前,作者已經(jīng)將RoboLeague開源。
也就是說(shuō),如果你想要訓(xùn)練出符合自己要求的深度強(qiáng)化學(xué)習(xí)模型,那么用這個(gè)游戲環(huán)境,就能進(jìn)行訓(xùn)練。
關(guān)于作者
作者@Roboserg,并未透露自己的真實(shí)姓名,不過(guò)此前,他已經(jīng)做出了很多利用強(qiáng)化學(xué)習(xí)訓(xùn)練出來(lái)的小型游戲?qū)嶒?yàn)。
例如,在各種球的撞擊下保持平衡的飛機(jī):
又或者,兩個(gè)球之間的“足球”比賽:
據(jù)作者透露,他接下來(lái)還會(huì)計(jì)劃開發(fā)一款穿越飛環(huán)的游戲。
這款游戲會(huì)訓(xùn)練智能體穿過(guò)飛環(huán),真正做到和大神玩家的操作無(wú)異。
說(shuō)不定,作者甚至真能用強(qiáng)化學(xué)習(xí),訓(xùn)練出一整個(gè)網(wǎng)站的小游戲來(lái)?
源代碼:
https://github.com/roboserg/RoboLeague
參考鏈接:
https://www.reddit.com/r/MachineLearning/comments/klbvaw/p_doing_a_clone_of_rocket_league_for_ai/
https://rlbot.org/
https://unity.com/cn/products/machine-learning-agents