深度強化學習的人工智慧在遊戲中的運用:遊戲AI入門及AI優化指南

遊資網發表於2020-03-05
深度強化學習的人工智慧在遊戲中的運用:遊戲AI入門及AI優化指南


前言:

現如今,所有電子遊戲都離不開AI的運用,對於遊戲策劃而言AI是什麼,AI又是如何運作,可以說是面試時的加分項,本文在這裡不探討理論的AI(採用深度強化學習的智慧AI,如騰訊AI Lab、網易伏羲AI等),旨在分享現遊戲領域廣泛運用的AI,給新人策劃針對遊戲AI、遊戲指令碼有一個初步的瞭解。

(本文接下來不包括AI底層程式碼,AI工具開發等程式向內容,該部分在網路上已經有很多教程大家可以去學習,個人認為策劃對於底層AI的具體實現是不需要了解的,而對於AI製作與優化是需要學習的。)

深度強化學習的人工智慧在遊戲中的運用:遊戲AI入門及AI優化指南
本文的具體結構

一、AI的應用場景

人工智慧開發是遊戲研發中最具挑戰性的任務之一[1],那麼遊戲中AI的具體使用場景在哪裡呢?

深度強化學習的人工智慧在遊戲中的運用:遊戲AI入門及AI優化指南
英雄聯盟裡怪物戰鬥AI、場景AI(作用於野怪重新整理)、人機挑戰中機器人戰鬥AI

除了大家熟知的LOL,3A大作裡AI一般運用到哪裡呢?

深度強化學習的人工智慧在遊戲中的運用:遊戲AI入門及AI優化指南
巫師3中的NPC AI,怪物AI等AI運用基本可以囊括現有AI的運用場景

從上面舉的兩個例子,已經可以看出現在製作遊戲離不開AI。

二、AI通過什麼方式進行設計?

現有遊戲AI基本通過下面兩個方式進行實現:行為樹(Behavior Tree)與有限狀態機(Finite State Machines),那麼下面我們就對於這兩個實現方式進行探討。

2.1 什麼是有限狀態機

“狀態機”是一種表示狀態並控制狀態切換的設計模式,常常用於設計某種東西的多個狀態。而有限狀態機是指遊戲內的條件邏輯封裝到各個狀態類裡。例如一個人有站立狀態,跑動狀態,走路狀態,蹲下狀態,開火狀態等[2],當一個事件發生,將會觸發一個動作,或者執行一次狀態的遷移。

但卻有兩個缺陷:

1. 各個狀態類之間互相依賴很嚴重,耦合度很高。

2. 結構不靈活,可擴充套件性不高,難以指令碼化/視覺化。

下圖是遊戲中怪物入戰的有限狀態機,如果我們想對攻擊敵人/追擊敵人狀態進行修改,是需要程式給我進行狀態類中內容修改的。

深度強化學習的人工智慧在遊戲中的運用:遊戲AI入門及AI優化指南

那如果我們可以把本來的巡邏、追擊敵人、攻擊敵人等狀態先進行更細分的封裝,是不是更好呢?那你就可以見到狀態機如下圖一樣的混亂,後期的維護基本很難進行。

深度強化學習的人工智慧在遊戲中的運用:遊戲AI入門及AI優化指南

結合前面兩種情況,我們又可以發現,使用有限狀態機,策劃不能充分參與其中,只能由程式設計師來完成,這會增加程式設計師的工作量。

綜上所述:在遊戲開發中使用狀態機顯然不失為一種選擇,首先它的概念並不複雜,其次它的實現也十分簡單而直接,所以當一個簡單的npc所需AI,使用狀態機是完全可行的。

但它的缺點卻也十分明顯,例如難以複用,因為它往往需要根據具體的情況來做出反應,當然當狀態機的模型複雜到一定的程度之後,也會帶來實現和維護上的困難。

而現在行為樹比有限狀態的幾個優勢:

1. 行為樹提供了強大的靈活性,很容易更改行為樹的結構,也易於後期的維護與擴充套件;

2. 在程式開發了元件後,邏輯層面全部交給了策劃,減少程式設計師工作量的同時,讓策劃也可以進行AI問題的初步排查。

正好彌補了我們上面所說的狀態機的缺點,那麼接下來我們就著重介紹行為樹吧。

2.2 行為樹

行為樹就是一棵節點層次分明的樹,控制著AI物體的一系列決定。從樹延伸出的葉子節點,執行控制AI物體的指令。各種工具節點組成樹的分支,來控制AI指令的走向以形成一系列的指令,這樣來滿足遊戲需要。

它可以是一棵很高的樹,可以具有完成特定功能的子樹,開發者可以建立行為庫並把它們適當地連線起來以達到非常真實的AI行為。開發過程是高度可迭代的,你可以先排出一個基礎的行為樹,然後建立新的分支來處理各種達到目標的可選方案,這些分支按照它們的優先順序排列,這樣AI在一個特定的行為失敗可以回溯到另一個策略,這是行為樹巨大優勢所在。[3]

