有限状态机 FSM 是什么?

状态机(有限状态自动机 FSM)介绍以及常用状态机种类对比 状态机概念, 为什么要使用状态机 阅读详情

定义

有限状态机(Finite-state machine)是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。1

特征

简单说,它有三个特征2:

  • 状态总数(state)是有限的。
  • 任一时刻,只处在一种状态之中。
  • 某种条件下,会从一种状态转变(transition)到另一种状态。

几个重要概念3

  • 状态(State):表示对象的某种形态,在当前形态下可能会拥有不同的行为和属性。
  • 转移(Transition):表示状态变更,并且必须满足确使转移发生的条件来执行。
  • 动作(Action):表示在给定时刻要进行的活动。
  • 事件(Event):事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态。

状态机的要素1

状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:

  • 现态:当前所处的状态。
  • 条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。
  • 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。
  • 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。

我们可以用状态表了表示整个过程,如下图所示。

状态表

img

注意的问题

避免把某个“程序动作”当作是一种“状态”来处理1

那么如何区分“动作”和“状态”?“动作”是不稳定的,即使没有条件的触发,“动作”一旦执行完毕就结束了;而“状态”是相对稳定的,如果没有外部条件的触发,一个状态会一直持续下去。

例子

游戏

有限状态机用来编游戏和故事是最好的了。4
这有一个寻宝游戏,首先你从‘开始’出发,然后你跟随箭头知道你到达终点。

在这里插入图片描述

褒扬和批判

游戏开发

在游戏开发中使用状态机显然不失为一种不错的选择,首先它的概念并不复杂,其次它的实现也十分简单而直接。但它的缺点却也十分明显,例如难以复用,因为它往往需要根据具体的情况来做出反应,当然当状态机的模型复杂到一定的程度之后,也会带来实现和维护上的困难。3

更多

参考:5

代码相关:2

对JavaScript的意义在于,很多对象可以写成有限状态机。

参考


  1. 深入浅出理解有限状态机 - 简书 ↩︎ ↩︎ ↩︎

  2. JavaScript与有限状态机 - 阮一峰的网络日志 ↩︎ ↩︎

  3. 趣说游戏AI开发:对状态机的褒扬和批判 - Runtime - SegmentFault ↩︎ ↩︎

  4. Programming Basics: 有限状态机 ↩︎

  5. 有限状态机 - 维基百科,自由的百科全书 ↩︎

有限状态机FSM详解(一) 有限状态机在维基百科中的解释是: 有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 至于为什么要学FSM,FSM可以把模型的多状态、多状态间的转换条件解耦。可以使维护变得容易,代码也更加具有可读性,也更加艺术。 理解有限状态机首先需要理解整个模型。我们把灯的开关作为示例,... 阅读详情

相关推荐

【算法】有限状态机FSM

使用C++实现一套简单的状态机模型——实例:https://fangliang.blog.youkuaiyun.com/article/details/44042287 使用C++实现一套简单的状态机模型——原理解析:https://fangliang.blog.youkuaiyun.com/article/details/44120809

我的笔记本 4035

FSM(有限状态机)

本文介绍FSM(有限状态机),以及如何引用、解决问题案例

SjiaM的博客 1万+

【有限状态机】- FSM详细讲解 【附Autoware有限状态机模型代码讲解】

本文详细介绍了有限状态机的三种实现方式:分支、状态模式、查表法

BigDavid123的博客 6450

算法-有限状态机FSM详解及其实现

有限状态机FSM详解及其实现 有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态。任何一个FSM都可以用状态转换图来描述,图中的节点表示FSM中的一个状态,有向加权边表示输入字符时状态的变化。如果图中不存在与当前状态与输入字符对应的有向边,则FSM将进入“消亡状态(Doom State)”,此后FSM将一直保持“消亡状态”。状态转换图中还有两个特殊状态:状态1称为“起

cxu123321的博客 5415

【Unity 笔记】有限状态机 FSM

【Unity】 有限状态机 FSM 游戏引擎:Unity 版本:2019.4.6f1 【2017版本以上均可】 编译平台:Visual Studio 2019   一、什么是FSM   FSM 全名 [Finite State Machine]。中文名 [有限状态机],又称 [有限状态自动机],简称 [状态机]。 1.1 了解Animator组件   Unity为我们提供了Animator组件,便利开发者更加自主的实现更多动画的控制方式。   快捷链接:Unity Animator官方文档介绍 2.2 有

Mr.River的博客 1851

有限状态机(Finite State Machine, FSM)详解

本篇博客将详细介绍 FSM 的概念、基本组成、应用场景,以及如何在。,帮助开发者组织复杂的状态切换,使代码更清晰、可维护。是最常见的 AI 逻辑控制方式之一。FSM 是游戏开发中最常用的状态管理工具,适用于。掌握 FSM,能让你的游戏角色更具智能化!,使 AI 具有逻辑性和可控性。在 Unity 中,我们可以通过。有限状态机(FSM)是一种。组件中,我们可以使用。

weixin_42216813的博客 3080

有限状态机(FSM)

ScriptObject实现fsm

m0_52021450的博客 1万+

FSM 有限状态机框架

