如何提升遊戲中機器人的表現?

Jian,John、Booker發表於2020-07-17
一、前言

FPS(第一人稱射擊遊戲)中的 AI 實現多年來一直沿用著狀態機和行為樹。策劃和程式設計師充分利用這兩個工具,做出了大量玩法,創造了許多新穎而有趣的模式。但絕大多數的 FPS 類遊戲都是偏競技的。而競技類的遊戲是零和的遊戲,有人贏,就必然有人輸。絕大部分的玩家不可能像職業玩家那樣不停地訓練和比賽來不斷提升自己的技術水平;基本上是技術練到一定的階段後,就處於長期停滯狀態。挑戰高手會被虐得很慘,玩弄新手實在沒有什麼成就感。遊戲高峰過去後,想要隨時找到水平相當的隊友和對手,都是比較困難的事情。在水平不等的情況下,遊戲的樂趣會逐漸降低,逐漸地玩家開始流失。

為此,各專案都做過很多嘗試。一是優化匹配演算法,高峰期效果不錯,但在低谷期,由於整個遊戲池中的總玩家數不足,匹配到水平相當的對手很困難。二是在匹配無法平衡時,補充一些機器人到比賽房間中。常規的技術還是利用行為樹來模擬玩家,策劃的同學往往要寫大量的行為樹虛擬碼來實現一個模式或一張地圖。然而行為樹是一種基於規則的演算法,即使加上一些隨機擾動,這些規則都很容易被玩家發現。往往行為樹版本的擬人機器人上線後會被玩家吐槽,他們會認為自己被欺騙了。

有沒有新的方法來提升機器人的表現,從而提升玩家的滿意度呢?我們把方向瞄準了最近幾年蓬勃發展的深度學習。

近年來,隨著人工智慧的發展,深度學習技術已成功應用於影像、語音、自然語言等領域。比如基於 ImageNet 進行的圖片分類比賽[7],基於人臉識別的智慧安防系統,Google 利用深度學習技術降低 Android 系統語音識別錯誤率,提升機器翻譯的流暢度等等。

深度學習技術應用於遊戲領域,業界也有不少成功的例子,比如 DeepMind 開發的 Atari 遊戲 AI 能夠同時掌握 7 種遊戲的玩法,並在 3 種遊戲中超過人類專業玩家[1];DeepMind 開發的 StarCraft II 遊戲 AI AlphaStar 在 2019 年 1 月成功挑戰職業選手[2];OpenAI 開發的 Dota2 遊戲 AI OpenAI Five 在 2019 年 4 月戰勝職業選手[3];Tencent 開發的王者榮耀遊戲 AI 絕悟在 2019 年 8 月通過電競職業水平測試[4]。但是這些遊戲中的場景都是 2D 的,而 FPS 類遊戲通常都是 3D 的。FPS 類遊戲與這些遊戲的不同之處,以王者榮耀為例,總結如圖 1。

如何提升遊戲中機器人的表現?
圖 1:FPS 類遊戲與 MOBA/RTS 類遊戲的區別

FPS 類遊戲為非完全視野,且存在多個敵人和多個隊友,視野內敵人和視野外敵人如何建模?敵人從視野內短暫消失,玩家在視野外受到傷害時,敵人的特徵如何表達?和隊友之間如何配合?怎麼在高效的表示 3D 環境資訊的同時降低計算複雜度?AI 的動作空間如何設計?這些都是值得思考的問題。

業界和學術界有一些將深度學習應用於 FPS 類遊戲的例子,比如由 Poznan University of Technology 舉辦的 Vizdoom 比賽[5],DeepMind 開發的 Quake III Arena 遊戲 AI[6]。但是它們的輸入都是純影像,而且評價標準是競技。對於 FPS 類遊戲來說,如果只是追求競技的勝利是非常容易的,只要計算好自己的槍口和敵人頭部之間的一個三維向量,就可以槍槍爆頭,這樣 AI 就變成外掛了。因此,我們提出 FPS 類遊戲 AI 的評價標準是擬人,即希望 AI 能像人一樣和環境發生合理的互動,比如利用地形、障礙物,根據對手和同伴的狀態決定後續操作等等。

能否將深度學習技術應用於 FPS 類遊戲,來幫助策劃和程式設計師高效地製作出不容易被玩家發現的擬人化 AI,是一個我們希望去解決的問題。

二、初步嘗試

2018 年下半年,專案組和 AI 平臺部基於全軍出擊手遊開始了第一次嘗試。這次嘗試基於 5km * 5km 的全軍出擊地圖進行,如圖 2 所示。採用基於影像和屬性特徵相結合的監督學習方案。