現在的很多專案就是Lua做邏輯開發,下圖分享一下專案中使用的Lua版本行為樹。

Lua行為樹執行上圖狀態機的相同AI功能:

深度強化學習的人工智慧在遊戲中的運用:遊戲AI入門及AI優化指南

如果對於上圖,一個簡單的行為樹看不懂的話,可以閱讀行為樹的工作原理:

AI 行為樹的工作原理

在例子中,行為樹的優點是邏輯直觀、一目瞭然,策劃可以藉助工具直接配置,不需要程式介入。而缺點則是樹分支數量龐大,每次遍歷尋找合適節點的過程消耗高。

三、如何優化AI中的設計

如果僅僅只是講述前面兩點事實,這篇文章就沒有什麼意義,接下來分享一些自己對於AI方面的經驗,也希望在你優化AI的時候,這一部分能夠起到幫助。

3.1 NPC AI

在RPG遊戲發展的過程中,NPC擺脫了原本傻站原地,無腦發放任務的基本模式,融入了各種各樣的AI來豐富行為,《巫師3》中,白天開業的商人,巡邏街道的衛兵;《刺客信條》中,圍成一團的群眾,穿梭街道的小孩;《如龍0》中讓玩家印象深刻的勒索哥等等,這些遊戲中NPC AI的加入讓整個遊戲世界更加的真實,也讓玩家的沉浸感有著質的提升。

拿《逆水寒》NPC來舉例:

1.天氣影響:下雨時,NPC會自己打傘,或奔跑到屋簷下避雨,天氣放晴又會自動收起雨傘。

深度強化學習的人工智慧在遊戲中的運用:遊戲AI入門及AI優化指南

2. 互動:撞擊NPC可以觸發奇遇,與NPC好感度不同所進行交流的內容不同。

3. 行為:NPC有自己的活動路線,他們有自己的生活區域。

其實在NPC中還有很多其他的內容,更多的天氣感應、更多種類的職業配置,工作任務配置等等,都是讓遊戲內場景顯得更鮮活的方式,在AI中實現NPC具體的功能很簡單,這裡我們分析一下在AI拿到相應的行為前,是如何判定的。

NPC行為型別可以為兩類:

1.外部互動(玩家進行碰撞NPC等)

2.系統變化(天氣、時間等的變化引發NPC行為變化)

而一個NPC的智慧行為過程主要分為三步:

1.事件觸發檢測

2.觸發響應得到候選的可執行行為

3.決斷出最終行為並通知AI

事件觸發

外部互動行為本身就是一個事件,所以當客戶端上傳外部事件訊息時,直接處理就行了。

系統變化是一個值變化事件,例如天氣值從原來的1(晴天)變為現在的4(小雨),這時系統特徵變化事件被觸發。

觸發響應

1.優先順序高的行為觸發時,將打斷當前正在執行的低優先順序行為。

2.優先順序相同的行為觸發時,根據設定的行為型別優先順序進行判定,如躲雨被撞擊,觸發外部互動。

3.當前幀在觸發過程中產生的新的觸發,會在下一幀執行,防止迴圈觸發。

行為決斷

通過觸發響應,得到了對應的候選可執行行為,此時我們就需要根據當前狀態得到最終執行的行為:

1.排除與當前正在執行的行為互斥的行為(行為互斥機制)。

2.優先挑選可持續的行為。

3.進行行為的更新。

在這樣一套流程下來後,AI就可以拿到NPC相應的Action,而具體需要觸發喊話,還是打傘,躲雨等動作,簡單的寫出行為子圖即可。

3.2 機器人AI

機器人AI,在這裡不是指傳統Robot的AI,而是指遊戲中各種活動需要,而生成的玩家映象機器人的AI。

在製作機器人AI,首先要知道機器人AI設計的主要目標:

◆ 模擬玩家進行對戰,用於PVP破冰和體驗提升。

◆ 新手過渡,讓玩家體驗活動時,培養成就感,避免尚未熟悉遊戲導致的挫折流失。

◆ 陪伴玩家,用強度合理的AI來陪伴玩家參與活動,減少玩家單人蔘與的有損體驗。

那麼機器人AI所需要參考的具體內容是哪些呢?

如果按照功能點維度,遊戲中運用到的機器人戰術一般分為三種:

◆ 單體戰術AI——AI的戰鬥細節

◆ 事件響應AI——AI對於事件的響應

◆ 協同戰術AI——AI能夠互相配合

而機器人本身一般需要涵蓋以下特性:

◆ 流暢性——技能釋放與銜接,追擊與逃跑等戰鬥效果。

◆ 擬真度——符合常識的PK反饋,讓玩家沒有違和感。

◆ 環境適應——機器人能夠適應遊戲內不同情境/活動的需要(機器人的廣度)。

◆ 難度可調——機器人的難度(戰鬥能力)可調(機器人的深度)。

那麼你具體的優化方向就可以往三種戰術、四種特性上擴充套件,以《英雄聯盟》與《逆水寒》為例:

《英雄聯盟》[4]

