有限状态机时代终结的10大理由
有限狀態(tài)機(jī)時(shí)代終結(jié)的10大理由
作者:alexjc
譯者:賴勇浩(戀花蝶)
原文地址:http://aigamedev.com/questions/fsm-age-is-over
本文最初發(fā)表于戀花蝶的博客(http://blog.csdn.net/lanphaday),如蒙轉(zhuǎn)載,敬請保留全文完整,包括本聲明。
經(jīng)過幾個(gè)月的發(fā)展, AiGameDev.com形成了一個(gè)小有氣候的社區(qū),謝謝大家支持!每個(gè)周五,我將抽出時(shí)間來回答大家的問題,你可以在blog和論壇 上提問。
有限狀態(tài)機(jī)在過去十年里變得非常流行,游戲開發(fā)者用它開發(fā)了很多極具趣味的游戲。但再好的事情也有個(gè)結(jié)束,是否到了使用比 FSM更好的技術(shù)來完成 AI 邏輯的時(shí)代了?
本周的問題是一個(gè)評論,erm@duh.org提出了一個(gè)與周三的教程系列有關(guān)的有趣話題,讓我把它改得更有建設(shè)性一些:
?“據(jù)我所知很多領(lǐng)域(如游戲業(yè)界)都使用有限狀態(tài)機(jī)來實(shí)現(xiàn)游戲 AI。為什么你不用它來實(shí)現(xiàn)這個(gè)模擬游戲里的狗的行為?”
這個(gè)教程使用行為樹來體現(xiàn)它與狀態(tài)機(jī)的不同,而且游戲 AI開發(fā)者也能夠從中得到分級邏輯的好處。
當(dāng)然我們也可以用有限狀態(tài)機(jī)(FSM)來構(gòu)建相同的行為。但業(yè)內(nèi)人士都知道這一技術(shù)在邏輯增長時(shí)有多么有脆弱。遠(yuǎn)離 FSM 是避免游戲項(xiàng)目變得一塌糊涂的選擇!
非正統(tǒng)
問題: 構(gòu)建 FSM 的方式對于不同的軟件工程師而言是完全不同的流程。是的,概念上它是“設(shè)計(jì)師友好”的,但實(shí)際上應(yīng)用 FSM 需要應(yīng)用非常多的編程知識和細(xì)節(jié)。
原因: FSM 要求每一個(gè)狀態(tài)明確地轉(zhuǎn)換到另一狀態(tài)。沒有一個(gè)編程語言需要這樣,語言本身的語義就隱含了所有轉(zhuǎn)換(如C++編譯器從語句構(gòu)造執(zhí)行指令序列)。
過于底層
問題: 編輯FSM的邏輯非常底層,而且機(jī)械性十足。我們常常會發(fā)現(xiàn)自己總是在構(gòu)建相似的行為,而且這會花費(fèi)我們大部分時(shí)間。
原因: 我們所能做的僅是編輯從一狀態(tài)到另一狀態(tài)的轉(zhuǎn)換,而無法做出更高層次的模式導(dǎo)致頻繁重復(fù)相似的序列或條件。有限狀態(tài)機(jī)的世界不存在元編程(Meta-programming)。
邏輯受限
問題: 有限狀態(tài)機(jī)形式固定,從而導(dǎo)致計(jì)算受限(又稱為非圖靈完備)。這意味著我們不能像計(jì)數(shù)一樣做事。
原因: 如果我們把事件當(dāng)作符號,我們只能用有限狀態(tài)自動(dòng)機(jī)識別正則文法,這一方法下一個(gè)正則表達(dá)式不能識別某些類別的文本模式。同樣,有限狀態(tài)機(jī)僅能作為正則語言的傳感器。
需要自定義擴(kuò)展
問題: 游戲開發(fā)者在實(shí)踐中經(jīng)常需要擴(kuò)展 FSM 才能將其用于項(xiàng)目,然而這并不容易被理解,甚至還缺乏文檔。這是與FSM的學(xué)術(shù)基礎(chǔ)并不相同。
原因: 因?yàn)?FSM 受限于理論,開發(fā)者必須自行增加功能擴(kuò)展以實(shí)現(xiàn)確定的某些特性。這意味著要用編程語言去實(shí)現(xiàn)計(jì)數(shù)器、計(jì)時(shí)器和任何形式的內(nèi)存對象。
難以標(biāo)準(zhǔn)化
問題: 不像規(guī)劃器(HTN)或搜索算法(A*),它們能用相關(guān)的通用方法實(shí)現(xiàn)。而 FSM 則非常難以在不同的游戲間重用,甚至在引擎是不同的部分重用也不可能。
原因: 因?yàn)?FSM 是非圖靈完備的, FSM 需要為每一問題自定義特定的解決方案。這使得它們適用度極低,而不像腳本語言一樣能夠很容易地重新打包。
非自主的
問題: 使用 FSM 實(shí)現(xiàn)目標(biāo)導(dǎo)向的行為需要做很多工作。這是一個(gè)大問題,因?yàn)榇蟛糠钟嗅槍π缘?AI 需要處理長遠(yuǎn)目標(biāo)。
原因: FSM 運(yùn)作于反應(yīng)模式,只能處理事件和觸發(fā)跳轉(zhuǎn)。它們無法自動(dòng)向前(又稱為自主),因此我們必須為所有不同的目標(biāo)手動(dòng)轉(zhuǎn)換。
難以并發(fā)
問題: FSM 難以并發(fā)。當(dāng)并行運(yùn)行多個(gè)狀態(tài)機(jī),要么死鎖,要么我們通過手工編輯來確保它們在某個(gè)程度上能夠兼容。
原因: FSM 存儲的信息越多在處理外部資源沖突上的問題就越多。使?fàn)顟B(tài)機(jī)并發(fā)的解決方案通常是擴(kuò)展 FSM 自身,把它作為支持邏輯或一套工具來保證并發(fā)安全。
大規(guī)模支持較差
問題: 有限狀態(tài)機(jī),甚至是分層的,也難以大規(guī)模擴(kuò)展。它們往往是在其中夾雜一大塊邏輯代碼,而非行為編輯模塊化。
原因: FSM 并不利用編程語言提供的用以解決大問題的規(guī)模化特性,同樣地FSM 也難以同步多個(gè)行為模塊。
勞動(dòng)密集型
問題: 用 FSM 實(shí)現(xiàn)任何設(shè)計(jì)都需要做大量工作。甚至狀態(tài)機(jī)本身也有著無數(shù)問題。
原因: 如前所述,應(yīng)對所有挑戰(zhàn)需要花費(fèi)設(shè)計(jì)師的大量時(shí)間,甚至最終這還會成行為中的 bugs的來源!
行業(yè)進(jìn)步
事實(shí): 許多資深游戲開發(fā)者已經(jīng)不再使用有限狀態(tài)機(jī),而是使用行為樹之類的可替換方案。
事實(shí): 現(xiàn)在多個(gè)游戲 AI 中間件提供商致力于規(guī)劃器實(shí)現(xiàn)的 AI,在 2008 年將會見到更多可用的此類產(chǎn)品。
結(jié)論
FSM,就像其它技術(shù)一樣,在游戲開發(fā)的進(jìn)程中占有了應(yīng)得的一席之地。然而,開發(fā)者默認(rèn)使用有限狀態(tài)機(jī)來實(shí)現(xiàn) AI的時(shí)代,已經(jīng)行將結(jié)束。帶有協(xié)程的腳本在今天已經(jīng)極其流行,而分級規(guī)劃器將越來越多地應(yīng)用在游戲及其中間件。
有問題不明白?請教Google大神吧!總結(jié)
以上是生活随笔為你收集整理的有限状态机时代终结的10大理由的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FSM(状态机)、HFSM(分层状态机)
- 下一篇: IGMP技术总结