万维百科粤语版

電子遊戲嘅人工智能本文重定向自 電子遊戲人工智能

食鬼嘅遊戲片段;啲鬼由電腦操控,但曉追捕玩家。

電子遊戲嘅人工智能係指電子遊戲粵拼din6 zi2 jau4 hei3英文video game)當中嘅人工智能粵拼jan4 gung1 zi3 nang4英文artificial intelligence,以下簡稱「AI」):電子遊戲係能夠同玩家互動、以娛樂玩家為目的嘅電腦程式;而電子遊戲入面好多時會涉及由電腦控制,同玩家進行對局嘅角色NPC[1]遊戲開發者為咗想玩家得到樂趣,通常會想呢啲由電腦控制嘅角色有返咁上下聰明,能夠為玩家提供一定嘅挑戰(睇埋心流);噉即係話佢哋會想 NPC 展現一定程度嘅智能-而「教電腦程式做出類似有智能噉嘅行為」正正就係人工智能領域嘅重心[2][3]

舉個簡單例子,食鬼入面嘅敵人由電腦控制,一個教電腦控制啲敵人嘅可能演算法如下[4]

Pac-Man.pos
clyde_target = random_tiles // 將 clyde_target 設做隨機一格

while game == in_play: // 當隻遊戲進行嘅每一個時間點,
    case player of:
      Blinky:  move 1 tile toward Pac-Man.pos // 第一隻鬼要向主角位置(Pac-Man.pos)行一步。
      Inky:    move 1 tile toward (Pac-Man.pos + 4) // 第二隻鬼要向主角位置前四格行一步。
      Clyde:   if Clyde.pos == clyde_target: // Clyde 呢隻鬼要向佢嘅目標位置前進,如果到咗目標位置,揀個新嘅目標位置。
                   clyde_target = (clyde_target + 1) % 10 
               else:
                   move 1 tile toward clyde_target

上述嘅會令啲敵人曉追趕主角-有少少似有智能嘅噉。

早期-廿世紀中-嘅電子遊戲經已有喺度用相對簡單嘅 AI,而廿一世紀初及後,電子遊戲嘅 AI 仲成為咗遊戲製作上嘅一個大課題。遊戲製作嘅專家會研究用乜嘢演算法整一隻遊戲嘅 AI 先最可以令玩家過癮,而且 AI 仲有俾人運用嚟做遊戲測試(game testing;喺隻遊戲出街前測試隻遊戲玩起上嚟點)以及對局配對(matchmaking;喺網上 PvP 遊戲當中、搵若干個玩家、再將佢哋擺喺一個對局嘅過程)等嘅工作[5][6]

基本概念

遊戲程式

內文: 遊戲程式

電子遊戲電腦程式嘅一種,而一個遊戲程式嘅根基係遊戲迴圈(game loop):隻遊戲嘅程式係一個程式迴圈(loop),要係噉重複做同一樣嘅工作(而唔係將個程式啲逐句逐句行一次就算)-呢樣工作就係攞「玩家透過手掣等架生俾嘅輸入」以及「隻遊戲喺上一刻嘅狀態」等嘅資訊,再按呢啲資訊同隻遊戲嘅法則,計遊戲世界下一刻嘅狀態應該係點。一隻電子遊戲大致上可以想像成噉樣(用咗 while 迴圈)嘅虛擬碼[7][8]

 while game is running
   process inputs
   update game world
   generate outputs
 loop

用以下呢段食鬼嘅虛擬碼為例[7]

 while player.lives > 0 當玩家有多過 0 條命嗰陣一路做...
    // Process Inputs
    JoystickData j = grab raw data from joystick 由手掣嗰度探測玩家撳咗乜掣
    
    // Update Game World
    update player.position based on j 基於玩家撳嘅掣,更新玩家角色嘅位置
    foreach Ghost g in world for 每一隻鬼
       if player collides with g 如果玩家撞到嗰隻鬼
          kill either player or g 玩家就死
       else
          update AI for g based on player.position 基於隻鬼嘅 AI,更新佢嘅位置;例子有上面提到嘅演算法。
       end
    loop
    
    // Pac-Man eats any pellets
    ...
    
    // Generate Outputs
    draw graphics 喺熒光幕上面畫相應嘅影像
    update audio ... 同埋整聲效
 loop

遊戲 AI 嘅碼位於 update game world 當中:有好多 PvE 遊戲嘅關卡入面都會有敵人俾玩家打,甚至有啲遊戲會喺 PvP 對局入面有由 AI 控制嘅個體[9];每當個程式更新遊戲世界嘅狀態嗰陣,佢都要估計每個 AI 個體需要採取乜嘢行動-呢啲個體要識探測玩家嘅位置,攻擊玩家,以及對玩家嘅攻擊作出迴避等等-即係話要按照呢啲 AI 嘅運作原理,計出佢哋每個個體喺下一刻會變成乜嘢狀態[10]

人工智能

內文: 人工智能

人工智能(AI)泛指教機械展示有智能行為嘅一類技術,喺電子遊戲業當中好常用:喺實際應用上,好多遊戲都會俾遊戲設計師設計成由玩家負責操控嘅主角打低一啲敵人通過關卡,而呢啲敵人喺美術上通常都會被設成「敵人士兵」等理應有智能嘅物體,所以玩家自然會期望呢啲個體識得或多或少噉展現出智能;喺認知科學(cognitive science)等嘅領域上認為,一個有智能嘅物體至少會曉感知周圍嘅環境,然後按收到嘅資訊同自己嘅目的決定要做出點嘅行為[11]

所以一般嘅遊戲 AI 至低限度會有以下兩大部份:

  • 刺激詮釋器(stimulus interpreter):刺激詮釋器會話俾一個 AI 程式知個遊戲狀態係點;一般嚟講,每個個體敵人都會有個獨立嘅 AI,每個智能會透過刺激詮釋器得到佢哋應該得到嘅資訊(例如一個敵人士兵應該知道佢視線範圍內發生緊乜事),即係話個程式要有方法表示「foreach AI ,嗰個智能手上有乜資訊」[12]
  • 決策系統(decision system):呢個部份嘅碼一般會喺刺激詮釋器嘅碼後面;每一個 AI 都要按手上嘅資訊同自己嘅目的,計出跟住要採取乜嘢行動;例如一個敵人見到玩家,知道玩家嘅位置,而佢目的係要行埋玩家度攻擊佢,佢個 AI 程式就要有個方法教佢點樣用「玩家嘅位置」同「自己嘅位置」(個決策系統嘅輸入)計出「自己應該向乜方向移動」(個決策系統嘅輸出)[12]

攞返上面食鬼嗰個例子,段虛擬碼嘅其中一行 move 1 tile toward Pac-Man.pos 涉及要隻鬼移向主角嘅位置,即係話個程式知道主角嘅位置(Pac-Man.pos),並且直接當隻鬼知道呢個資訊(刺激詮釋器),而隻鬼嘅智能按一條好簡單嘅法則運行-向主角嘅位置移一格(決策系統),喺下刻,遊戲程式就按此知道隻鬼嘅狀態(位置)要點樣改變[4]

啟發法

內文: 啟發法

啟發法(heuristics)係認知科學同相關領域上嘅一個概念,指一啲用嚟解難嘅簡單法則:喺現實生活當中,人類好多時會用一啲過往經驗顯示咗係解到難嘅「認知捷徑」嚟應付佢哋面對嘅問題;舉個例子說明,想像有個人家陣去超市買餸,想買意粉,如果佢想做完全理性嘅決策,(根據理性嘅定義)佢要諗過度過嗮所有有得買嘅意粉牌子,諗出一套基準決定一隻牌子點先算「好」,量度吓每一款有幾能夠滿足佢嘅慾望(價錢貴唔貴、有幾好食等),再用一個效益函數(utility function)計吓邊隻牌子效用最高,而某隻牌子嘅效用可以(例如)用呢條式計:

