有限状态机

来源:Wikipedia

有限状态机

图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执行模型,比如对虚拟FSM可工作但对事件驱动FSM不行)。有两个输入动作(I:):“开启电机关门如果command_close下达”和“反向开启电机开门如果command_open下达”。

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

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

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

FSM逻辑

图5 FSM逻辑

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

数学模型

依据类型不同有多种定义。接受器有限状态机是五元组,这里的:

  • 是输入字母表(符号的非空有限集合)。
  • 是状态的非空有限集合。
  • 是初始状态,它是的元素。在非确定有限状态自动机中,是初始状态的集合。
  • 是状态转移函数:
  • 是最终状态的集合,的(可能为空)子集。

变换器有限状态自动机是六元组,这里的:

  • 是输入字母表(符号的非空有限集合)。
  • 是输出字母表(符号的非空有限集合)。
  • 是状态的非空有限集合。
  • 是初始状态,它是的元素。在非确定有限状态自动机中,是初始状态的集合。
  • 是状态转移函数:
  • 是输出函数。

如果输出函数是状态和输入字母表的函数(),则定义对应于Mealy模型,它可以建模为Mealy机。如果输出函数只依赖于状态 (),则定义对应于Moore模型,它可建模为Moore机。根本没有输出函数的有限状态机叫做半自动机转移系统

优化

优化一个FSM意味着找到带有极小数目个状态的进行同样功能的机器。一种可能是使用蕴涵表Moore简约过程。另一种可能是无环FSA的自底向上算法

实现

硬件应用

图6 4位TTL计数器的电路图

数字电路中,FSM可以用可编程逻辑设备可编程逻辑控制器逻辑门触发器继电器来建造。更明确的说,硬件实现要求寄存器来存储状态变量,确定状态转移的一块组合逻辑,和确定FSM输出的另一块组合逻辑。一类经典硬件实现是Richard控制器

软件应用

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

参考书目

  • Wagner, F., "Modeling Software with Finite State Machines: A Practical Approach", Auerbach Publications, 2006, ISBN 0-8493-8086-3.
  • Samek, M., Practical Statecharts in C/C++, CMP Books, 2002, ISBN 1-57820-110-1.
  • Samek, M., Practical UML Statecharts in C/C++, 2nd Edition, Newnes, 2008, ISBN 0-7506-8706-1.
  • Cassandras, C., Lafortune, S., "Introduction to Discrete Event Systems". Kluwer, 1999, ISBN 0-7923-8609-4.
  • Timothy Kam, Synthesis of Finite State Machines: Functional Optimization. Kluwer Academic Publishers, Boston 1997, ISBN 0-7923-9842-4
  • Tiziano Villa, Synthesis of Finite State Machines: Logic Optimization. Kluwer Academic Publishers, Boston 1997, ISBN 0-7923-9892-0
  • 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.

外部链接

参见

时间: 2024-10-13 14:53:09

有限状态机的相关文章

几种有限状态机的实现

有限状态机,除了可以组织游戏逻辑之外,还可以用于实现简单的AI.实现有限状态机的方法有很多,大多数是跨语言的,也有几种依赖MonoBehaviour的. 传统的FSM https://gamedevelopment.tutsplus.com/tutorials/finite-state-machines-theory-and-implementation--gamedev-11867 在这篇文章中,介绍了两种FSM的实现方法.第一种是这样的: public class FSM { private

有限状态机VHDL模板