如何提升遊戲中機器人的表現?
圖 2:全軍出擊地圖

這是 AI 在 FPS 的初步嘗試,實話實說,當時專案組和 AI 同學都沒有明確 FPS AI 的方向是什麼,根據業界的經驗,大家的目標還是偏向於競技和勝利。

採用的基於影像識別的方法需要採集從客戶端的影像資料處理後得到遊戲的狀態,這個過程過於複雜,消耗的資源也很多,整個專案迭代很慢。加上後來業務調整,沒能積累足夠的資料來支撐模型的訓練,以及問題複雜度確實太高 ,嘗試終止。

問題複雜度高有幾個方面引起:一是地圖範圍太大,對深度神經網路的表達與記憶能力有很大的挑戰;二是環境複雜,地圖中有大量動態物體,如汽車、摩托車、船、包裹等等,對環境和物體的特徵表示,挑戰也很大;三是巨大的動作空間,由於戰術競技複雜的遊戲邏輯,真實的物理場景,需要 AI 對環境做出大量不同的反應,如開門、關門、開車、游泳、蹲、跑、爬等等。

三、新方案

2019 年春節後,專案組正式和 AI 平臺部/智慧 NPC 中心開始新的一輪深度學習在遊戲中落地的嘗試。總結了一些之前的經驗。首先明確了幾個規則:

  • 專案共同開發,程式碼開源共享;
  • 專案組開發的 FPS 遊戲是基於全伺服器信任的,伺服器擁有所有的遊戲資訊,包括地圖,模式,玩家的移動,開火,命中並做結果判定; 無需使用客戶端圖形進行間接分析和判斷。這樣可以大量地減少影像處理對資源的消耗。同時 AI 可以獲得全域性資訊,而不是僅僅只有單個玩家的資訊(後期會限制 AI 獲得非相關資訊);
  • 第一目標是擬人化,優先採用監督學習方案;
  • 基於全軍出擊的複雜度問題,這次確定的方案是地圖由小到大,玩法從簡單到複雜。因此選擇了 CFM 團隊模式中的運輸船作為基準地圖(地圖大小:10m * 32m)。這是一張 5v5 小型地圖,玩法相對簡單,地圖是一個相對封閉的空間,沒有載具,在團隊模式中使用率最高;
  • 由於 CFM 已經穩定執行多年,並且日常開發工作繁重,遊戲玩法邏輯伺服器 DS 程式碼接近 100w 行,如果再整合 AIServer 為一體,則無法保證系統的穩定性和可靠性。因此,決定將 AI 作為一個“客戶端”接入到遊戲伺服器,而不是將 AI 整合到遊戲伺服器中。現有的遊戲邏輯伺服器僅僅需要做極輕微的改動就可以接入 AI。當然,我們需要開發一些附加的獨立模組來支援 AI。


如何提升遊戲中機器人的表現?
圖 3:系統架構圖

其中:

  • GameD 作為一個模擬客戶端加入 DS 的房間;
  • 將 DS 傳送給客戶端的協議轉換為 AI Server 的協議;
  • AI Server 載入訓練好的模型,根據 GameD 傳送的協議和自己需要的其他資訊提取特徵資料,預測後將結果返回給 GameD;
  • 預測的結果是 8 個方向的移動,上下左右視角變化,跳躍,蹲下,開火,換槍等基本操作;
  • GameD 把這些基本操作和地圖資訊一起進行物理計算後,轉換為相應的協議傳送給 DS。

四、第一次 5V5 的開發
專案在 2019 年 3 月初立項,設定的目標是希望在 4 月能夠搭建好完整的離線流程,實現基礎版 demo;5 月能夠實現具有躲閃、跳躍、扔雷等高階操作的優化版 demo。

4.1 建模

我們直接基於真實的 5v5 模式進行設計、建模,搭建相關的資料處理、模型訓練流程。問題的動作空間、狀態空間的建模如圖 4、5 所示,其中所有的子任務都建模為分類問題。

如何提升遊戲中機器人的表現?
圖 4:動作空間建模

如何提升遊戲中機器人的表現?
圖 5:狀態空間建模

4.2 業務流程的建立

在搭建模型的同時,其他配套系統也在同時並行開發,包括日誌處理、 GameD 開發、客戶端日構建接入、回放工具等。整個流程逐步建立。同時在 3 個月的時間內積累了 100w 對局日誌。

4.3 效果不佳

5 月份,完成了第一個 5v5 版本,視野全透視,不考慮障礙物遮擋,經過策劃同學的幾輪體驗後,總結了這個版本。

