什么是状态机?一篇文章就够了

article/2025/9/29 17:46:29

1 概述

状态机[1]一般指有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机(英语:finite-state automaton,缩写:FSA),是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。有限状态机是在自动机理论和计算理论中研究的一类自动机。如下图所示,有限状态机归属于自动机理论范畴,从下面的自动机理论的领域分层图可以看出,越往外层,概念越复杂。

 

状态机中有几个术语:state(状态) 、transition(转移) 、action(动作) 、transition condition(转移条件) 。

  • state(状态) :将一个系统离散化,可以得到很多种状态,当然这些状态是有限的。例如:门禁闸机可以划分为开启状态、关闭状态;电扇可以划分为关、一档、二档、三档等状态。

  • transition(转移) :一个状态接收一个输入执行了某些动作到达了另外一个状态的过程就是一个transition(转移)。定义transition(转移)就是在定义状态机的转移流程。

  • transition condition(转移条件) :也叫做Event(事件),在某一状态下,只有达到了transition condition(转移条件),才会按照状态机的转移流程转移到下一状态,并执行相应的动作。

  • action(动作):在状态机的运转过程中会有很多种动作。如:进入动作(entry action)[在进入状态时进行]、退出动作(exit action)[在退出状态时进行]、转移动作[在进行特定转移时进行]。

如下图,就定义了一个只有opened 和closed两种状态的状态机。当系统处于opened状态,在收到输入“关闭事件”,达到了状态机转移条件,系统就转移到了closed状态,并执行相应的动作,此例有一个进入动作(entry action),进入closed状态,会执行close door动作。

 

有限状态机在很多不同领域被广泛应用,包括电子工程、语言学、计算机科学、哲学、生物学、数学和逻辑学。在计算机科学中,有限状态机被广泛用于建模硬件电路系统设计软件工程编译器网络协议、和计算与语言的研究。

 

2 分类

有限状态机可以被分为不同的类型,主要可以被分为:acceptors(接收器)transducers(转换器) 两大类。

2.1 acceptors(接收器)

acceptors(接收器) 是指产生一个二值的输出,指示接收的输入是否能被接受。acceptors(接收器)的每一种状态都是接受或不接受的。如果一组所有的输入都被接受并且当前的状态是接受状态,那么这一组输入就是可接受的。有限状态机的acceptors(接收器)这一类在正则引擎的实现中用得非常多。

如下图是一种acceptors(接收器) 类型有限状态机,用来识别所输入的字符串是否为nice,其总共被划分为了七种状态,其中只有第七种状态Success被认为是可接受状态。如果所输入的字串不是nice,则会被转移到第六种状态Error

 

如下给出acceptors(接收器) 的数学形式化定义,acceptors(接收器) 型有限状态机是一个五元组(\tiny \sum,S,s_{0},\delta,F),其中:

  • \tiny \sum是输入字符集合(有限的非空符号集合); 

  • S是有限非空状态集合;

  • s_{0}是初始状态,属于中的元素; 

  • \delta是状态转移函数:\delta:S\times\tiny \sum \rightarrow S; 

  • F是最终状态集合,是S的子集.

2.2 transducers(转换器)

transducers(转换器) 是根据当前的状态和(或)给定的输入产生输出,输出的同时可能也伴随着状态的转移(不是必须)。在一些事件驱动型应用和计算语言学(computational linguistics)领域应用普遍。transducers(转换器) 型有限状态机可以分为两种子类型,moore machine (摩尔型有限状态机)mealy machine (米利型有限状态机) ,其中:

  • 若输出只和状态有关而与输入无关,则称为moore状态机

  • 输出不仅和状态有关而且和输入有关系,则称为mealy状态机

2.2.1 moore状态机:

如下所示的状态机为moore状态机,其有q0、q1、q2、q3四个状态,X,Y,Z三个输入,a、b、c三个输出。可以看出其四个状态q0、q1、q2、q3对应的输出分别为b、a、a、c,就是说输出已经和状态绑定好,不管输入为哪一个,均不影响输出。其中q0为初始状态,假设输入为XYZY,可以看出输出为bcac;假设输入为ZXYZ,则输出为baca,可以看出,虽然输出只和状态有关而与输入无关,但改变输入的序列顺序,输出序列也会改变。

 

2.2.2 mealy状态机:

mealy状态机与输出只依赖于机器当前状态的moore状态机不同,它的输出与当前状态和输入都有关。但是对于每个mealy状态机都有一个等价的moore机。如下所示为一个简单的mealy状态机,它有一个输入和一个输出。在每一个有向边上,标注出了输入(红色)和输出(蓝色)。这个状态机的初始状态为Si,当输入为0,输出0,状态变为S0,接着输入0,输出0,状态还是为S0,在此状态下一直输入0,输出会一直是0,当输入为1时,输出才为1,状态变为S1,在此状态再接着输入1,输出一直还是0,直到遇到输入为0,输出才变为1。此状态机其实实现了一个边缘触发检测器,每次输入从1到0或是从1到0发生跳变时,输出为1否则输出为0。如下所示时序图,当输入为0111001110时,输出为0100101001

 

