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

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

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

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

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

  • 开发平台:macOS mojave / Linux 

  • 编译器:vs Code / g++

从一个项目开始

一、虚拟的世界

1.1 Bob的一天

假设存在一个虚拟小镇,镇上生活着一个人Bob,镇里有一个矿场(产出金矿),一家银行(存储金矿),一间酒吧(喝酒休息),一间屋子(Bob睡觉的家)。Bob每天要做的事情就是到矿场里挖金矿,口袋里装满金矿后将金子存储到银行里;从银行出来如果钱够了Bob便会回到家里睡觉,若不够则继续到矿场里挖矿;期间只要他渴了就会停下手上的事到酒吧里喝酒,喝完酒之后则继续到矿场里挖矿;Bob睡完觉后,如果渴了则去酒吧喝酒,否则进矿场挖矿。

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

  书中的例子,可怜的Bob一天的生活乏味可陈,但他每一次动作都有着极为明显的变化。Bob不管在哪一种状态中,只要发生了某种动作,一定会改变当前状态,变成另一种状态。

  当然,Bob可能还会存在其他更多的状态和动作,以及这个镇子还会有其他人。但不论怎么增加复杂度,其根本构成都不会变。

  我们将以Bob的一天为基础,在计算机中构建出一个虚拟的小世界,来模拟Bob的生活。

1.2 状态转换图和状态转换表

  首先,我们用状态转换图和状态转换表来建模“Bob的一天”,这样可以更清晰的表示出其中的逻辑流动,有助于梳理逻辑结构,也可以很容易的发现逻辑流上的错误,并改正过来。

图1 Bob的一天

  从图1里我们可以知道,Bob存在四种状态,以及几种改变状态的动作(条件):

图2 Bob的状态转换表,左边为当前状态,上面为转换状态,中间为条件(动作)

  有了清晰的逻辑流,我们就可以借助c/c++编程语言,在计算机中模拟出“Bob的一天”。

1.2 一个完整的例子

图3 Bob的一天

  当然,具体的实现中,我们有许多其他的工作需要做,比如说采用什么样的设计模式,一个状态要持续多久,转换状态的条件要如何达成,等等。

  这些我们将留到之后的章节详细的讲解。

参考: 

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

  •  维基百科

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

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

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