有限状态机的九元组定义

68 阅读7分钟

状态机是一种在各行各业中应用非常广泛的概念。
它通过 “状态 + 事件 → 状态 + 动作” 的方式,清晰地描述了一个系统如何随着外部输入而发生状态转移,并在不同状态下执行特定的动作。
状态机模型结构明晰、逻辑严谨,使人能够一目了然地理解系统的整体流程和运行逻辑

状态机就像一张地图,让人在陌生的领域或流程 中拥有方位感

它告诉你 “我现在哪”、“能往哪走”、“走了之后会怎样”,不至于懵逼无措 和 盲目行动

状态机虽然无法穷尽一切,但它为我们在复杂现实中,提供了一把“结构化认知”的钥匙。

定义

有限状态机 FSM 定义为九元组:

FSM = <S, I , E,G, T, A,O, s₀, sf>,

也可简化,但至少是个四元组

FSM = <S,E,T,A>

符号名称内容
S状态集 (States)S = {s₁, s₂, ..., sₙ},是系统所有可能状态的集合。 可细分为: • 瞬时状态(PS):短暂存在的过渡状态(如脉冲信号) • 长期状态(TS):稳定存在的持续状态(如电平信号) 状态通常通过指示灯、屏幕、声音等方式被感知
I输入集 (Inputs)I = {i₁, i₂, ..., iₘ},系统接收的原始输入机制集合。 如:传感器信号、按钮操作、反馈电平、系统内部中断等。
E事件集 (Events)E = {E₁, E₂, ..., Eₘ},表示触发状态转移的语义事件集合。 通常由输入+状态等组合抽象而来的策略或
多个事件的组合,是状态转移的原因。
在本文中,事件被视为一种策略封装单元
事件是一个时刻,它描述的是某一瞬间的行为或变化
G条件集
Guard
G = {g₁, g₂, ..., gt},是一个逻辑判断, 是由输入,状态,事件, 其他条件 组成的一个布尔表达式
用于描述在某个事件发生后,是否允许从当前状态转移到下一状态
T转移集 (Transitions)无条件转移:T: S × E ↦ S × A ,是一个四元组 (s, e, s′, a)

有条件转移:T: S × E ×G ↦ S × A;,是一个五元组 (s, e, g, s′,a) 表示系统在状态 s 遇到事件 e 后,满足条件g, 转移到状态 s′,并执行动作 a。 转移集合 T = {T₁, T₂, ..., Tₖ} , 每个 Ti = (当前状态, 事件, 条件, 下一状态, 动作) ,通常表示系统的行为逻辑或决策规则
A动作集 (Actions)A = {A₁, A₂, ..., Aₚ},系统在状态转移时或状态维持期间所执行的动作策略集合。 例如:启动电机、开启电磁阀、启动蜂鸣器、关闭继电器等。
O输出集 (Outputs)O = {O₁, O₂, ..., Oₚ},系统实现动作的输出机制。 如:设置 GPIO 电平、发串口命令、输出 PWM 波形等。
s₀初始状态 (Start State)s₀ ∈ S,是 FSM 开始执行时所处的初始状态。
sf终止状态 (Final State)sf ∈ S,是 FSM 执行结束时达到的终止状态。

常见误区

P1: 输入,事件,条件,状态, 动作, 输出 的划分 不是固定的,它们是建模角度的产物,可根据需要互换

P2: 状态机中,动作不是状态变化的原因,而是状态转移的结果。

若要“动作”改变状态,它必须先被转化为 “事件”参与状态判断。

P3: 时间是一种特殊的输入,常通过晶振和定时器 变成 超时、定时触发、周期节拍

等事件,用来推动状态变化。

P4: 输入输出是机制,事件动作是策略
实际建模时,无需过度区分输入与事件、动作与输出,或 省略条件
合理的抽象能简化状态机设计,提高可读性。

  • 输入输出 是状态机的底层机制,通常由外部环境或系统信号(如按钮、传感器电平等)构成;
  • 事件 是状态转移或维持的条件,通常是“输入+状态”的语义封装,也可以是多个事件的组合;
  • 动作 是状态转移或维持中,根据策略做出的具体操作,而动作需要通过输出机制来实现。