優點:

已經展現了初步的擬人功能,主要表現為:

  • 利用掩體躲閃,
  • 順利跳上箱子,
  • 在箱子後預判穿箱開火,
  • 在高頻對射點預瞄敵人,
  • 在蹲人點等待敵人。

缺點也很明顯:

  • 存在透視現象
  • 對敵人屍體開火
  • 存在視野內有多個目標時來回切換


如何提升遊戲中機器人的表現?

  • 對視野外的傷害感知弱

如何提升遊戲中機器人的表現?

  • 敵人擦肩而過無感知等明顯問題

如何提升遊戲中機器人的表現?


專案組經過分析後找到問題所在:5v5 對戰變數太多,直接訓練 5v5 模型對於初期的擬人化目標而言還是太複雜。

五、基礎的 1V1

根據 5v5 版本出現的問題,我們決定暫停 5v5,轉移到更基礎 1v1。著重解決單個 AI 的擬人化表現,通過 1 個真人玩家反覆觀察和互動,逐步解決 AI 出現的問題。同時簡化了槍械,只支援步槍,暫時遮蔽狙,投擲和近戰武器。

5.1 模型的調整

沿用前面對動作空間、狀態空間的建模方式,同時將視野設定為考慮障礙物遮擋的 360 度可見,針對 1v1 模式,設計瞭如圖 6 所示的模型結構。

如何提升遊戲中機器人的表現?
圖 6. 1v1 模型結構

對於狀態空間,使用了多條 3D 實時射線來感知周圍的環境,包括靜態環境和動態環境(敵人),輸入使用單幀輸入,不考慮歷史資訊。

由於整個對局只存在 1 個敵人不存在多目標選擇的問題,且使用了考慮障礙物遮擋的 360 度可見,AI 對視野外傷害,和擦肩而過感知等問題得到明顯改善,但是也出現了新的問題。例如:徘徊問題。

基於真實玩家的 30w 對局資料進行了模型訓練,存在太剛、特定情況下長時間左右徘徊的問題。對於前者,我們通過優化樣本資料進行了緩解;對於後者,通過分析,我們發現是因為輸入的特徵出現了週期性變化,同時模型對於相同的輸入只會產生相同的輸出,導致視角子任務的輸出無法打破迴圈。

AI 在同一個狀態下存在多個合理的決策,如圖 8 所示,在狀態 A,為了繞過障礙物樹,既可以通過右轉到狀態 B 實現,也可以通過左轉到狀態 C 實現。視角子任務與其類似,這種問題被稱為多值問題。

如何提升遊戲中機器人的表現?
圖 7:多值問題示意圖

對於多值問題,混合密度網路[8-10]是一個比較優雅的解決方案。通過將視角子任務的建模方式由分類任務替換為多個高斯分佈建模,預測時按分佈概率取樣,增加 AI 行為的多樣性,模型表現沒有明顯的問題,得到策劃的認可。

隨著問題的逐步解決,AI 的表現越來越好。

5.2 複雜問題逐步解決

通過 1v1 模式的解決,初步驗證了問題建模的有效性,包括動作空間、狀態空間等。接下來我們重新去應對 5v5 模式。與 1v1 模式相比,5v5 模式有如下明顯的不同。

如何提升遊戲中機器人的表現?
表 1. 5v5 模式 vs 1v1 模式

針對上面的不同,我們設計瞭如圖 8 所示的模型結構。

如何提升遊戲中機器人的表現?
圖 8. 5v5 模型結構

基於百萬級別的對局資料,1v1 中使用 360 度視野規避了視野外傷害無感知和敵人擦肩而過無感知的問題。在 5v5 中這種視野建模方式不再有效,主要原因有:

1)從訓練資料上來看,玩家主要關注的是正前方的敵人,而非背後的敵人。

2)背後受到傷害特徵只會持續一幀,AI 無法持續決策轉身攻擊。

3)為此,AI 視野建模改為真實玩家視野建模,同時在資料層面刪除了受到傷害短時間死亡的幀,在模型層面引入了目標選擇輔助任務,在特徵層面加入了對歷史資訊的建模,基本解決了視野內有多個目標時來回切換,對視野外的傷害無感知,敵人擦肩而過無感知等問題。

模型效果在 7 月中旬得到了策劃的認可。後續我們又增加了對多武器的支援,比如狙擊槍、手雷等。到 7 月底,包含多武器的模型效果得到策劃的認可。

5.3 擴充套件和上線之路

5v5 模式的效果得到認可後,我們決定將新 AI 上線,接受更多真實玩家的體驗。

