GAME AI Pro 1 第1章


和錢康來合作翻譯的AI PRO 1和2 系列,計划是一周一篇,先撿着有意思的翻,對那篇有興趣也可以留言給我優先翻譯,希望都翻譯好后有機會成書吧,有興趣一起翻譯的也可以聯系我。

游戲人工智能是什么( What Is Game AI)?

Kevin Dill  

1.1 介紹

   游戲AI就是目的就是為玩家創作出讓人信服的體驗,我們使用的每項技術,竅門以及算法,都是為了實現這個目標。維基上給予 人工智能 (AI,Artificial Intelligence  )的定義是:“智能代理(智能主體,intelligent agents)的研究與設計” 。而智能代理是指“可以觀察周圍環境並讓作出的 行動最大可能的 獲得成功的系統”。但這並不是AI唯一的定義,“AI‘”只是術語,眾所周知它是難以定義的,但它確實精確的描述了在大學中研究和教學的大部分的AI。我們通常用術語“學術AI”來描述這些我們現在通常教學的部分。
    電影動畫師通常把他們創作的生命幻覺( illusion of life)稱作人工生命體,這個短語被認為是起源於迪士尼動畫。但這是個非常不同的目標。卡通角色並不需要“讓行動成功的機會最大化”。相反在大多數情況下,他們希望觀眾可以直覺的去相信他們所實現的內容(盡管實際上這些明顯是人工創作的)並創作出讓人信服的體驗,這些就是電影所做的。
   而每個游戲都不相同,游戲的AI非常的廣泛。相比經典的學術的AI,游戲AI的目標更近似於迪士尼的人工生命體。卡通和游戲是為了娛樂而創作的,並不需要最大化成功率的認知的來建模,而是要敘述故事,創作體驗,一種智能的幻覺(illusion of intelligence)。在某些情況下,我們創作幻想所需的技術可以來源於學術AI,但大多數情況下卻是不同的。這里,我們用術語 游戲AI來做描述,游戲AI專注於創作智慧的表現以及給給觀眾特別的體驗,而不是創作出真實的智慧。

1.2 創作體驗

   這里通常談論的目標是如何讓游戲AI最大的提升玩家的樂趣,而不是最大化成功機會。后者確實可以作為AI的目標,但並不是最佳的定義。就像AI這個術語一樣,“有趣”也是個眾所周知但又難以定義的詞匯。而且,並不是所有的游戲都有趣的,有些游戲是描述故事,或者是故事里非常酷的角色,其他一些游戲創作的是刺激,冒險,懸念甚至是恐懼的感覺。還有一些游戲給予玩家的是權利感,讓他感覺起來更像是人。

1.2.1 暫停懷疑
    玩家是有意願來參與我們為他們創作的體驗。因為玩家有了加入創作的幻想的意願,所以會自願的停止自己天生的懷疑,並正常的去體會這種明顯人工創作的角色和事件。雖說如此,我們還是有責任提供足夠引人入勝的幻覺,使玩家可以暫時不去懷疑。當玩家認同和反應AI認為它是真實的時候,成功了,即便底層的算法相當的簡單。而AI的一些行為讓用戶發覺AI只是機器程序而不是真實的話,那么就失敗了。ELIZA-由Joseph Weizenbaum於1964年提出的AI心理學,舉證了如何可以輕易的用簡單算法來獲得玩家的信任,以及如何因為算法出錯而迅速失去玩家新人。
    因為玩家是願意參與體驗的,而且是人類的思維方式,所以實際上是相當寬容的。只要AI所做的行為是合理的,玩家的頭腦就會現辦法來解釋AI所做決策,這通常是非常復雜的,比AI內部的實現還要復雜,但基本上也是令人信服。實際上,在某種程度上創作復雜的AI可以是錯誤的,不但會浪費寶貴的開發時間,同樣也會導致角色執行的行動,雖然是很合理的AI,但並不對應玩家關於AI行為的心理模型。也就是說,如果玩家知道AI在想什么的話那這些行為是合理的,但玩家並不知道。因此,那些仔細的決策選擇最終看起來只是隨機或是僅是普通的錯誤。
    我們要不惜一切代價避免的是人為的 愚蠢行為 -選擇那種看起來明顯錯誤的或是沒有任何意義的行為。常見的例子如走進到牆壁里,被卡在幾何體里或者是忽視正在射擊你的玩家。甚至是一些實際人類會避免的行為,因為那些行為由AI控制的角色執行看起來是毫無人性的。例如人類經常會改變想法,但讓AI來做的話,往往給人是錯誤算法的印象,而不是對情況的重新評估。
    解決這種人為的 愚蠢行為 的方法可以簡單 的讓AI變得更好一些,但可能和玩家期望的不同,很難同時滿足所有人的。結果上,各種方法都有被使用。在一些僵屍類的游戲就是很好的例子,敵人角色被有意的做的有些愚蠢和不可靠,他們的這種陌生感更容易被接受。在其他的一些游戲里,角色會使用短台詞,有時被稱作“ barks ”,來提示玩家發生了什么。例如他們會大喊” Grenade “或” I’m hit! “,這個並不是用來和其他AI交流的(通常是用代碼來傳遞消息),而是向玩家解釋他們的行動。         