FSM 有限状态机框架 State using UnityEngine; using System.Collections.Generic; using System; namespace FSM_Frame { //状态 public class State { #region Constructor 构造 public State(string stateName){ this.stateName =

SaitamaTeacher的博客 562

有限状态机(FSM)的设计与实现(一)

有限状态机(FSM)是表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用。通常FSM包含几个要素:状态的管理、状态的监控、状态的触发、状态触发后引发的动作。本文主要阐述一下状态机的几种设计方法。 1:switch case/if else设计方法 curEvent = getEvent(); curState = getCurState(); swi...

weixin_30477293的博客 535

自动驾驶决策算法 —— 有限状态机 FSM

有限状态机(FSM)是自动驾驶决策层的核心算法之一,通过离散状态描述车辆行为。其核心思想是"在不同状态下执行不同动作,并根据事件触发状态切换"。FSM由状态集合、事件集合、动作集合和状态转移函数组成,适用于高速公路巡航、变道、避障等场景。相比行为树和规则引擎,FSM具有高可读性但灵活性较低。设计时需明确场景需求、定义状态集合、提取触发事件并制定转移规则。为防止状态爆炸,可采用层次化FSM或模块化设计。典型的应用包括高速公路巡航决策和变道控制,通过状态转移实现安全驾驶。FSM为自动驾驶提供

swaggytiger的博客 2012

【CubeMX】STM32G474 HRTIM 互补PWM与死区时间配置实战

本文详细介绍了如何使用STM32CubeMX配置STM32G474的高分辨率定时器HRTIM生成互补PWM波形并精确设置死区时间。通过实战步骤讲解时钟配置、死区计算与高级功能,帮助工程师在电机驱动和电源应用中实现精准控制,避免上下桥臂直通风险。

grpc6streamer的博客 728

有限状态机FSM

有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态。任何一个FSM都可以用状态转换图来描述,图中的节点表示FSM中的一个状态,有向加权边表示输入字符时状态的变化。如果图中不存在与当前状态与输入字符对应的有向边,则FSM将进入“消亡状态(Doom State)”,此后FSM将一直保持“消亡状态”。状态转换图中还有两个特殊状态:状态1称为“起始状态”,表示FSM的初始状态。

程序狗的成长之路 1458

Modbus TCP 通信(C#)

【代码】Modbus TCP 通信(C#)

weixin_56229359的博客 1150

有限状态机FSM的理解

有限状态机FSM思想广泛应用于硬件控制电路设计,也是软件上常用的一种处理方法(软 件上称为FMM--有限消息机)。它把复杂的控制逻辑分解成有限个稳定状态,在每个状态 上判断事件,变连续处理为离散数字处理,符合计算机的工作特点。同时,因为有限状 态机具有有限个状态,所以可以在实际的

lisa0220的专栏 3751

Arduino开发实例-EMG 肌肉信号传感器

在医学研究中,测量肌肉的活动、收缩和扩张非常重要。 EMG 肌肉传感器测量肌肉活动并产生信号以显示扩张和收缩量。 因此,输出取决于所选肌肉的活动量。 3 绿色、红色和黄色电极连接到模块,用于传输来自肌肉运动的电信号。

视觉与物联智能 1699

天气预测模型:基于时间序列分析的数学建模与实战案例

目录引言时间序列分析介绍使用Matlab进行天气预测实战案例:天气预测结论天气预测一直是气象学和相关领域的重要研究问题之一。数学建模是进行天气预测的有效方法之一,其中时间序列分析是常用的技术。在本篇博客中,我们将介绍时间序列分析的基本原理,演示如何使用Matlab进行模型建立和预测,并通过一个实战案例来展示模型的应用和分析。时间序列分析是一种用于分析和预测时间序列数据的统计方法。天气数据通常具有时间依赖性和随机性,因此时间序列分析可以帮助我们了解天气的变化趋势和规律,并提供对未来天气的预测。时间序列分析通常

YOLO 1546

有限状态机(FSM)golang的实现

有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态。任何一个FSM都可以用状态转换图来描述,图中的节点表示FSM中的一个状态,有向加权边表示输入字符时状态的变化。如果图中不存在与当前状态与输入字符对应的有向边,则FSM将进入“消亡状态(Doom State)”...

weixin_42117918的博客 4249

windows 应用爬虫: exe自动操作

之前写了那么多关于手机和网页爬取,今天就写一期关于exe的爬取,exe的爬取其实也是类似的,一个方式是抓包,还有一个模拟人工界面获取元素数据。抓包肯定是最直接,数据也是最全的, 有些数据不一定会显示在界面上,或者必须通过一定交付方式,才能显示到页面(比如移动鼠标到具体元素上)。本文依旧采用python方式,先说说怎么通过界面方式驱动应用点击和数据获取。

youbingchen的博客 888

Go语言 有限状态机FSM

有限状态机又简称FSM(Finite-State Machine的首字母缩写)。这个在离散数学里学过了,它是计算机领域中被广泛使用的数学概念。是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。编译原理学得好的童鞋应该对FSM不陌生,因为编译器就用了FMS来做词法扫描时的状态转移。 FSM的概念在网上一搜可以搜一大堆出来,但估计您也看不大明白。本文将以不一样的方式来讲述FSM的概

Sunface撩技术 5777

最新Codex接入DeepSeek官方API教程(无需cc-switch)

最新Codex接入DeepSeek官方API教程(无需cc-switch)

猿小白的博客 957

linux内核协议栈 TCP选项之SACK选项概述

目录 1SACK概述 1.1 SACK允许选项 1.2 SACK选项 2SACK允许选项的发送 2.1 SYN段发送 2.2 接收SYN段 2.2.1 struct tcp_options_received 2.2.2 tcp_parse_options() 2.3 发送SYN+ACK段 3D-SACK 1SACK概述 标准的TCP确认机制中,如果发送方发送了0-1000序号之间的数据,接收方收到了0-100、300-1000,那么接收方只能向发送方确认101,这时发送方会重...

2732
上一篇: 有哪些好的 Python 的在线学习资源?
下一篇: 用 PlantUML 像 MarkDown 标记语言般画 UML 图
DataAlchemist
博客等级 码龄7年 1粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值