別的AI還在打游戲,這個AI已經當上“超級馬里奧”游戲策劃了|GECCO最佳論文

AI打游戲已經不是什么新鮮事了,“沉迷”Dota 2、星際爭霸、LOL的AI一個接一個的出現。

但是你也許不知道,相比這些“游戲玩家”AI,還有一位優秀的AI,直接當起了“游戲策劃”,做的還是膾炙人口的“超級馬里奧”。


超級馬里奧:無限關卡

這位“策劃大大”誕生在由一個六位研究者組成的團隊中,成員來自多特蒙德大學、美國西南大學、倫敦大學瑪麗皇后學院、加利福尼亞大學及哥本哈根IT大學,它能用生成對抗網絡(GAN)自動“設計”海量的超級馬里奧關卡。

并且,這個超級馬里奧關卡策劃AI還能充分保證新關卡的可玩性,讓每個關卡在開始的時候都相對簡單,而后逐漸增加難度,保證玩家“沉迷游戲,無法自拔”。

馬里奧策劃AI成長史

馬里奧GAN的工作流程大概長這樣:



image


△ 馬里奧GAN原理圖
首先,GAN學習現有的超級馬里奧關卡(圖上黃色部分),get到關卡策劃這一技能后,生成網絡開始生成關卡,然后將“作業”案例提交給判別網絡,由判別網絡進行把關,判斷“作業”是否為一個合格的馬里奧關卡。

不合格的“作業”將被打回去重做,直到這一關合格為止。

神經網絡如何識別游戲

GAN學習的并不是每一關的畫面,而是用專有符號系統表示的“游戲地圖”。地圖以“方塊”為單位——有金幣的方塊、可以頂碎的磚塊、當地基的磚塊、管道的磚塊等,游戲地圖中的每個方塊都有獨特的表示方式,比如怪物方塊編號為5,用大寫的E來代指。

image


△ 游戲地圖方塊對照表


這樣,所有的游戲地圖都可以用一個符號的矩陣來表示,比如,下面這個游戲地圖中:


image

我們按照方塊把每個元素劃分開,并且加以不同的表達方式:

image

地板是0,怪物是0,右側的“山上”可以被頂壞的“天梯”則是1。另外,由于管道占了不只一個方塊,所以管道口的左右半截分別用單引號代指,用6、7表示,而管道身體的左右半截用方括號代指,用8、9表示。如果某個格子是空氣,什么都沒有,則用2表示。

所有的學習和生成系統,都是基于這樣的矩陣進行的。這套系統又被稱作視頻游戲關卡語料庫(Video Game Level Corpus,VGLC),每一個方塊都像圖像處理中的像素一樣,能夠被神經網絡解析或生成。

難度升級大法——LVE

正常的關卡游戲都有一個特點——每一關都比前面那一關難一點。

超級馬里奧也不例外。人類游戲策劃可以控制每一關的大致難度,但AI怎么控制呢?這要倚仗**潛變量進化(latent variable evolution,LVE)的方法。

LVE由紐約大學的Philip Bontrager等人在2017年提出,具體可以跳轉arXiv:1705.07386。

在LVE的幫助下,機器可以生成越來越難的關卡,比如,像下面這張圖一樣(關卡略長,請把手機橫過來看):

image




像這樣,從開頭的“一馬平川”到出現管道、山溝、山丘和怪物,直到怪物密布、溝壑縱橫,整個過程是越來越難的。

送進DCGAN訓練

訓練的過程使用的是深度卷積生成對抗網絡(Deep Convolutional GAN,DCGAN),使用WGAN算法進行訓練。


image

△ DCGAN生成網絡構架


image

△ DCGAN判別網絡構架


然而,生成結果并不100%完美

訓練后的GAN生成的結果究竟如何呢?

好壞參半。

有的部分歲月靜好,除了個別小困難之外,玩家可以輕松通過:

image


image



但是,也有下面這種奇葩地形,蜀道之難難于上青天啊!

image