3 应用

以日常生活中最常见的电风扇为例,来讨论状态机的应用问题。如下图所示,电风扇有4个按钮,分别是关、弱档、中档和强档,关按钮负责关闭电风扇,也就是停止电风扇的转动;而弱档、中档和强档都可以让电风扇开启,其各档所对应的风扇转动的速度不一样。

可以将按下四个按钮所对应的效果定义四种状态,分别为关机弱风中风强风,另外,外加一个故障状态,总共五种状态。如下为电风扇的状态图转移图,其可能的输入事件为 [按下“关”][按下“弱][按下“中”][按下“强”][出现异常]。在状态转移的过程中,肯定有动作的执行,如从关机弱风的过程中,肯定会执行开启电机的动作;从弱风强风的过程,肯定也会有执行加大电流的动作。整个过程中用不到状态机的输出,所以算是一个转移系统。

 

回到编程领域,GUI应用程序、Web应用程序等事件驱动型的应用程序,采用状态机的思路来完成程序设计,可以简化设计流程,使程序的可读性、可维护性都得到增加。

4 总结

有限状态机可以分为acceptors(接收器)transducers(转换器) 两大类。acceptors(接收器) 型有限状态机是一个五元组,transducers(转换器) 型有限状态机是一个六元组。transducers(转换器) 型有限状态机可以分为两种子类型,moore machine(摩尔型有限状态机)mealy machine(米利型有限状态机)。若输出只和状态有关而与输入无关,则称为moore状态机,若输出不仅和状态有关而且和输入有关系,则称为mealy状态机

参考资料

[1]

维基百科: https://zh.wikipedia.org/zh-hans/%E6%9C%89%E9%99%90%E7%8A%B6%E6%80%81%E6%9C%BA?wprov=sfla1

 

 


http://chatgpt.dhexx.cn/article/s7UWBQnw.shtml

相关文章

C语言_有限状态机(FSM)

C语言_有限状态机(Finite State Machine) 基本介绍 许多小型或复杂的应用程序都使用有限状态机 (FSM),C 语言中的有限状态机是嵌入式系统的流行设计模式之一,有限状态机使开发变得容易和顺利。 有很多设备使用事件基态&#xf…

Unity字体展示下载

Unity字体种类展示 这是字体包里面的图片,是不是很多种字体. 下载链接: https://download.csdn.net/download/qq_42603590/12001130 这是下载字体包的地方,很便宜.没有积分的可以留言,我发给你 有时候可能回复的不是很快(抱拳了) 喜欢的话点个赞,关注一下再走吧,谢谢

Unity 之 官网下载地址,方便各个版本的 Unity 安装包下载

Unity 之 官网下载地址,方便各个版本的 Unity 安装包下载 目录 Unity 之 官网下载地址,方便各个版本的 Unity 安装包下载 一、简单介绍 二、各个版本下载入口网址 一、简单介绍 在 Unity 的下载地址现在不是很好找,这里保存一下 Unity 各…

Unity入门之路0-Unity下载安装以及版本选择

文章目录 下载链接Unity Hub和Unity的关系UnityHub下载(Win)两者比较 Unity版本选择许可证问题 下载链接 一定不要百度或者去垃圾网站下载盗版网站 ,Unity是正版免费的,官方很关注使用者的感受,所以下载官网的就没问题。 https://unity.cn/re…

UnityHub下载缓存位置

一、下载Unity各版本的编辑器 C:\Users\XXX\AppData\Local\Temp\unityhub-xxx-xxx-xxx-xxx 我电脑是 C:\Users\Administrator\AppData\Local\Temp\unityhub-xxxx-xxxx 如果你不需要备份安装包,那么这个缓存的文件夹,就与你无关了,因为安装完…

使用UnityHub下载任意版本Unity

目录 方法一 使用链接方法二 官网下载(适用于2018.4.23及以上版本) unityHub上只能下载官方指定的版本,很多其他版本不能下载,下面介绍的是在unityHub下载任意版本的方法 方法一 使用链接 举例: 2019.2.11f1版本的unity----> unityhub://2019.2.11f1/5f859a4cfee5 格式 unit…

Unity给游戏对象贴图、从官网下载资源、导入导出

1、新建项目、在项目场景中创建几何对象并修改参数 在层级“”中创建一个立方体(3D对象),同理也创建一个球体 创建好的立方体会显示在场景视图中 (从场景视图或层级视图中)选中几何体,选择场景视图中竖排工…

unity下载网页所有图片

用unity的c#脚本批量下载网页上的所有图片 1、将网页的html保存到本地 在网页上鼠标右击另存为如下图所示 保存html文件 2、通过截取<img“”>获取图片存储的地址 经过两个步骤之后就可以开始着手敲代码了 代码 html下载的本地地址和要保存的图片地址 //保存在本地ht…

Unity下载方法(超详细)

