博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
有限状态机
阅读量:4617 次
发布时间:2019-06-09

本文共 3402 字,大约阅读时间需要 11 分钟。

来源:

有限状态机

 
 
 
图1有限状态机

有限状态机finite-state machine,:FSM)又称有限状态自动机,简称状态机,是表示有限个以及在这些状态之间的转移和动作等行为的。

 

概念和术语

状态存储关于过去的信息,就是说:它反映从系统开始到现在时刻的输入变化。转移指示状态变更,并且用必须满足来确使转移发生的条件来描述它。动作是在给定时刻要进行的活动的描述。有多种类型的动作:

进入动作(
entry action):在进入状态时进行 退出动作:在退出状态时进行 输入动作:依赖于当前状态和输入条件进行 转移动作:在进行特定转移时进行

FSM(有限状态机)可以使用上面图1那样的(或状态转移图)来表示。此外可以使用多种类型的。下面展示最常见的表示:当前状态(B)和条件(Y)的组合指示出下一个状态(C)。完整的动作信息可以只使用脚注来增加。包括完整动作信息的FSM定义可以使用。

状态转移表
当前状态→
条件↓
状态A 状态B 状态C
条件X
条件Y 状态C
条件Z

除了建模这里介绍的反应系统之外,有限状态自动机在很多不同领域中是重要的,包括、、、、、和。有限状态机是在和中研究的一类自动机。在计算机科学中,有限状态机被广泛用于建模应用行为、硬件电路系统设计、软件工程,编译器、网络协议、和计算与语言的研究。

分类

有两个不同的群组:接受器/识别器和变换器。

接受器和识别器[]

 
图2接受器FSM:解析单词"nice"

接受器识别器(也叫做序列检测器)产生一个二元输出,说要么“是”要么“否”来回答输入是否被机器接受。所有FSM的状态被称为要么接受要么不接受。在所有输入都被处理了的时候,如果当前状态是接受状态,输入被接受,否则被拒绝。作为规则,输入是符号(字符);动作不使用。图2中的例子展示了接受单词"nice"的有限状态自动机,在这个FSM中唯一的接受状态是状态7。

机器还可以被描述为定义了一个语言,它包含了这个机器所接受而非拒绝的所有字词;我们称这个语言被这个机器接受。通过定义,FSM接受的语言是 - 就是说,如果一个语言被某个FSM接受,那么它是正则的(cf. Kleene的定理)。

开始状态

开始状态通常用“没有起点的箭头”指向它来表示(Sipser (2006)p.34)

接受状态

 
图3:一个检测二进制数具有奇数或者偶数个0的状态机

接受状态是机器成功的进行了它的程序之后的状态,它通常表示为双重圆圈。

接受状态出现的下面例子的状态图的左边,它确定输入是否包含偶数个0: S1(它也是开始状态)指示已经输入了偶数个0的状态因此被定义为接受状态。

变换器

使用动作基于给定输入和/或状态生成输出。它们用于控制应用。常分为两种类型:

Moore机

只使用进入动作的FSM,就是说输出只依赖于状态。Moore模型的好处是行为的简单性。图1的例子展示了一个电梯门的Moore FSM。这个状态机识别两个命令:“command_open”和“command_close”触发状态变更。在状态“Opening”中的进入动作 (E:)开启电机开门,在状态“Closing”中的进入动作以反方向开启电机关门。状态“Opened”和“Closed”不进行任何动作。它们信号通知外部世界(比如其他状态机)情况:“门开着”或“门关着”。

Mealy机

 
图4变换器FSM: Mealy模型例子

只使用输入动作的FSM,就是说输出依赖于输入和状态。Mealy FSM的使用经常导致状态数目的简约。在图4中的例子展示了实现同上面Moore机同样行为的Mealy FSM(行为依赖于实现的FSM执行模型,比如对可工作但对不行)。有两个输入动作(I:):“开启电机关门如果command_close下达”和“反向开启电机开门如果command_open下达”。

在实践中经常使用混合模型。

进一步可区分为确定型()和非确定型(、)自动机。在确定型自动机中,每个状态对每个可能输入只有精确的一个转移。在非确定型自动机中,给定状态对给定可能输入可以没有或有多于一个转移。这个区分在实践而非理论中更有用,因为存在算法把任何NDFA转换成等价的DFA,尽管这种转换一般会增加自动机的复杂性。

