Finite State Machine 是什么?

状态机(Finite State Machine):状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动       作、完成特定操作的控制中心。

类别:

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

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

关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是终态。当到达终态, 状态机停止。

包含一组状态集(states)、一个起始状态(start state)、一组输入符号集(alphabet)、一个映射输入符号和当前状态到下一状态的转换函数(transition function)的计算模型。当输入符号串,模型随即进入起始状态。它要改变到新的状态,依赖于转换函数。在有限状态机中,会有有许多变量,例如,状态 机有很多与动作(actions)转换(Mealy机)或状态(摩尔机)关联的动作,多重起始状态,基于没有输入符号的转换,或者指定符号和状态(非定有 限状态机)的多个转换,指派给接收状态(识别者)的一个或多个状态,等等。

传统应用程序的控制流程基本是顺序的:遵循事先设定的逻辑,从头到尾地执行。很少有事件能改变标准执行流程;而且这些事件主要涉及异常情况。“命令行实用程序”是这种传统应用程序的典型例子。

另一类应用程序由外部发生的事件来驱动——换言之,事件在应用程序之外生成,无法由应用程序或程序员来控制。具体需要执行的代码取决于接收到的事件,或者它 相对于其他事件的抵达时间。所以,控制流程既不能是顺序的,也不能是事先设定好的,因为它要依赖于外部事件。事件驱动的GUI应用程序是这种应用程序的典 型例子,它们由命令和选择(也就是用户造成的事件)来驱动。

Web应用程序由提交的表单和用户请求的网页来驱动,它们也可划归到上述类别。但是,GUI应用程序对于接收到的事件仍有一定程度的控制,因为这些事件要依赖于向用户显示的窗口和控件,而窗口和控件是由程序员控制的。Web应用 程序则不然,因为一旦用户采取不在预料之中的操作(比如使用浏览器的历史记录、手工输入链接以及模拟一次表单提交等等),就很容易打乱设计好的应用程序逻辑。

显然,必须采取不同的技术来处理这些情况。它能处理任何顺序的事件,并能提供有意义的响应——即使这些事件发生的顺序和预计的不同。有限状态机正是为了满足这方面的要求而设计的。

有限状态机是一种概念性机器,它能采取某种操作来响应一个外部事件。具体采取的操作不仅能取决于接收到的事件,还能取决于各个事件的相对发生顺序。之所以能 做到这一点,是因为机器能跟踪一个内部状态,它会在收到事件后进行更新。为一个事件而响应的行动不仅取决于事件本身,还取决于机器的内部状态。另外,采取 的行动还会决定并更新机器的状态。这样一来,任何逻辑都可建模成一系列事件/状态组合。

[2]  状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:

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

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

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

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

时间: 2024-10-07 05:31:33

Finite State Machine 是什么?的相关文章

Finite State Machine

Contents [hide] 1 Description 2 Components 3 C# - FSMSystem.cs 4 Example Description This is a Deterministic Finite State Machine framework based on chapter 3.1 of Game Programming Gems 1 by Eric Dybsend. Therea are two classes and two enums. Include

Finite State Machine 有限状态机

? ?????首先这是一篇FSM翻译,关于Finite State Machine 的架构赏析,如果项目对ai需求不是非常强,可以在此基础上扩展,keyle也是在学习中欢迎交流,后面两篇计划是在写一篇Behavior?Tree(行为树),最后一篇实现基于Lua的AI的热更新?QQ群交流:137728654 ? ? Finite State Machine Contents 1?Description 2?Components 3?C# - FSMSystem.cs 4?Example Descr

paper:synthesizable finite state machine design techniques using the new systemverilog 3.0 enhancements 之 standard verilog FSM conding styles(二段式)

1.Two always block style with combinational outputs(Good Style) 对应的代码如下: 2段式总结: (1)the combinational always block sensitivity list is sensitve to changes on the state variable and all of the inputs referenced in the combinaltional always block. 这个实际中

paper:synthesizable finite state machine design techniques using the new systemverilog 3.0 enhancements 之 standard verilog FSM conding styles(三段式)

Three always block style with registered outputs(Good style)

Java Secret: Using an enum to build a State machine(Java秘术:用枚举构建一个状态机)

近期在读Hadoop#Yarn部分的源代码.读到状态机那一部分的时候,感到enmu的使用方法实在是太灵活了,在给并发编程网翻译一篇文章的时候,正好碰到一篇这种文章.就赶紧翻译下来,涨涨姿势. 原文链接:http://www.javacodegeeks.com/2011/07/java-secret-using-enum-to-build-state.html 作者:Peter Lawrey    译者:陈振阳 综述 Java中的enum比其它的语言中的都强大,这产生了非常多令人吃惊的使用方法.

unity5, animator state machine, 无条件transition实现播放动画序列

今天遇到这样一个需求,我有一个名为happy的animation clip和一个名为speak的animation clip.想实现当主角胜利后播放动序列: happy->speak->happy->speak->... 这样无限循环. 走了一些弯路后发现直接在animator state machine里就可以搞定,如下图: transition{idle->happy}上condition设为triggerWin,由于idle到happy的transition不能太拖沓,

MITK中State machine和configuration详解和调用顺序

(学习笔记,错误难免,请指正:私人劳动,转载请注明出处) 下面以MITK自带的mitkPointSetDataInteractor.h.mitkPointSetDataInteractor.cpp.PointSet.xml.PointSetConfig.xml为例,解释MITK中的交互原理,以及State machine和configuration的调用顺序. PointSet.xml: <statemachine> <state name="start" start

Mina State machine状态机讲解

原文地址:Mina State machine(Apache Mina User guide Chapter14 State machine) 如果您使用的是Mina与复杂网络开发应用程序交互,你可能在某些时候发现自己达到的美好状态模式尝试解决一些复杂性.然而,在你这样做之前你可能想检查mina-statemachine试图解决一些状态模式的不足之处. 1.1.1. 一个简单的例子 让我们演示mina-statemachine如何以一个简单的例子工作.下图显示了一个典型的录音机一个状态机.椭圆形

(三)Unity5.0新特性------State Machine Behaviours

出处:http://blog.csdn.net/u010019717 author:孙广东      时间:2015.3.31 (State machine behaviours)状态机的行为在Animator Controller的脚本中是可以附加到动画状态或子状态机.每当你进入一种状态,就可以对其添加各种各样的状态依赖例如播放声音等行为,他们甚至可以独立于动画animation.而用于(logic state machines )逻辑状态机.要添加(State machine behavio