一、进入官网&#xff0c;点击[下载Unity]&#xff0c;点击右上角的小人头像&#xff0c;点击[创建Unity ID](创建ID的方法你点进去按照它要求你的一步一步做就行啦)。 二、创建完Unity ID并登录(或已有Unity ID并登录)后&#xff0c;下拉网页&#xff0c;点击[下载Unity Hub]&…

Unity 改变下载资源商店中资源默认路径的方法

Unity 改变下载资源商店中资源默认路径的方法 Unity资源商店中免费资源可以被我们很好的使用&#xff0c;尤其对于暂时还不会自己设计资源的创作者。但是&#xff0c;unity默认是将资源商店的下载路径设置在了C:\Users\操作系统当前用户\AppData\Roaming\Unity\Asset Store-5.x…

Unity 各版本下载方法

开发Unity的&#xff0c;获取不同版本Unity版本和了解Unity最新动态很重要&#xff0c;现在更新迭代很频繁&#xff0c;在开发时&#xff0c;不论遇到项目升级&#xff0c;还是插件要求&#xff0c;还是老项目运行&#xff0c;总是在多个版本间切换。 是不是经常遇到&#xff0…

Unity3d_NGUI和UGUI的学习

由于之前刚入门的时候&#xff0c;应Unity3d整体发展的要求我们自学了UGUI(相对来说UGUI比NGUI做得更好一些&#xff0c;后面会有2者对比)&#xff0c;但是后来公司要求使用NGUI&#xff0c;所以我这边把之前学习UGUI&#xff08;不全&#xff0c;当时资源有限&#xff09;和NG…

NGUI与UGUI的区别及其优缺点

UIGUI与BGUI 的区别 首先说一下NGUI NGUI是严格遵循KISS原则并用C#编写的Unity&#xff08;适用于专业版和免费版&#xff09;插件&#xff0c;提供强大的UI系统和事件通知框架。其代码简洁&#xff0c;多数类少于200行代码。这意味着程序员可以很容易地扩展NGUI的功能或调节已…

NGUI的使用教程与实例

原文地址&#xff1a;http://www.tasharen.com/?page_id185 NGUI下载地址&#xff1a;点我传送 NGUI教程&#xff1a;步骤1-Scene 1.创建一个新的场景&#xff08;New Scene&#xff09;。 2.选择并删除场景里的MainCamera。 3.在NGUI菜单下选择Create a New UI&#xff0c…

Unity NGUI 插件 简介

文章目录 Unity NGUI一. NGUI基础1.1 导入NGUI插件1.2 基本UI资源1.3 制作UI图集1.4 制作UI字体1.5 UIRoot、UIPanel 和 UICamera 组件1.6 Depth (深度) 二. 核心组件2.1 UISprite (精灵)2.2 UILabel (标签)2.3 UITexture (纹理)2.4 UIButton (按钮)2.5 UISlider (进度条)2.6 U…

Unity3D种UGUI与NGUI的对比差别(2)

层级管理概念UGUI采用Hierarchy排序的方式&#xff0c;替代了NGUI中的Depth排序。更精准的说&#xff0c;NGUI的排序是通过Depth、Z值、RenderQueue共同影响的&#xff0c;整体规则过于复杂&#xff1b;而UGUI采用的排序比较简单&#xff0c;在Canvas内部元素采用Hierarchy方式…

NGUI插件] 收录最全的NGUI示例文档中文教程(更新版本3.0.5)

NGUI3.0.X官网示例中文讲解 本站NGUI各个版本插件下载地址 NGUI 2.7.0中文字体的使用 官方网站上的控件说明翻译: NGUI控件说明(中文) UIWidget NGUI控件说明(中文) UIRoot NGUI控件说明(中文) UIPanel NGUI控件说明(中文) UICamera NGUI控件说明(中文) UIStretch NGUI控件…

NGUI 3.5教程(一)安装NGUI 3.5.8

写在前面&#xff1a; 网上找的NGUI教程&#xff0c;都是基于2.x版本的。为了能配合教程学着做&#xff0c;我也是下载了各种NGUI 2.x版本。但是在导入的时候&#xff0c;或多或少都报错&#xff08;我用的Unity 的版本是4.3.2&#xff09;。无奈之下&#xff0c;只好下载了最…

[Unity3D]事半功倍:界面插件NGUI的使用教程与实例

原文地址&#xff1a;http://www.tasharen.com/?page_id185 NGUI下载地址&#xff1a;点我传送 NGUI教程&#xff1a;步骤1-Scene 1.创建一个新的场景&#xff08;New Scene&#xff09;。 2.选择并删除场景里的MainCamera。 3.在NGUI菜单下选择Create a New UI&#xff0c…

GUI之安装 一、打开NGUI的官方网站

GUI之安装 一、打开NGUI的官方网站 http://www.tasharen.com/?page_id140 二、往下拖网页找到免费版本的下载地址并下载 三、在Unity3D工程中导入所下载的unitypackage 点击Unity3D左上角的菜单Assets->ImportPackage->CustomPackage 在弹出的选择窗口中选择之前下载的…