在有限状态机中,状态是否可以生成事件?

时间:2011-09-13 18:39:16

标签: state-machine

在有限状态机中,状态S1是否可以生成事件,因此该事件将触发从该状态S1到另一个状态S2的转换?

3 个答案:

答案 0 :(得分:3)

从计算理论的角度来看,“纯”有限状态机的唯一功能是将一串输入转换为一个N选项(在大多数插图中它是一个二分之一(接受vs)拒绝选择,但N工作的较大有限值在概念上是相同的)。两个纯有限状态机是等价的,如果对于任何输入字符序列,它们将返回相同的一个N结果。从纯有限状态机升级的是有限状态传感器,其中每个边缘都可以将任意数量的字符发送到输出流,这对任何未来的状态转换都没有影响。两个这样的机器是等价的,如果对于任何输入字符序列,它们将生成相同的输出字符序列,并将返回相同的一个N结果。

给定两个纯有限状态机或两个纯有限状态传感器,可以在合理的有界时间内确定它们是否相等(如果两个传感器,其中较小的有N个状态,将产生相同的输出序列)对于任何最多2N个字符的输入序列,它们将为任何长度的任何输入序列的任何输入序列产生相同的输出序列。如果允许状态机生成可以反过来影响其输入的“事件”,则可以使用相同的方法,但是如果两台机器生成完全相同的事件序列,并且如果所有输入组合都假定为无论生成什么事件都可能。另一方面,如果某种类型的事件可能以某种方式影响状态机的输入但是机器的用户不感兴趣,或者某些事件序列意味着某些输入序列不会发生,确定用户不关心的两台机器是否与用户关心的方式相同,可能非常困难(甚至基本上不可能)。

触发影响其输入的事件的状态机通常在现实世界中很有用,但是无法使用适用于更简单机器的方法来分析此类机器。实际上,输出和输入之间的联系需要被视为状态机的一部分;许多这样的联系机制有许多状态,这些状态使得它们所依赖的DFA中的潜在状​​态的数量相形见绌(如果它完全有界限的话)。

答案 1 :(得分:2)

状态机有许多不同的定义和模型。

在硬件设计中,他们谈论的是Mealy机器和Moore机器,它们各种有线导线的不同之处在于......

在软件中,FSM的定义不太严格。整个计算机在某种意义上是一个大型的状态机。许多代码将状态机实现为简单的switch语句,并且可能会也可能不会将事件发布到自身。

软件状态机的流行定义是UML状态机(这很好,因为它也带有首选的图片格式。)http://en.wikipedia.org/wiki/UML_state_machine

UML状态机可以为每个状态设置entry()动作和exit()动作。根据实施情况,您可以将这些操作发布到其他事件中。

那么,“FSM能否触发过渡”?取决于定义或实施。一般来说,当然!

答案 2 :(得分:1)

我更喜欢这种在软件中可视化FSM的方式

         Start

           |

       =Initial=   <---------------------------------
     --------------                                 |
    | Transition 1 | --------->     =State 2=       |
     --------------              ---------------    |
    | Transition 2 | -------    |  Transition   | --|
     --------------        |     ---------------    |
                           |                        |
                           |                        |
                           |                        |
                           --->     =State 3=       |
                                 ---------------    |
                                |  Transition   | ---
                                 ---------------

在这种情况下,Initial状态将在某个路径上执行,然后可以转换为Transition 1Transition 2Transition 1启动State 2Transition 2启动State 3Initial状态可以发出一个事件,说它将转换Transition 1,然后您的框架可以执行该转换。

您还会注意到我在此FSM中没有结束。你需要一个结束或一个封闭的循环。