有限状态机时代终结的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大神吧!
相关文章
相关标签/搜索