P5: 现实是复杂混沌的,状态机只是我们对系统行为进行建模的一种简化方式。
这种简化有助于理解和控制,但永远无法穷尽全部的真实行为。
状态机不是现实本身,而是我们用来认识、分析和设计现实的一种理性视角

步骤

  1. 明确有哪些状态(S)
  2. 列出事件集 (E) ,条件集(G)
  3. 描述状态之间的转移(T)
  4. 给每个转移或状态配动作(A)

例子

人生状态机

符号名称内容
S状态集{新生、童年、青少年、青年、中年、老年、终点}
E事件集{成长、人生大事(升学、就业、结婚)、衰老、意外事件}
T转移集(新生,成长,童年,学习)
(中年,衰老,老年,退休)
(任意状态,意外事件,终点,意外死亡)
(老年,衰老,终点,正常死亡)
A动作集{学习、玩耍、奋斗、承担、陪伴、回忆、退休、死亡}
s₀初始状态新生
sf终止状态终点

洗衣机状态机

符号含义内容说明
S状态集{待机、加水、洗涤、排水、脱水、完成}
I输入集- 水位传感器电平 - 定时器计数值达到设定值 - 按钮按下信号来自环境或硬件的原始输入信号,
通常是低电平/高电平、边沿、计数到等。 原始机制,不含语义,
按钮这个机制可封装成双击,长按等 事件策略
E事件集{启动、加水完成、洗涤完成、排水完成、脱水完成、取消}对输入和状态的语义抽象。例如: “按钮按下 3 秒”→ 长按事件 “水位 > 阈值”+“正在加水”→加水完成
G条件集水位传感器电平 >= 设定水位
电源稳定
洗衣机状态机的大多状态转移是无需条件的
事件发生后就直接转换状态了
T转移集(待机,启动,加水,进水)
(加水,加水完成,洗涤,搅拌)
(洗涤,洗涤完成,排水,出水)
(排水,排水完成,脱水,高速旋转)
(脱水,脱水完成,完成 ,蜂鸣提示)
(任意状态, 取消, 待机, 停止所有动作)
A动作集{进水、搅拌、出水、高速旋转、蜂鸣提示、停止所有动作}抽象层面的策略意图,
系统要干什么,
不管具体怎么干
O输出集- GPIO 控制电磁阀开关打开进水阀或出水阀 - 控制电机正反转信号 - 启动蜂鸣器 2 秒 - 关闭继电器实现动作的机制 作用于硬件。是信号级别的控制
s₀初始状态待机
sf终止状态完成

刑事案件状态机

元素含义内容
S状态集{案件未立、立案侦查、检察审查、提起公诉、法院审理、一审裁定、
上诉审理、终审裁定、案件结案}
E事件集{报警或举报、证据满足立案标准、检察移送、法院受理、
上诉申请、判决生效、撤诉、和解、裁定撤销}
T转移集状态+输入 → 下一状态, 产生动作(详见下表)
A动作集{接警处理、立案、调查取证、批捕、移送起诉、提起公诉、开庭审理、
判决、上诉、执行、结案归档}
s₀初始状态案件未立
sf终止状态案件结案(终审判决或撤案、和解)

状态转移表(T)

当前状态 S事件E下一状态 S′动作 A
案件未立报警 / 举报立案侦查接警、初查
立案侦查满足立案条件立案侦查正式立案、侦查取证
立案侦查移送检察机关检察审查检察机关审查起诉
检察审查批准逮捕提起公诉起诉书移交法院
提起公诉法院受理法院审理排期开庭、审理准备
法院审理判决一审裁定作出判决
一审裁定被告不上诉案件结案判决生效,归档
一审裁定提出上诉上诉审理二审法院复查
上诉审理作出终审判决终审裁定判决定案
终审裁定判决生效案件结案归档执行
任意状态撤诉 / 裁定撤销 /和解案件结案结案、归档