爺青回!GAN生成的超級馬里奧關(guān)卡,可以永不通關(guān)的那種
想永不通關(guān)?用cGAN
子豪 發(fā)自 凹非寺
量子位 報道 | 公眾號 QbitAI
先來一波回憶殺~
《超級馬里奧兄弟》的重度玩家們,可能已經(jīng)發(fā)現(xiàn)了,這并不是原本32關(guān)里面的。
不過,如果你以為這是《馬里奧制造》的杰作,那你就猜錯了~這是AI利用GAN搞出來的!
利用GAN生成紅白機游戲畫面,并不是新鮮事,不過,這一次是可以無限延長的那種~
花樣還不少:
只需用4個顏色通道表示對象
在游戲中,關(guān)卡數(shù)據(jù)以壓縮格式存儲,通常,每個對象用兩個字節(jié)來描述位置和類型。
一個字節(jié)指定16×16網(wǎng)格中的xy坐標(biāo);第二個字節(jié)指定對象的類型。比如在第一關(guān)的場景中,僅用了12個字節(jié)來描述:
07 81 | 47 24 | 57 00 | 63 01 | 77 01 | C9 71
作者為了將關(guān)卡編碼為16×16的圖像,分別設(shè)置了4個獨立顏色通道:
比如,第一關(guān)的截圖,就可以表示成這樣:
這樣的編碼方式,既能夠涵蓋足夠多的對象,又不至于太過復(fù)雜。
并且,根據(jù)關(guān)卡中對象的排列方式進(jìn)行分組,有利于模型進(jìn)行學(xué)習(xí)并重現(xiàn)。比如,實心磚用于布置樓梯、磚塊則通常水平放置。
此外,將所有對象組織成一個合理的方案,減少生成網(wǎng)絡(luò)失誤對輸出結(jié)果的負(fù)面影響。
比如用硬幣代替磚塊,影響非常小;而如果用管道或庫巴來代替,就會出現(xiàn)問題。
開發(fā)者還找出了游戲的一些特點:
管道可以連接地面或一排浮動塊;
方塊通常用來構(gòu)建各種尺寸的樓梯;
磚塊和問題塊,大多排在第3位和第7位;
其他角色一般會分成兩三組。
接下來,作者使用TensorFlow作為后端,利用Keras來構(gòu)建模型,并進(jìn)行訓(xùn)練。
生成器通過輸入的一組特征向量,來生成新的樣本圖像;鑒別器則區(qū)分是訓(xùn)練集中的真實圖像,還是生成器偽造的。
隨著遍歷訓(xùn)練集的次數(shù)增加,生成效果也逐漸改善:
最終輸出的結(jié)果,是這樣的:
嗯,效果真的很不錯~
想永不通關(guān)?用cGAN
現(xiàn)在,只需把一張張“截圖”連接起來,你就會得到:
半個庫巴、半個管道,以及半個馬里奧……
怎么才能無縫拼接,得到連貫的關(guān)卡呢?
這就需要利用「有條件的GAN」,把前一個場景作為后一個場景的邊界條件。
就像這樣:
可以看出,場景的左側(cè)部分,是以第一行圖像作為邊界條件生成的。
具體來說,首先要在之前的基礎(chǔ)上,向生成器輸入一組16×4的圖像,作為上一個場景的邊界部分。
網(wǎng)絡(luò)架構(gòu)是這樣的:
生成器在輸入條件的限制下,生成16×16的圖像,然后,把它們與16×4的輸入圖像進(jìn)行拼接,再用拼接后的圖像來訓(xùn)練鑒別器。
利用16×4圖像的不斷迭代,最終就能拼接成連續(xù)的場景,比如,經(jīng)過40次迭代的結(jié)果:
“不想通關(guān)綜合癥”可能有救了!
開發(fā)者表示,雖然效果不是特別完美,但是已經(jīng)具備了趣味性和可玩性~
是不是和那個“能玩一輩子的游戲”——《馬里奧制造》有點像?它同樣主打關(guān)卡制造,不過是玩家來手動設(shè)計。
△馬里奧制造2 (圖源:游戲官網(wǎng))
在發(fā)布關(guān)卡之前,作者必須通關(guān)一次,于是有些人就加入隱蔽的“作者通道”,偷個懶直達(dá)終點。
不少高手都曾被“馬造毒圖”難倒,當(dāng)然如果玩家發(fā)現(xiàn)隱蔽通道,就能“偷雞”通關(guān)~
這樣“有趣又有毒”的關(guān)卡,不知道AI能否構(gòu)建出來呢?
原文鏈接:
https://medium.com/@eway/using-a-generative-adversarial-network-to-author-playable-super-mario-bros-levels-223736bd4ce
- 具身智能洶涌,激光雷達(dá)爆單:頭部玩家600%年增長,出貨超20萬臺2025-08-08
- 智能座艙率先L3!AI Agent上車顛覆體驗,千里科技WAIC交卷2025-07-28
- 千里科技聯(lián)手階躍星辰、吉利發(fā)布下一代智能座艙Agent OS2025-07-26
- 老黃剛走,全球最強算力Robotaxi方案落地中國2025-07-24