欢迎光临散文网 会员登陆 & 注册

基础 | 简单的智能体----有限状态机(一)

2020-02-29 19:53 作者:有木乘舟  | 我要投稿

本系列为笔者初学c/c++和游戏AI开发的学习经历,练习为主,不涉及到具体的游戏开发软件学习(如unity,虚幻4等),适合刚入门的小伙伴一起学习探讨,欢迎在评论区留下意见。

  • 开发语言:c/c++ (11及以上)

  • 开发平台:macOS mojave / Linux

  • 编译器:vs Code / g++

介绍

  有限状态机(finite-state machine,FSM)是表示有限个状态在以及在这些状态之间的转移和动作等行为的数学模型。图灵机也是一种有限状态机。

  好在于,对游戏开发人员来说,不需要过分纠结于数学上的严格定义,我们只需要掌握这样一个概念即可:有限状态机,是指把一个对象的行为分解成易于处理的“块”或状态。

  简单的如家里墙上控制灯的开关,它有两种状态:开或关。两种状态之间的转换通过我们的手指的输入产生。

一个电灯开关是一个有限状态机

  稍微复杂的可以用一个状态转换表来描述,其中每个状态可视为一个分离的对象:

游戏里一只史莱姆可能具有的状态

  上图中,当一只史莱姆接受到刺激(即遇到某个条件),会发生状态转换,从一种状态变成另外一种状态。比如一只被攻击的史莱姆在逃跑时(状态1),发现玩家没有继续攻击(条件-->安全),会停止逃跑开始在领地里巡逻(状态2)。

  尽管如今游戏AI领域有更专业更复杂的智能体结构,但熟练掌握FSM对我们理解更复杂的模型有很大帮助,且FSM在游戏开发领域仍有很大作用,原因在于它有几大优点:

  • 编程快速简单:从最简单的 if-then 形式,到单例模式,每种编程语言都能够快速实现一个FSM。

  • 易于调试:每个状态单独分离出来作为“块”来管理,这样当哪里出现问题时,可以快速定位出错的位置,也可以快速修改。

  • 较少的计算开销:有限状态机属于“硬编码”范畴,本质上是 if-this-then-that 类型,规则已经事先写好,不需要额外的计算。

  • 基于直觉:我们总能很自然的联想到我们自己总是处于一系列的状态中,并且习惯性的把状态的转换归结为一个又一个“选择”。选择使我们改变当前状态,进入另一种状态。

  • 灵活性:在游戏开发中,开发人员可以根据需求灵活的调整FSM的结构,增加或删除某些状态。

  当然,现实中的事物并非如此简单的处在某一种独立的状态中,但是作为入门学习,不用去思考这么多。同时,我们也需要认识到,有限状态机的局限性:

  • 区分“动作”和“状态”:状态描述了一个对象一种稳定而持续的行为,如果没有外部“条件”的输入,则该状态不会改变;动作则是不稳定的,一旦执行完毕就会自动结束,不会长时间存在。

  • 状态和状态之间是相互独立的,这对构建更真实的智能体是极大的阻碍。

参考:

  1. 《游戏人工智能编程案例精粹》

  2.  维基百科

相关代码下载:https://github.com/linpeijie/GameToy/tree/master/GameAI/FSM


基础 | 简单的智能体----有限状态机(一)的评论 (共 条)

分享到微博请遵守国家法律