甚至還會出現讓人退游的神秘管道:


image

請問管子君是異次元穿越來的嘛?

image




沒辦法,GAN一直都是這么皮。所以,研究者們還準備做進一步的優化,以期待在未來可以讓GAN生成永遠玩不完的超級馬里奧。

不完美,一樣拿獎

雖然馬里奧GAN的生成結果并不完美,但這并不妨礙它拿獎啊。

畢竟,在人類用計算機生成馬里奧游戲關卡的歷史上,這可是個巨大突破呢。

馬里奧AI錦標賽(http://www.marioai.org/)是一個在2009-2012年期間舉辦過幾屆的比賽,專門生成馬里奧關卡。在這項賽事中,雖然科學家們一直致力于創造出最好的自動生成馬里奧關卡的算法,但實際絕大多數時候,參賽者依然需要手動設置一些參數。

而GAN興起后,AI生成馬里奧關卡再也不需要進行任何手動了,程序員們可以和手動設置參數說bye-bye了。

因此,這篇論文也拿到了GECCO 2018的最佳論文。

傳送門全家桶

馬里奧GAN已經開源,量子位照例附上arXiv和github地址,歡迎自取~

論文:Evolving Mario Levels in the Latent Space of a Deep Convolutional Generative Adversarial Network
作者:Vanessa Volz, Jacob Schrum, Jialin Liu, Simon M. Lucas, Adam Smith, Sebastian Risi
GECCO 2018 Best Paper Award
arXiv:
https://arxiv.org/abs/1805.00728
data:
https://github.com/TheVGLC/TheVGLC
github:
https://github.com/TheHedgeify/DagstuhlGAN

原文發布時間為:2018-07-27
本文來自云棲社區合作伙伴“量子位”,了解相關信息可以關注“量子位”。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451065.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451065.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451065.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

單點登錄的三種實現方式

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 單點登錄SSO(Single Sign On)說得簡單點就是在一個多系統共存的環境下,用戶在一處登錄后,…

快速判斷數組中每個對象同一屬性值是否相同

做批量查詢的時候,要確定數組中的多個對象下的字符串是否能全部匹配,這時需要在匹配的名稱對象中通過字段記錄該名稱是否匹配。 const search [ { name: B, isExistence: false },{ name: C, isExistence: false } ]; 這時要確定 search 是否全部匹配上…

java對象占用內存大小?

一個不包含任何內部成員變量的空Object大約占33byte,若增加成員變量,則增加相應大小的內存占用。 測算方式:設置jvm的堆大小為1m,在堆中不停new不含任何成員變量的OOMObject對象,直到堆內存溢出。如下圖,在…

Java程序員面試中的多線程問題

很多核心Java面試題來源于多線程(Multi-Threading)和集合框架(Collections Framework),理解核心線程概念時,嫻熟的實際經驗是必需的。這篇文章收集了 Java 線程方面一些典型的問題,這些問題經常被高級工程師所問到。 0.Java 中多線程同步是什…

SpringBoot2使用WebFlux函數式編程

本文只是簡單使用SpringBoot2使用WebFlux的函數式編程簡單使用,后續會繼續寫關于Webflux相關的文章。 最近一直在研究WebFlux,后續會陸續出一些相關的文章。 首先看一下Srping官網上的一張圖,對比一下SpringMvc和Spring WebFlux,如…

單點登錄原理與簡單實現

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、單系統登錄機制 1、http無狀態協議 web應用采用browser/server架構,http作為通信協議。http是無狀態協議,瀏…

java接口類支持多繼承

一個類只能extends一個父類,只能有一個父類,但可以implements多個接口。java通過使用接口的概念來取代C中多繼承。與此同時,一個接口則可以同時extends多個接口,卻不能implements任何接口。Java中的接口是支持多繼承的。

xmind-HTTP協議

轉載于:https://www.cnblogs.com/margot921/p/9764788.html

彈性布局

彈性布局 一、Flex布局是什么? Flex是Flexible Box的縮寫,意為”彈性布局”,用來為盒狀模型提供最大的靈活性。任何一個容器都可以指定為Flex布局。 二、基本概念 采用Flex布局的元素,稱為Flex容器(flex container&…

Java-Type簡單分類

&#xff08;1&#xff09;ParameterizedType&#xff1a; 參數化類型&#xff0c;例如List<T>。 &#xff08;2&#xff09;GenericArrayType&#xff1a; 泛型數組類型&#xff0c;例如T[]。 &#xff08;3&#xff09;TypeVariable&#xff1a; 泛型的類型變量&a…

解決dataTable 報錯:cannot read property “style“ of undefined

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 其實這錯&#xff0c;我之前也遇到過&#xff0c;只是太久了&#xff0c;沒有記錄下來&#xff0c; 今天看到群里朋友也遇到這個錯誤&a…

萬惡之源 - Python基礎數據類型一

整數 整數在Python中的關鍵字用int來表示; 整型在計算機中運于計算和比較 在32位機器上int的范圍是: -2**31&#xff5e;2**31-1&#xff0c;即-2147483648&#xff5e;2147483647 在64位機器上int的范圍是: -2**63&#xff5e;2**63-1&#xff0c;即-9223372036854775808&…

談談對于技術面試的心得體驗

導讀&#xff1a;作者lzprgmr寫了一篇《談談技術面試》文章&#xff0c;他在文中講述了自己對于技術人員面試的經驗和心得&#xff0c;以下是文章內容&#xff1a; 只要是招一個技術人員&#xff0c;不管是初級的程序員還是高級軟件工程師&#xff0c;技術上的考核都必不可少。…

es6中class類的全方面理解(三)------靜態方法

不需要實例化類&#xff0c;即可直接通過該類來調用的方法&#xff0c;即稱之為“靜態方法”。將類中的方法設為靜態方法也很簡單&#xff0c;在方法前加上static關鍵字即可。這樣該方法就不會被實例繼承&#xff01; class Box{static a(){return "我是Box類中的&#xf…

jackson/fastJson boolean類型問題

1.我們以Person對象舉個栗子&#xff0c;person有三個屬性。name&#xff0c;age和isGay Data public class Person {public Person(String name, int age, boolean isGay) {this.name name;this.age age;this.isGay isGay;}private String name;private Integer age;priva…

django模板系統(下)

主要內容&#xff1a;母版&#xff0c;繼承母版&#xff0c;塊&#xff0c;組件&#xff0c;靜態文件 母版 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"x-ua-compatible" conten…

狗窩里的小日子 ...

來&#xff0c;把平時作的菜菜整理下下&#xff1a; 1. 2. 3. 4. 5. 6. 7. 8.

面試開發人員的有效方法

伯樂在線 寫道 "Alan Skorkin是一名軟件開發人員&#xff0c;這是他分享的另一篇有關面試和開發人員的文章(中文)。Skorkin 認為&#xff0c;“當要雇傭開發者時&#xff0c;傳統的面試方法顯得力不從心&#xff0c;這是必須要面對的現實。為什么不行&#xff1f;原因也許…

Android直接用手機打包apk!

你沒有看錯&#xff0c;用手機瀏覽器訪問Jenkins&#xff0c;就可以打包apk&#xff0c;并生成下載二維碼&#xff0c;發送郵件通知測試人員下載&#xff0c;從此解放雙手&#xff0c;告別打包測試。先上本人手機郵箱收到的打包成功通知效果圖&#xff1a; 廢話少說&#xff0c…

java中byte、short、char、boolean實際都是按照int處理的!

byte、char、short、boolean四種類型在匯編期或運行期間采取和int類型一樣的存儲方式&#xff0c;在計算時會先轉換為int類型&#xff0c;后進行計算。所以兩個short類型數據做算數運算&#xff0c;結果卻為int類型。這主要是因為jvm的字節碼為了簡潔高效&#xff0c;設計時只使…