1.2.2 反應性,不確定性和創作者控制    
    在很多的討論中已經給了游戲AI各種最佳的架構。實際上本書的全部章節也是處於這個目的。第一個想法可能是從學術AI建立所需體驗的啟發式定義,然后使用機器學習來優化這些體驗。但這種方法也有一些問題,最明顯的是這種體驗往往是游戲設計師來定義的,可能他並不是程序員並且使用的模糊的人類語言的術語。你如何去開發啟發式功能來最大化“有趣”,“刺激”或是“冷靜的態度”?
    這並不是說啟發式功能是無用的---實際上,基於功能(utility)的方法也是AI最常用的一種方法,特別是那些有着比較復雜決策制定的游戲(例如策略游戲以及類似The Sims or Zoo Tycoon這樣的模擬游戲)。最重要的是,要保留創作者的控制(authorial control)-也就是說,要確保AI的開發者可以調整和優化AI已確保達到想要的體驗。如果我們放棄對機器學習算法的控制,那么就很難獲得我們想要的結果了。
    這是個矛盾的需求,不過我們需要角色可以感受環境並選擇恰當的行動來應對微秒和瞬息萬變的游戲中的情況。AI的反應性和創作者控制並不是互斥的,還是可以構建一個帶有反應的系統,但因為可以通過控制AI制定決策時評估情況的方式,所以仍然提供了創作者的控制。控制有反應的AI是比較復雜的,因為作為開發者必須要去思考你所做的變化將會如何去改變AI的決策制定,而並不僅僅是簡單的直接去改變角色行為。
    關於這點並沒有唯一正確的答案,有些游戲(例如策略游戲或者是模擬人生這種)需要更多的反應性,而其他一些游戲(例如魔獸世界)就要權衡設計決策,用更多的腳本AI來創作出那種周密的手工調整而又能給出玩家很高的可預見的體驗。哪種都沒錯,每種類型的優秀游戲提供的體驗是不同的,所以這是當你要選擇AI的方法時所需要去考慮的。
    對游戲AI來說有各種流行的架構,其中很多一會在本書后文中討論到。一些提供了更好的反應性,另一些允許更加直接的創作者控制。下圖1.1中用圖表粗略的表明了最流行的AI架構在這兩者之間的權衡。要記住的是,每周架構都有自己的優缺點和特征。圖里只是一個簡單的指導。
   
 
   值得注意的是,機器學習被放在圖上,僅僅是由於它在學術界的普及。很少有游戲把機器學習作為它的核心AI。另外行為樹在這里被故意的省略了,這時因為行為樹的性能很大程度上依賴所使用的決策組件的類型。如果組件都是簡單的,就像Damian Isla最初設想的,那么行為樹就和有限狀態機處於同樣的位置。然后,行為樹的一個很大的優勢在於,每個節點都可以包含最合適的決策邏輯,允許你為每個獨立的決策使用最合適的架構。
    另外一個選擇AI架構的復雜因素就是它的不確定性。在很多游戲中,我們希望為角色增加一定的隨機性,使他們不會被玩家所預測(很可能會被玩家利用到)。同時,我們不希望AI去選擇明顯錯誤的行為,所以也需要確保隨機選擇仍然是合理的。有些架構更有助於我們增加一些隨機性來進行混合(特別是行為樹和基於功能的架構處理的更好)。所以這也是當你設計游戲時需要考慮的另外一個因素。

1.2.3 簡單和可擴展
    既需要創作者的控制又要避免人為的愚蠢行為的來配置游戲AI是一個反復迭代的過程。配置AI需要處理每種可能的情況,試圖第一次就使得AI每種可能都要體現創作者的意圖並且令人信服,這個是非常難的。相反的,需要不斷的反復測試AI,找到最壞的問題,修復並再次測試。
    UNIX和C語言的合作開發者Brian Kernighan曾說過:“ 調試的難度兩倍於一開始的寫代碼。因此,如果你盡可能巧妙地編寫代碼,根據定義,說明你還不具備足夠的智商來調試它 ”。對AI來說更加如此 ,任何代碼的更改都會引起意想不到的副作用,你修改了一個地方的bug或平衡問題,就會導致某個地方更微秒的問題。一個簡單的底層算法意味着你你能更加掌握AI 。最后,你需要更充分的去想象所做改變引起的所有副作用,開發就可以更加的安全和快速,最終結果也會更加完美(玩起來也更加有趣)。
    如果你看了游戲常用的各種決策算法:有限狀態機,腳本,行為樹,基於權重隨機,以及目標導向的行為規划,他們自身的算法都相當的簡單,建立在這些框架上的頂層配置可能更加復雜一些,但底層的代碼是簡單易懂,並且很容易跟蹤和調試的。
    需要警告的是,一些簡單的算法的AI可擴展性是很差的(有限狀態機就是個典型的例子),一些情況下,有限狀態機的轉換數量會隨着狀態數量增加指數級的增長。顯然很快就會失控,因此優雅的架構不光是要簡單易懂,而且還要易於使用,除此之外還要有很好的擴展性。