當中 效益(utility), 係買咗之後淨低嘅錢反映嘅效用, 反映隻牌子有幾好食,而 反映隻牌子有幾健康(假設呢幾個數都可以用同一單位量度)。計咗呢條數之後,嗰個人就要揀效用最高嗰隻牌子,令自己效用最大化;佢又可以就噉揀佢買開嗰隻牌子-「揀我買開嗰隻牌子嘅意粉」就係一個啟發法;呢個啟發法未必可以達到最理想嘅結果-例如可能有一隻好好味、但佢未試過嘅意粉牌子(搞到用呢個啟發法達唔到最高嘅可能效用),但就幫到個人手慳好多時間。喺日常生活當中,人類做嘅經濟決策多數都係用啟發法做嘅-事實係,如果人類吓吓用完全理性嘅方法做決策嘅話,佢哋就要嘥好多時間做運算,喺實際應用上根本唔可行[13]

同一道理,如果要一個遊戲 AI 做完美嘅運算,往往會嘥極大量嘅時間同精神,而且亦有搞到個 AI 唔似現實世界嘅智能嘅憂慮,所以遊戲 AI 嘅設計者一般會用大量嘅啟發法嚟教 AI 解決問題;好似係上面嗰段食鬼碼噉,原則上,個遊戲程式可以寫成(例如)每隻鬼都曉做運算,計算玩家跟住落嚟嗰 50 步嘅概率分佈(跟住落嚟嗰 50 步嘅所有可能性以及每個可能性發生嘅機會率),然後再攞每個可能性,計算喺每個可能性下,自己要用乜嘢移動軌跡,先可以令自己捉到玩家嘅機會率最大化-相比之下,move 1 tile toward Pac-Man.pos(靠近玩家嘅位置)或者 move 1 tile toward (Pac-Man.pos + 4)(靠近玩家位置前四格嘅位置)呢啲解難法則就簡單好多[14]

移動

睇埋:遊戲物理

教 AI 移動嘅演算法係遊戲 AI 嘅基礎之一:除咗好似互動式小說等嘅類型之外,絕大多數嘅遊戲都會包含一個遊戲空間,俾遊戲角色喺個空間入面移動;好似食鬼等嘅早期電子遊戲經已有喺度用演算法教 NPC 點樣探索遊戲空間,而呢個時期用嘅演算法有啲到咗廿一世紀都仲有人用[4]

喺比較簡單嘅情況下,一個電子遊戲 AI 移動演算法會攞遊戲空間入面其他物件嘅運動屬性做輸入,並且用呢啲輸入計出個 AI 角色應該要移去邊個方向或者位置:

  • 輸入:第啲物件或者個 AI 角色本身嘅
 position(位置) # 一個二至三維嘅向量
 orientation(方向) # 一個單一嘅數值
 velocity(速度) # 另一個二至三維嘅向量
 rotation(旋轉) # 一個單一嘅數值
  • 輸出:個 AI 角色跟住落嚟嘅
 acceleration(加速度) # 一個二至三維嘅向量
 force(力) # 另一個二至三維嘅向量

