有限狀態機時代終結的10大理由

做者:alexjc正則表達式

譯者:賴勇浩(戀花蝶)算法

原文地址:http://aigamedev.com/questions/fsm-age-is-over編程

本文最初發表於戀花蝶的博客(http://blog.csdn.net/lanphaday),如蒙轉載,敬請保留全文完整,包括本聲明。安全

通過幾個月的發展, AiGameDev.com 造成了一個小有氣候的社區,謝謝你們支持!每一個週五,我將抽出時間來回答你們的問題,你能夠在 blog 論壇 上提問。併發

有限狀態機在過去十年裏變得很是流行,遊戲開發者用它開發了不少極具趣味的遊戲。但再好的事情也有個結束,是否到了使用比 FSM 更好的技術來完成 AI 邏輯的時代了?編程語言

本週的問題是一個評論,erm@duh.org提出了一個與週三的教程系列有關的有趣話題,讓我把它改得更有建設性一些:模塊化

 「據我所知不少領域(如遊戲業界)都使用有限狀態機來實現遊戲 AI。爲何你不用它來實現這個模擬遊戲裏的狗的行爲?」工具

這個教程使用行爲樹來體現它與狀態機的不一樣,並且遊戲 AI 開發者也可以從中獲得分級邏輯的好處。spa

固然咱們也能夠用有限狀態機(FSM)來構建相同的行爲。但業內人士都知道這一技術在邏輯增加時有多麼有脆弱。遠離 FSM 是避免遊戲項目變得一塌糊塗的選擇!.net

非正統

問題: 構建 FSM 的方式對於不一樣的軟件工程師而言是徹底不一樣的流程。是的,概念上它是「設計師友好」的,但實際上應用 FSM 須要應用很是多的編程知識和細節。

緣由: FSM 要求每個狀態明確地轉換到另外一狀態。沒有一個編程語言須要這樣,語言自己的語義就隱含了全部轉換(如C++編譯器從語句構造執行指令序列)。

過於底層

問題: 編輯FSM的邏輯很是底層,並且機械性十足。咱們經常會發現本身老是在構建類似的行爲,並且這會花費咱們大部分時間。

緣由: 咱們所能作的僅是編輯從一狀態到另外一狀態的轉換,而沒法作出更高層次的模式致使頻繁重複類似的序列或條件。有限狀態機的世界不存在元編程(Meta-programming)。

邏輯受限

問題: 有限狀態機形式固定,從而致使計算受限(又稱爲非圖靈完備)。這意味着咱們不能像計數同樣作事。

緣由: 若是咱們把事件看成符號,咱們只能用有限狀態自動機識別正則文法,這一方法下一個正則表達式不能識別某些類別的文本模式。一樣,有限狀態機僅能做爲正則語言的傳感器。

須要自定義擴展

問題: 遊戲開發者在實踐中常常須要擴展 FSM 才能將其用於項目,然而這並不容易被理解,甚至還缺少文檔。這是與FSM的學術基礎並不相同。

緣由: 由於 FSM 受限於理論,開發者必須自行增長功能擴展以實現肯定的某些特性。這意味着要用編程語言去實現計數器、計時器和任何形式的內存對象。

難以標準化

問題: 不像規劃器(HTN)或搜索算法(A*),它們能用相關的通用方法實現。而 FSM 則很是難以在不一樣的遊戲間重用,甚至在引擎是不一樣的部分重用也不可能。

緣由: 由於 FSM 是非圖靈完備的, FSM 須要爲每一問題自定義特定的解決方案。這使得它們適用度極低,而不像腳本語言同樣可以很容易地從新打包。

非自主的

問題: 使用 FSM 實現目標導向的行爲須要作不少工做。這是一個大問題,由於大部分有針對性的AI 須要處理長遠目標。

緣由: FSM 運做於反應模式,只能處理事件和觸發跳轉。它們沒法自動向前(又稱爲自主),所以咱們必須爲全部不一樣的目標手動轉換。

難以併發

問題: FSM 難以併發。當並行運行多個狀態機,要麼死鎖,要麼咱們經過手工編輯來確保它們在某個程度上可以兼容。

緣由: FSM 存儲的信息越多在處理外部資源衝突上的問題就越多。使狀態機併發的解決方案一般是擴展 FSM 自身,把它做爲支持邏輯或一套工具來保證併發安全。

大規模支持較差

問題: 有限狀態機,甚至是分層的,也難以大規模擴展。它們每每是在其中夾雜一大塊邏輯代碼,而非行爲編輯模塊化。

緣由: FSM 並不利用編程語言提供的用以解決大問題的規模化特性,一樣地FSM 也難以同步多個行爲模塊。

勞動密集型

問題: 用 FSM 實現任何設計都須要作大量工做。甚至狀態機自己也有着無數問題。

緣由: 如前所述,應對全部挑戰須要花費設計師的大量時間,甚至最終這還會成行爲中的 bugs 的來源!

行業進步

事實: 許多資深遊戲開發者已經再也不使用有限狀態機,而是使用行爲樹之類的可替換方案。

事實: 如今多個遊戲 AI 中間件提供商致力於規劃器實現的 AI,在 2008 年將會見到更多可用的此類產品。

結論

FSM,就像其它技術同樣,在遊戲開發的進程中佔有了應得的一席之地。然而,開發者默認使用有限狀態機來實現 AI 的時代,已經行將結束。帶有協程的腳本在今天已經極其流行,而分級規劃器將愈來愈多地應用在遊戲及其中間件。

有問題不明白?請教Google大神吧!
相關文章
相關標籤/搜索