逻辑设计, 顾名思义, 只要理清了逻辑和时序, 剩下的设计就是做填空题了. 简单总结了有限状态机的一种设计方式, 详细参见 <<Circuit Design with VHDL>>  chapter 8  State Machines 1  有限状态机 2  VHDL模板之一 1)  端口定义 library IEEE; use ieee.std_logic_1164.all; --! 端口定义 entity <entity_name> is port ( INPUT

Unity有限状态机编写

有限状态机FSM 是对行为逻辑的抽象. 在整个FSM架构中 首先有一个状态基类stateObject 里面有三个方法,分别是状态前.状态中.状态后. 所有具体行为类都要继承这个基类,在这三个方法中具体实现各种方法的逻辑. 然后,需要一个stateManager(大脑)状态管理类来管理这些状态,特别注意的是里面changeState方法,他是状态跳转的关键. 至于如果存储各种状态,你可以用list类 ,字典类等等. 写法: 建类:确认一共有几个状态,新建对应的几个类,还有他的Manager(管理类

有限状态机与应用

有线状态机 http://www.ibm.com/developerworks/cn/linux/l-fsmachine/index.html 有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件.在面向对象的软件系统中,一个对象无论多么简单或者多么复杂,都必然会经历一个从开始创建到最终消亡的完整过程,这通常被称为对象的生命周期. http://kb.cnblogs.com/page/528972/ 有限状态机的工作原理

TCP/IP有限状态机

TCP初始化连接三次握手吧:发SYN包,然后返回SYN/ACK包,再发ACK包,连接正式建立. 但是这里有点出入,当请求者收到SYS /ACK包后,就开始建立连接了,而被请求者第三次握手结束后才建立连接. 关闭连接要四次握手:发FIN包,ACK 包,FIN包,ACK包,四次握手!! 一.建立TCP连接 1.客户端发送SYN报文(SYN为1) ,指明客户打算连接的服务器端口,以及初始化顺序号(ISN) 2.服务端发回包含服务器的初始顺序号的SYN报文段(SYN为1). 同时,将确认号设置为客户的I

网络仿真中的有限状态机(FSM)

最近在看<OMNET++ User Mannul>,了解到了有限状态机的工作机制.相比早之前看过的<OPNET xxx>教材中讲解FSM不明不白,<OMENT++ User Mannul>讲解的更为清晰简洁,且有偏底层的代码做实例,更易理解. FSM是指完成模块功能的一种手法(例如OMNET++中的模块功能可选择是否由FSM完成),下文的FSM均指模块中的FSM. 构成FSM的主体为状态(State)和状态跳转(State Transition),其中状态分为两种:1)

Unity FSM 有限状态机

翻译了一下unity wiki上对于有限状态机的案例,等有空时在详细写一下.在场景中添加两个游戏物体,一个为玩家并修改其Tag为Player,另一个为NPC为其添加NPCControl脚本,并为其将玩家角色和路径添加上去.(该案例利用状态机简单的实现了一个NPC的简单AI---巡逻---看到玩家----追逐玩家----丢失玩家----巡逻) 效果: 状态机: 1 using System; 2 using System.Collections; 3 using System.Collection

为Linux应用构造有限状态机

有限自动机(Finite Automata Machine)是计算机科学的重要基石,它在软件开发领域内通常被称作有限状态机(Finite State Machine),是一种应用非常广泛的软件设计模式(Design Pattern).本文介绍如何构建基于状态机的软件系统,以及如何利用Linux下的工具来自动生成实用的状态机框架. 一.什么是状态机 有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件.在面向对象的软件系统

基于Qt有限状态机人工智能的一种实现及改进方法

基于Qt有限状态机人工智能的一种实现及改进方法 人工智能在今年是一个非常火的方向,当然了,不仅仅是今年,它一直火了很多年,有关人工智能的一些算法层出不穷.人工智能在很多领域都有应用,就拿我熟悉的游戏领域来说吧,一些寻路算法,比如说A*算法(我的<十日驱鬼记>就曾经使用了A*算法进行寻路),还有一些高级的算法,比如说决策树等,都在游戏中得以了广泛的应用.我目前想制作的项目和人工智能也有一定的关系,因此,我这个月开始学习搭建一些简单的人工智能框架. 蒋彩阳原创文章,首发地址:http://blog

有限状态机的实现

作者:zhanhailiang 日期:2015-01-24 什么是有限状态机 一个有限状态机是一个设备,或是一个设备模型,具有有限数量的状态,它可以在任何给定的时间根据输入进行操作,使其从一个状态变换到另一个状态,或者是促使一个输出或者一种行为的发生.一个有限状态机在任何瞬间只能处在一个状态. 即有限状态机背后的概念是要把一个对象的行为分解成为易于处理的"块"或状态.典型的例子,墙上的灯是一个非常简单的有限状态机,它有两种状态:开或关.状态之间的变换是通过你手指的输入产生的.向上按开关