單人戰術:瀕死逃亡,當電腦在較低血量會逃走。

事件響應:尾刀響應,玩家殘血時,電腦會感知到,並使用全圖技能進行攻擊;推塔響應:玩家推完一塔後,二塔電腦玩家都會響應前來防守;換線響應,上路機器人來中路補線的時候,原本中單機器人會前往上路。

協同戰術:Gank行為:電腦幫助其他線玩家進行多打少區域性戰鬥。

在上面的三種戰術的具體實行中,單人戰術大多僅需簡單的配置,而像事件響應與協同戰術需要更豐富的底層機制去支撐,一個協同戰術就需要:Group機制(可以通過傳送Message來控制)、目標選擇機制、追擊與逃跑機制等的支撐。

《逆水寒》

雖然逆水寒機器人是深度學習AI進行控制,但其表現仍然可以用在很多先用的MOMORPG之中。

深度強化學習的人工智慧在遊戲中的運用:遊戲AI入門及AI優化指南
逆水寒機器人中一些出彩的機器人AI

以上就是機器人AI部分的分享,具體機器人AI的Lua行為樹該怎麼寫,這個反而應該是很簡單的存在,並且所需篇幅較長,這裡就不再擴充。

3.3 怪物AI

怪物AI整體的含義很寬泛,這裡不做過多的設計方面的分享,有太多的關卡/戰鬥策劃有自己的真知灼見,這裡就不獻醜,只在AI邏輯中進行一個分享。

前提:一個分為簡單、困難兩個難度的BOSS,擁有普通攻擊1、技能2,50%血量觸發的技能3,困難模式30%血量才有的技能4,撰寫簡單的Lua行為樹。(你可以思考一下開啟的行為樹邏輯方式,甚至自己寫一些具體幾個節點的框架)

下圖,是上述BOSS AI子圖中的一部分,這裡為了方便閱讀並理解其中邏輯含義省去了很多重複的邏輯元件運用(castSkillAll應該為一張子圖,這裡就簡單合併為一個元件)。

深度強化學習的人工智慧在遊戲中的運用:遊戲AI入門及AI優化指南
一個簡單的BOSS AI子圖

在上圖中,需要注意以下幾點對你撰寫AI子圖會邏輯清晰以及方便很多:

1.returnBattle,在我們平時撰寫AI中,我們總會把線遷回到一開始,完成一個閉環,讓整個怪物AI迴圈起來,這樣做法沒有錯,但是迴圈再複雜BOSS本身會造成難以閱讀、修改等成本,讓程式直接建立一個回到戰鬥的元件,整個流程圖線性鋪開,十分利於閱讀。

2.putNewAction,有的怪物AI會把不同血量怪物掌握的不同技能再寫一遍,這樣的作法十分冗餘,也讓AI邏輯不利於閱讀,利用插入優先行為的形式,在技能達到觸發條件時,插入到怪物的技能列表裡,讓整個怪物邏輯更加清晰。

3.SkillFlag,起到的是保護作用,設定這樣一個引數,是為了當新技能不會被重複加入,第一次加入技能後,該引數自動變化,後面不會再插入該技能。

當然,在怪物 AI的子圖中還有很多小細節需要注意,但篇幅有限,僅先展開到這裡。

四、深度強化學習的人工智慧在遊戲中的運用。

這一部分僅僅作為簡單的分享,本人也並沒有製作深度強化學習人工智慧的能力,在與該類AI合作的過程中,能夠知道現在這類理論AI在遊戲中能運用到什麼水平。

4.1 深度學習的應用場景

深度學習機器人需學習、調整3個月左右(參照簡單RPG角色,時間受角色資訊、樣本數量、場地因素等等多方面限制),能夠達到單人優秀玩家的水平。

深度強化學習的人工智慧在遊戲中的運用:遊戲AI入門及AI優化指南
如果想見識AI能達到的水平,可以參考逆水寒的流派挑戰

至於簡單的多人合作也可以做到,但是複雜場景中理論AI的運用會受到很高的侷限性。

所以AI在遊戲中以Lua行為樹的形式存在應該還要很久,當然你也可以採用理論AI配合指令碼AI的形式,所有玩法形式都由指令碼控制,載入戰鬥狀態時呼叫理論AI即可。

PS:本文只是淺度分析了一下游戲中的AI,具體AI的設計還是需要你自己接手專案,頻繁練習後方能有更深的感觸,這裡也只做拋磚引玉,歡迎堅持閱讀到這裡的朋友們在下方評論交流~

參考


[1]《遊戲人工智慧》
https://baike.baidu.com/item/%E6%B8%B8%E6%88%8F%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/22147006?fr=aladdin
[2]遊戲狀態機
https://www.cnblogs.com/KillerAery/p/10003678.html#有限狀態機fsm
[3]AI行為樹的工作原理
https://www.gameres.com/846263.html
[4]MOBA英雄AI設計分享
https://cloud.tencent.com/developer/article/1146677

作者:淚的天堂
專欄地址:https://zhuanlan.zhihu.com/p/82567889

相關文章