1.2.4技巧與作弊
    已經說了很多關於AI的東西了,但似乎並不能認定“作弊”是什么。作弊可以讓AI比起玩家更強大一些么?要是給予AI道具來作為額外獎勵呢?或者作弊在策略游戲里給AI經濟上的獎勵,可以更便宜的購買單位?要是允許玩家選擇這個獎勵的大小,並稱之為“困難等級”呢?
    有一個真實的故事,是我最近和暴雪策略游戲的AI組長Bob Fitch的對話中確認的,在原版魔獸爭霸里的劇情AI,會等待固定的一段時間,然后生成一波敵兵單位來攻擊玩家。它會在戰場迷霧的邊緣產生這些敵人單位,也就是在你的士兵單位的可見范圍外,劇本AI會不停的生成敵兵,直到你的防御力量幾乎被摧毀,然后AI就會停止,並讓你用剩余的士兵單位來贏得戰斗。
    這種方法看起來干凈利索的跨過了公平線進入了“欺騙”的領域。AI不需要操心建築,節約開支,或是雇佣單位,只要生成它們想要的就可以了。另外考慮下體驗的結果,不管玩家在游戲中的好壞,它都為玩家創建了一場史詩級的戰斗,會把玩家推向能力的絕對極限,玩家最終會戰勝一切困難,取得勝利。
    當然這種作弊有它黑暗的一面,它只有在玩家不知道內情的情況下工作,如果玩家發現了,那體驗就完全不同了-沒有人喜歡被特殊對待。不幸的是,現今特別是互聯網的出現,玩家比起1994年要難以被愚弄了(寬容也相當少)。
    另外一種作弊方式是純粹信息上的。也就是說AI必須要靠感知到敵兵單位來得知它的存在和位置。而問題在於,用視線做可見性檢查相當容易,但是要記住看到的並用來預測未來的時間就相當難了。也就是說,如果AI看到一個單位,然后它不見了,那如何記得它的存在?如何猜測他的位置?如果后面又看到同樣類型的單位,AI怎么知道他是不是同一個單位?人類是很擅長做這種事的,要做好的話,需要敵人模型的組合,直接以及一些純粹的猜測。這些對計算機來說是並不擅長的。
    不幸的是,對於大多數類型的游戲來說,AI有合理來預測資源的位置,敵人的強壯和位置等事物的能力是相當重要的。如果玩家犯錯就會失敗,這對大多數玩家來說是可以接受的。“沒有發現可以做的事情 ”或者是“這次被你騙了,下次要加倍奉還”,玩家會開始另一個游戲,或者加載存檔,如果有什么挑戰可以把他們拉回到游戲的話。而如果AI犯錯的話,玩家會輕松的取勝,沒有經歷任何重大的挑戰。玩家不會認為是“AI可能運氣不大好”,而是覺得“這個AI太蠢了”。一旦玩家開始認為AI是愚蠢的,你所追求的體驗也就幾乎肯定失去了。
    最后,是否要決定寫一個AI的作弊是相對簡單的事。如果它只是可以改善玩家體驗的話,那應該讓AI可以作弊,但要記住,如果你的AI作弊並被發現的話,這將會改變玩家的體驗,而且通常是負面的。在可汗2這款因為AI而廣受贊譽的RTS游戲里,使用了2個巧妙的作弊,一個方法是給了AI每30秒一次隨機機會可以作弊探索一個我們(開發者)已知找到某些好東西的區域。這樣有助於我們避免游戲里AI在早期找不到足夠資源.。第2種方法是追蹤一個區域的敵人強度的大致數量(但並不知道敵人單位的具體位置)。這樣我們的AI就可以的分配力量來攻擊和防御,並避免AI去做一些徒勞無功的事情。沒有任何人能夠發現這些作弊行為,而且事實上很多的智能行為是賦予給AI的,家感受到的AI的行為,其實只是我們作弊帶來的效果。

1.3總結

    學術AI可以在許許多多的事情上起作用,可以解決困難的問題,再現人類的智慧,對人類的認知建模來了解我們的大腦是如何工作的,優化在復雜運行環境下的性能(例如機器人),或者是一系列極限的挑戰和有價值的追求。所有這些都很困難並值得去做的,但適用於這些的解決方案並不一定就適用於游戲。
    游戲AI應該並且只能是一件事情;允許開發者為玩家創作出引人入勝的體驗,讓玩家可以在游戲中花費時間,並願意去購買擴展包和續作,這也是成功的必然結果。
    本書剩下的部分包含了各種已經在我們的游戲產品中被證明的小竅門,技術和解決方案。游戲開發的時間表很緊湊,當要上市時 如果AI不能很好的工作,也 很少有容錯和擴展的機會。此外,要簡單的創建出令人信服的游戲AI是很有挑戰的。我們沒有時間和意願去解決那些我們並不需要的困難問題,或者去重復開發一些已經被發現的解決方案。有了這些挑戰,希望本書里找到的一些方法也可以為你所用。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM