有限状态机

  • 有限状态机(FSM)
  • 1、 什么是“状态”
  • 2、什么是状态机?
  • 3、状态机图怎么画?
  • 参考

有限状态机(FSM)

1、 什么是“状态”

先来解释什么是“状态”( State )。现实事物是有不同状态的,例如一个自动门,就有 open 和 closed 两种状态。我们通常所说的状态机是有限状态机,也就是被描述的事物的状态的数量是有限个,例如自动门的状态就是两个 open 和 closed 。

状态机,也就是 State Machine ,不是指一台实际机器,而是指一个数学模型。说白了,一般就是指一张状态转换图。例如,根据自动门的运行规则,我们可以抽象出下面这么一个图。

自动门有两个状态,open 和 closed ,closed 状态下,如果读取开门信号,那么状态就会切换为 open 。open 状态下如果读取关门信号,状态就会切换为 closed 。

状态机的全称是有限状态自动机,自动两个字也是包含重要含义的。给定一个状态机,同时给定它的当前状态以及输入,那么输出状态时可以明确的运算出来的。例如对于自动门,给定初始状态 closed ,给定输入“开门”,那么下一个状态时可以运算出来的。

这样状态机的基本定义我们就介绍完毕了。重复一下:状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。

四大概念

下面来给出状态机的四大概念。

  • 第一个是 State ,状态。一个状态机至少要包含两个状态。例如上面自动门的例子,有 open 和 closed 两个状态。
  • 第二个是 Event ,事件。事件就是执行某个操作的触发条件或者口令。对于自动门,“按下开门按钮”就是一个事件。
  • 第三个是 Action ,动作。事件发生以后要执行动作。例如事件是“按开门按钮”,动作是“开门”。编程的时候,一个 Action一般就对应一个函数。
  • 第四个是 Transition ,变换。也就是从一个状态变化为另一个状态。例如“开门过程”就是一个变换。

2、什么是状态机?

  • 有限状态机(Finite-state machine,FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型
  • FSM是一种算法思想,简单而言,有限状态机由一组状态、一个初始状态、输入和根据输入及现有状态转换为下一个状态的转换函数组成。
  • 其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。

做需求时,需要了解以下六种元素:起始、终止、现态、次态(目标状态)、动作、条件,我们就可以完成一个状态机图了:

3、状态机图怎么画?

参考
提要知识点

做需求时,需要了解以下六种元素:起始、终止、现态、次态(目标状态)、动作、条件,我们就可以完成一个状态机图了:

  • ①现态:是指当前所处的状态。

  • ②条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。

  • ③动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。

  • ④次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。

注意事项

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

2、状态划分时漏掉一些状态,导致跳转逻辑不完整。所以在设计状态机时,我们需要反复的查看设计的状态图或者状态表,最终达到一种牢不可破的设计方案。

状态机表怎么画?
首先我们看下下面这张状态机图,展示了一张简单的单审批人文件的状态流转情况。

那么如何把他写成表呢?这里有多种写法,区别于纵坐标的不同,我们举两种:

左侧的纵坐标为初始状态,横坐标为终止状态。右侧的纵坐标为动作条件,横坐标为终止状态。那么对于动作比较多且复杂的情况下,可以考虑采用右侧的表格,这样会比较一目了然。

参考

1、https://zhuanlan.zhihu.com/p/47434856
2、https://blog.csdn.net/xinghuanmeiying/article/details/81586954
3、https://blog.csdn.net/u010107248/article/details/84730111

什么是状态机(Finite-state machine)?相关推荐

  1. FSM(Finite State Machine,有限状态机)设计

    有限状态机(Finite State Machine, FSM),根据状态机的输出是否与输入有关,可分为Moore型状态机和Mealy型状态机.Moore型状态机输出仅仅与现态有关和Mealy型状态机 ...

  2. 《计算机组成与CPU设计实验》5有限状态机的Verilog HDL描述(Finite State Machine,FSM)

    多数控制逻辑都可以用有限状态机描述 状态机 状态机是组合逻辑和时序逻辑的特殊组合 时序逻辑用于存储状态 组合逻辑用于产生次态和产生输出 状态的数量是有限的,故称为有限状态机(Finite State ...

  3. Android官方实现的层次状态机Hierarchical State Machine源代码

    Android官方内部的源代码中实现了一套层次状态机(Hierarchical State Machine),总共有三个代码文件:IState.java , State.java, StateMach ...

  4. 有限状态机FSM(Finite State Machine)及实现方式介绍(转)

    原文:https://www.cnblogs.com/barrywxx/p/12860573.html 一.为什么引入有限状态机? 最近做一个项目,项目中很多实体(Entity),每个实体都有很多状态 ...

  5. 有限状态机FSM(finite state machine) 一

    有限状态机FSM(finite state machine) 一 有限状态机又称有限自动状态机,它拥有有限数量的状态,每个状态代表不同的意义,每个状态可以切换到 零-多 个状态.任意时刻状态机有且只能 ...

  6. 证明与计算(7): 有限状态机(Finite State Machine)

    什么是有限状态机(Finite State Machine)? 什么是确定性有限状态机(deterministic finite automaton, DFA )? 什么是非确定性有限状态机(nond ...

  7. 有限状态机FSM(finite state machine) 二

    有限状态机FSM(finite state machine) 二 延续上一篇继续有限状态机 上一篇中的状态切换判断是在每一个状态类的 OnExecute 方法中各种 if else 硬编码逻辑 当状态 ...

  8. 计算机态,(计算机)有限态自动机,FSM(finite state machine),音标,读音,翻译,英文例句,英语词典...

    补充资料:ω-有限自动机 ω-有限自动机 ω-finite state automata 1094·.一youx一anz}dongJ-..有限自动机(.一rinite state automata)一 ...

  9. 【决策状态机FSM(finite state machine)梳理】

    背景:写论文需要,对需要有限状态机部分进行整理.论文内容是关于自动驾驶避撞决策. 参考Junior: The Stanford Entry in the Urban Challenge的有限状态机 1 ...

  10. 【转】C#开发笔记之05-迭代器中的状态机(State Machine)到底是什么?

    C#开发笔记概述 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/961 访问. 状态机可以理解为实现了备忘录模式(仅作为 ...

最新文章

  1. ACMNO.38 C语言-报数 有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
  2. 句法依存分析_恭喜 | 黑龙江大学自然语言处理实验室获得NLPCC2019跨领域移植中文依存句法分析封闭测试第一名!...
  3. vSphere ESXi命令行使用方法详解
  4. C# 结构与类的区别
  5. 《秋暮登北楼》王武陵
  6. JSF 2,PrimeFaces 3,Spring 3和Hibernate 4集成项目
  7. unity中链接字符串和变量显示_理解Unity中的优化(六):字符串和文本
  8. 帆软助力惠科集团产值提升1%以上,带来上亿元数据价值
  9. 天天有毒_鸡汤文案类小程序源码
  10. javaweb(08) jsp(了解)
  11. MyEclipse中使用Junit插件进行单元测试
  12. 考勤 指纹 php,折腾中控指纹签到SDK始末(.net监听) | quericy Eden*
  13. october php,关于Laravel之October的安装配置过程
  14. 杭州车牌摇号规则详细内容
  15. 计算机图形学(六)-光栅化、采样、走样与反走样、滤波与卷积
  16. 神州优车联合体斥资近40亿控股宝沃 建立联合营销工作小组
  17. 私厨菜谱app的设计与实现(三)
  18. 关于Linux下面移动硬盘读不出来
  19. 电脑wps可以语音录入吗_懒人用技巧—使用Word录音实现语音录入文字(口读文字,Word为您写文字)...
  20. 天津理工大学c语言ex6,天津理工大学C#试验一

热门文章

  1. js正则表达式密码校验
  2. 打印机十大共性故障解决方案(转东转西)
  3. 微信第三方平台【六】微信开放平台帐号管理
  4. 人脸检测的测试程序(视频和摄像头)
  5. -1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常...
  6. (二)什么是Reactor模式
  7. java架构师和大数据架构师有哪些不同
  8. idea出现decompiled .class file 解决方案
  9. 软件开发团队的有效管理和激励
  10. Flink-DataStream快速上手