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

2021-05-23 23:54:08 字數 2427 閱讀 4440

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

譯者:賴勇浩(戀花蝶)

本文最初發表於戀花蝶的部落格(http://blog.csdn.net/lanphaday

經過幾個月的發展,aigamedev.com 形成了乙個小有氣候的社群,謝謝大家支援!每個周五,我將抽出時間來回答大家的問題,你可以在 blog 

和論壇上提問。

有限狀態機在過去十年裡變得非常流行,遊戲開發者用它開發了很多極具趣味的遊戲。但再好的事情也有個結束,是否到了使用比fsm 更好的技術來完成ai 邏輯的時代了?

本週的問題

「據我所知很多領域(如遊戲業界)都使用有限狀態機來實現遊戲ai。為什麼你不用它來實現這個模擬遊戲裡的狗的行為?」

這個教程使用行為樹來體現它與狀態機的不同,而且遊戲ai 開發者也能夠從中得到分級邏輯的好處。

當然我們也可以用有限狀態機(fsm)來構建相同的行為。但業內人士都知道這一技術在邏輯增長時有多麼有脆弱。遠離fsm 是避免遊戲專案變得一塌糊塗的選擇!

非正統

問題: 構建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 的時代,已經行將結束。帶有協程的指令碼在今天已經極其流行,而分級規劃器將越來越多地應用在遊戲及其中介軟體。

有限狀態機

有限狀態機 finite state machine,fsm 又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。狀態儲存關於過去的資訊,就是說 它反映從系統開始到現在時刻的輸入變化。轉移指示狀態變更,並且用必須滿足來確使轉移發生的條件來描述它。動作是在給...

有限狀態機

以前,只碰到過 陣列中所有數字只出現2次,只有乙個出現1次,找這個數的問題 每次迴圈異或陣列中元素,最後的結果就是single one。這次換作出現3次就懵逼了,主要原因,沒有使用過有限狀態機,應該說是連概念都沒有,所以這次一定要好好記錄一下 關於這道題的解釋discussion中woshidais...

有限狀態機

需要掌握的名詞 數字系統有兩大類有限狀態機 finite state machine,fsm moore狀態機和mealy狀態機。狀態機名 次態輸出 moore摩爾 f 現狀,輸入 g 現狀 mealy公尺粒 f 現狀,輸入 g 現狀,輸入 mealy型狀態機 下一狀態不但與當前狀態有關,還與當前輸...