經過 1 個多月的準備、測試,基於運輸船開發的新 AI 於 9 月 14 日上線千人體驗服。86.6%的玩家認為新 AI 比行為樹 AI 的體驗更好,多樣化的行為讓玩家比較驚喜。

如何提升遊戲中機器人的表現?
圖 9. 體驗服玩家反饋

為了驗證整套方案的擴充套件性,又經過將近 2 個月的開發、優化、測試,我們完成了基於中型地圖恐龍博物館(地圖大小:20m * 40m)的新 AI 構建,並和運輸船一起於 11 月 22 日上線正式服,全量替換行為樹 AI。玩家對局次數、對局時長分別提升 34%、29%,40%左右的玩家 認為 AI 局沒有 AI(真人局中有 30%的玩家認為有 AI)。

在 2020 春節版本中,我們又擴充套件了 4 張地圖:清新椰島、巷戰 TD、沙漠對決、軍事基地,而且基於沙漠對決地圖構建了一個明星 AI。

玩家水平處於遊戲中的 top 30%,對 AI 比較敏感,投放會面向大量中低端玩家。

5.4 工具建設

對局日誌回放工具,用於確認資料選取、模型表現是否有問題

如何提升遊戲中機器人的表現?

選點定位工具,用於進行區域資料分析,如下圖

如何提升遊戲中機器人的表現?
圖 10. 選點定位工具

標籤分佈工具,用於標籤不平衡直觀觀察

如何提升遊戲中機器人的表現?
圖 11. 單任務標籤分佈

六、展望

6.1 強化方案

由於 CFM 有幾十上百張地圖,不是每張地圖都有足夠的玩家資料用來支撐監督學習的訓練。基於純玩家資料的訓練時間和人力成本太高。為此,我們探索了基於強化學習,輔以少量玩家資料的方案,目前也取得了不錯的效果。為後續覆蓋更多地圖提供了另一種選擇。

6.2 更多的玩法支援

FPS 玩法眾多,後續規劃了爆破,生化,生存等模式。

6.3 預測效能的優化

預測目前使用的是 python 方案。Python 線上上效能不佳,單反伺服器的承載非常有限。專案組和 AI 平臺部團隊正合作開發高效能的 Ai Server,2020 一季度可以上線。

經過近 1 年的努力,我們基於穿越火線手遊,探索了一套可行的在 FPS 類遊戲中構建擬人化 AI 的方案,並得到真實玩家的認可。這是業內第一個深度學習在 FPS 遊戲中實際上線的案例。同時,由於技術的突破,給產品帶來了更多的擴充空間。

有幾點經驗分享給正在或是準備進行 AI 落地的專案同學:

  • 明確 AI 在專案中的作用;
  • 選擇合適的技術,不一定是最前沿或最先進的;
  • 從最簡單的地方開始,逐步深入;
  • 專案組和 AI 團隊開源協同,發揮各自所長;
  • 工具建設要跟上;
  • 工程落地最終還是要考慮效率和成本。

最後,歡迎大家來體驗 CFM 新一代的 AI。

參考資料:

[1] https://deepmind.com/research/publications/playing-atari-deep-reinforcement-learning
[2] https://deepmind.com/blog/article/alphastar-mastering-real-time-strategy-game-starcraft-ii
[3] https://openai.com/projects/five/
[4] https://ai.tencent.com/ailab/zh/news/detial?id=27
[5] http://vizdoom.cs.put.edu.pl/
[6] https://deepmind.com/blog/article/capture-the-flag-science
[7] http://www.image-net.org/
[8] https://publications.aston.ac.uk/id/eprint/373/1/NCRG_94_004.pdf
[9] https://www.katnoria.com/mdn/
[10] https://www.katnoria.com/mdn/https://towardsdatascience.com/a-hitchhikers-guide-to-mixture-density-networks-76b435826cca

關於騰訊遊戲學院專家團

如果你的遊戲也富有想法充滿創意,如果你的團隊現在也遇到了一些開發瓶頸,那麼歡迎你來聯絡我們。騰訊遊戲學院聚集了騰訊及行業內策劃、美術、程式等領域的遊戲專家,我們將為全世界的創意遊戲團隊提供專業的技術指導和遊戲調優建議,解決團隊在開發過程中遇到的一系列問題。

申請專家資源請前往:https://gwb.tencent.com/cn/tutor

作者:Jian,John、Booker
來源:GWB-騰訊創意遊戲合作計劃  
地址:https://indienova.com/indie-game-development/how-to-improve-robot-ai/




相關文章