舉個簡單例子,好似係一個教 NPC 避子彈嘅演算法,就通常要有方法俾個 AI 角色知道子彈嘅位置、方向同速度,再計出個 AI 角色應該向自己施一股點嘅,或者有個點嘅加速度,先可以避開粒子彈(有關相關嘅物理學概念,可以睇吓牛頓力學向量[15]

運動學

睇埋:運動學

喺遊戲 AI 上,其中一樣最基本嘅嘢係教 AI 追蹤敵人,例如遊戲敵人追蹤玩家,嘗試接近同攻擊玩家角色。以下係教一個 AI 追蹤(seek)一件物件嘅演算法[16]

class KinematicSeek:
  // Declare 個演算法控制緊邊個角色同要追嘅目標
    character
    target
  // Declare 個角色嘅最大速度
    maxSpeed

  def getSteering():
    // 整個 output 嘅結構
    steering = new KinematicSteeringOutput()

    // 攞個 steering 嘅方向
    steering.velocity = target.position - character.position // 如果將呢個數變成隨機,可以用嚟教個 AI 隨機行嚟行去(wandering)。

    if steering.velocity.length() < radius: // 如果同目標之間嘅距離細過某個特定數值,就唔使郁。
      return none

    // 計出個 exact 嘅速度
    steering.velocity.normalize()
    steering.velocity *= maxSpeed

    // 轉向要郁嘅方向
    character.orientation = getNewOrientation(character.orientation,steering.velocity)

    // 將個 steering 俾做 output
    steering.rotation = 0
    return steering

順帶一提,將 target.position - character.position 改做 character.position - target.position 就可以令段演算法變成教個 AI 避開一件物件[16]

搵路

睇埋:解迷宮演算法

決策

策略同戰術

學習

睇埋:機械學習

相關技術

遊戲設計討論

睇埋:遊戲設計

出名例子

睇埋

  1. "The Next Generation 1996 Lexicon A to Z: NPC (Nonplayer Character)". Next Generation. No. 15. Imagine Media. March 1996. p. 38.
  2. Yannakakis, Geogios N (2012). "Game AI revisited" (PDF). Proceedings of the 9th Conference on Computing Frontiers: 285–292.
  3. Stanley, K. O., Bryant, B. D., & Miikkulainen, R. (2005). Evolving neural network agents in the NERO video game. Proceedings of the IEEE, 182-189.
  4. 4.0 4.1 4.2 Pac-Man.
  5. Lu, F., Yamamoto, K., Nomura, L. H., Mizuno, S., Lee, Y., & Thawonmas, R. (2013, October). Fighting game artificial intelligence competition platform. In 2013 IEEE 2nd Global Conference on Consumer Electronics (GCCE) (pp. 320-323). IEEE.
  6. Delalleau, O., Contal, E., Thibodeau-Laufer, E., Ferrari, R. C., Bengio, Y., & Zhang, F. (2012). Beyond skill rating: Advanced matchmaking in ghost recon online. IEEE Transactions on Computational Intelligence and AI in Games, 4(3), 167-177.
  7. 7.0 7.1 Game Programming Algorithms and Techniques: Overview, p. 2. informIT.
  8. "Programming Linux Games, Chapter 1" (PDF). ISBN 1-886411-48-4.
  9. Titanfall 2 will bring back Attrition mode. Polygon.
  10. Yannakakis, Geogios N (2012). "Game AI revisited" (PDF). Proceedings of the 9th Conference on Computing Frontiers: 285–292.
  11. Belkin, N. J. (1990). The cognitive viewpoint in information science. Journal of information science, 16(1), 11-15.
  12. 12.0 12.1 McShaffry, M. (2014). Game coding complete. Nelson Education. p. 45 - 46.
  13. Slovic, P., Finucane, M., Peters, E., & MacGregor, D. G. (2002). Rational actors or rational fools: Implications of the affect heuristic for behavioral economics. The Journal of Socio-Economics, 31(4), 329-342.
  14. Millington, I. (2019). AI for Games. CRC Press. p. 25.
  15. Millington, I. (2019). AI for Games. CRC Press. p. 42 - 48.
  16. 16.0 16.1 Millington, I. (2019). AI for Games. CRC Press. p. 52 - 53.


本页面最后更新于2020-02-13 00:52,点击更新本页查看原网页

本站的所有资料包括但不限于文字、图片等全部转载于维基百科(wikipedia.org),遵循 维基百科:CC BY-SA 3.0协议

万维百科为维基百科爱好者建立的公益网站,旨在为中国大陆网民提供优质内容,因此对部分内容进行改编以符合中国大陆政策,如果您不接受,可以直接访问维基百科官方网站


顶部

如果本页面有数学、化学、物理等公式未正确显示,请使用火狐或者Safari浏览器