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



在有限状态机中,状态S1能否生成一个事件,从而触发从状态S1到另一个状态S2的转换?

从计算理论的角度来看,"纯"有限状态机的唯一功能是将输入字符串转换为N个选择中的一个(在大多数示例中,这是两个选择中的一个(接受或拒绝),但更大的N个有限值在概念上是相同的)。如果对于任何输入字符序列,两个纯有限状态机将返回相同的1 -of- n结果,则它们是等效的。从纯粹的有限状态机升级到有限状态换能器,其中每个边缘都可以导致任意数量的字符被发送到输出流,这对任何未来的状态转换没有影响。如果对任意输入字符序列生成相同的输出字符序列并返回相同的1 -of- n结果,则两台这样的机器是等价的。

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

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

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

在硬件设计中,他们谈论的是米利机器和摩尔机器,它们的不同之处在于,各种各样的有线连接回输入…

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

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

UML状态机可以有每个状态的入口()操作和退出()操作。根据实现的不同,您可以让这些操作发布额外的事件。

那么,"FSM可以触发转换吗?"取决于定义或实现。一般来说,当然!

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

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

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

你也会注意到,我没有结束在这个FSM。你需要一个末端或者闭合的环。

最新更新