去年 5 月初,王者榮耀上線了一個挑戰 AI 「絕悟」的限時活動,當時打開遊戲界面,就能看到 「挑戰·絕悟」的入口,活動出來,我就去體驗了一下。算法
這個挑戰一共五關,一關比一關難,像我這樣的農藥大神前幾關隨便過 ,最後一關就只能推塔了,正面硬剛確定剛不過。微信
這種不敢正面懟的感受「似曾相識」,我在英雄聯盟的末日人機中也體會過,拉克絲的天女散花我至今還有陰影。網絡
騰訊的「絕悟」在世界冠軍盃半決賽中戰勝了職業選手,隨後又在面向頂級業餘玩家開放的體驗測試中拿下 99.8% 的勝率。架構
雖然輸了一場,但這個出道沒多久的 AI 玩家在電競圈也算打出了名氣,固然這個戰績和王校長比還差點,校長在 100% 勝率時宣佈退役,是 LOL 電競圈惟一一位主動放棄 S 賽名額的選手 。app
話說回來,訓練出像「絕悟」這樣吊的 AI,須要騰訊掌握的海量數據和強大的財力,平民也只能體會捱打的快樂,普通玩家要想訓練出一個這樣的人工智能不太現實。socket
不過,今天,我給你們帶來一個「平民版」的王者農藥 AI。這個項目已經在 GitHub 開源,做者是 FengQuanLi,我把預訓練文件下載方式和開源地址放在了後臺,關注微信公衆號「逛逛GitHub」回覆「王者」下載。ide
下面是 AI 本身玩王者的視頻,先睹爲快:工具
視頻來自公衆號「Jack Cui」學習
該視頻是兩倍速播放,開源項目做者只訓練了一個「後裔」英雄,若是想用其餘英雄,能夠本身訓練。測試
01
實現原理
這個開源項目的實現原理是怎樣的 ?下圖是這個模型的核心代碼,不算難,我一步步的拆解,我儘可能用通俗的語言描述這些技術。
讓電腦幫咱們玩遊戲能夠分爲以下幾步,固然這種方式是比較容易實現的方式,並不會用到「強化學習」的東西,而屠殺圍棋圈的 AlphaGo 算法是基於強化學習。
1. 獲取當前遊戲界面。既英雄如今是什麼狀態、周圍有沒有敵方英雄、小兵等等。
2. 根據當前遊戲界面狀態生成操做指令,是應該前進、攻擊仍是釋放技能。
3. 根據生成的操做指令去控制手機,英雄作出相應的動做。
對於訓練一個平民版的人工智能模型,大致流程就是這樣。其中獲取當前遊戲界面、根據指令去控制手機都有成熟的技術。
好比這個項目中使用 scrcpy 獲取安卓手機的投屏,這款安卓投屏神器能夠將遊戲畫面投屏到電腦桌面上。
有了遊戲畫面,就獲得了這時戰局的情況。遊戲畫面是圖片的形式,至於這個圖片包含什麼內容,人能看明白,可是電腦不懂。
這就須要咱們本身去提取圖片中的特徵,這裏便會用到深度學習算法的東西。基於卷積神經網絡(CNN)來提取圖片的特徵,項目中使用的是 ResNet 101 分類網絡。
經過訓練這個卷積神經網絡,該網絡就會具有提取遊戲畫面特徵的能量,有了這些,算法才能進行下一步操做指令的生成。
根據圖片生成操做指令是開源項目的關鍵點,這裏用的就是大名鼎鼎的 Transformer。
Transformer 是 2017 年的一篇論文《Attention is All You Need》提出的一種模型架構,其開創性的思想像一顆重磅炸彈,震驚了整個 NLP 領域。
目前在 NLP 各業務全面開花的語言模型如 GPT, BERT 等,都是基於這個模型,搞 Java 的讀者可能沒據說過這個東西,可是搞算法的小夥伴對這個技術確定不陌生。
生成一系列操做指令,說白了就是生成序列數據,而 Transformer 的 Decoder 就是幹這個的,該項目也是使用基於 Transformer 的技術 GPT 構建的。
固然圖片特徵提取和生成操做指令是一塊兒進行「端到端」訓練的,爲了方便你們理解,我拆開說的。
可以生成操做指令了,下一步就就是使用這些指令控制英雄。minitouch 即可完成這一目的,它提供了一個 socket 接口,用於在 Android 設備上觸發多點觸控事件和手勢。
總結來講: 用 scrcpy 獲取當前遊戲畫面,使用 Transformer 根據圖片生成操做指令,而後利用 minitouch 執行這些操做指令,這時遊戲中的英雄就會按照指令進行動做了。
至於會進行什麼樣的動做得看你餵給模型什麼樣的數據了。目前這個模型是使用「後裔」 100 多局對戰數據下訓練的,對局會表現出送人頭之類的問題。
這是由於數據量少而且場景簡單,有一些複雜場景的數據沒有覆蓋到,遇到這種不肯定因素,英雄也不知道怎麼辦了。
02
如何使用
使用前,你須要安裝好環境和依賴,好比:torch,scrcpy, minitouch 等。還得須要一部安卓手機,若是須要訓練本身的英雄還需一塊 6 GB顯存的顯卡。
1、首先下載模型
你能夠關注微信公衆號「逛逛GitHub」回覆「王者」下載訓練過的模型,而後後放入weights 文件夾下
2、修改配置
先運行 「啓動和結束進程.py」」啓動 scrcpy 把「訓練數據截取_A.py」」中的兩項改爲你設備的參數,_DEVICE_ID 是 adb devices後顯示的那個id。
3、運行
這時啓動王者榮耀進入 5v5 人機對戰 運行 「訓練數據截取_A.py」」便可。
以下想訓練本身的英雄,項目描述中也有方法,若是須要能夠去移步項目地址,不過該項目還只是一個雛形,若是有能力能夠本身完善。
[2] www.bilibili.com/video/BV1UK411g7sF
最後,防止找不到本篇文章,能夠收藏點贊,方便翻閱查找。本文首 發至公衆號 逛逛GitHub(ggGithub),轉載請註明出處。
推薦閱讀
1. 推薦幾個好玩項目
2. 推薦幾個有用項目
3. 推薦幾個有用工具
天天推薦一個有趣、好玩且可能你會用到的 GitHub 項目。
本文分享自微信公衆號 - 逛逛GitHub(ggGithub)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。