只有一个状态的FSM叫做组合FSM并只使用输入动作。这个概念在多个FSM要一起工作的情况下是有用的,这时把纯组合部分看作一种形式的FSM来适合设计工具可能是方便的。

FSM逻辑

 
图5 FSM逻辑

FSM的下一个状态和输出是由输入和当前状态决定的。FSM逻辑在图5中展示。

数学模型

依据类型不同有多种定义。接受器有限状态机是(\Sigma, S, s_0, \delta, F),这里的:

  • \Sigma是输入(符号的非空有限集合)。
  • S是状态的非空有限集合。
  • s_0是初始状态,它是S的元素。在中,s_0是初始状态的集合。
  • \delta是状态转移函数:\delta: S \times \Sigma \rightarrow S
  • F是最终状态的集合,S的(可能为空)子集。

变换器有限状态自动机是(\Sigma, \Gamma, S, s_0, \delta, \omega),这里的:

  • \Sigma是输入字母表(符号的非空有限集合)。
  • \Gamma是输出字母表(符号的非空有限集合)。
  • S是状态的非空有限集合。
  • s_0是初始状态,它是S的元素。在中,s_0是初始状态的集合。
  • \delta是状态转移函数:\delta: S \times \Sigma \rightarrow S
  • \omega是输出函数。

如果输出函数是状态和输入字母表的函数(\omega: S \times \Sigma \rightarrow \Gamma),则定义对应于Mealy模型,它可以建模为。如果输出函数只依赖于状态 (\omega: S \rightarrow \Gamma),则定义对应于Moore模型,它可建模为。根本没有输出函数的有限状态机叫做或。

优化

优化一个FSM意味着找到带有极小数目个状态的进行同样功能的机器。一种可能是使用或。另一种可能是。

实现

硬件应用

 
图6 4位 计数器的

在中,FSM可以用、、和或来建造。更明确的说,硬件实现要求来存储状态变量,确定状态转移的一块组合逻辑,和确定FSM输出的另一块组合逻辑。一类经典硬件实现是。

软件应用

下列概念经常用来建造有有限状态机的软件应用:

参考书目

  • Wagner, F., "Modeling Software with Finite State Machines: A Practical Approach", Auerbach Publications, 2006, .
  • Samek, M., , CMP Books, 2002, .
  • Samek, M., , Newnes, 2008, .
  • Cassandras, C., Lafortune, S., "Introduction to Discrete Event Systems". Kluwer, 1999, .
  • Timothy Kam, Synthesis of Finite State Machines: Functional Optimization. Kluwer Academic Publishers, Boston 1997, 
  • Tiziano Villa, Synthesis of Finite State Machines: Logic Optimization. Kluwer Academic Publishers, Boston 1997, 
  • Carroll, J., Long, D. , Theory of Finite Automata with an Introduction to Formal Languages. Prentice Hall, Englewood Cliffs, 1989.
  • Kohavi, Z., Switching and Finite Automata Theory. McGraw-Hill, 1978.
  • Gill, A., Introduction to the Theory of Finite-state Machines. McGraw-Hill, 1962.
  • Ginsburg, S., An Introduction to Mathematical Machine Theory. Addison-Wesley, 1962.

外部链接

  • NIST Dictionary of Algorithms and Data Structures 
  • 关于使用Moore和Mealy模型的区别的细节,包括执行例子

参见

转载于:https://www.cnblogs.com/yffq/p/4558753.html

你可能感兴趣的文章
C#中的委托
查看>>
如何渲染几万条数据并不卡住界面
查看>>
玩具装箱 BZOJ 1010
查看>>
iOS的主要框架介绍
查看>>
Python 动态语言
查看>>
linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )...
查看>>
弹性盒布局
查看>>
Angular2 -- 生命周期
查看>>
重写与重载,背了八百遍终于明白了
查看>>
SQL逻辑查询处理顺序特别提醒
查看>>
HttpClient 教程 (一)
查看>>
【BZOJ】4671: 异或图
查看>>
【LOJ】#2115. 「HNOI2015」落忆枫音
查看>>
linux下open too many files错误Socket未正确关闭的处理方法
查看>>
chrome 命令
查看>>
数据库存储过程和触发器
查看>>
dispatch_source_t
查看>>
洛谷P1569属牛的抗议 超级强力无敌弱化版
查看>>
POJ3889Fractal Streets
查看>>
过滤重复值和取最近的时间
查看>>