Petri网和有限状态机有什么区别?

What's the difference of Petri Nets and Finite State Machines?

它们都代表系统可以采取的不同状态。那么Petri网和有限状态机有什么区别呢?什么时候用 Petri 网,什么时候用有限状态机?

标准的有限状态机只包含一个当前状态。而在 Petri 网中,多个位置(或多或少类似于有限状态机中的状态)可以包含一个或多个标记。有限状态机是单线程的,而 Petri 网是并发的。
在有限状态机中,活动状态会根据事件发生变化。在 Petri 网中,只要所有输入位置至少包含一个标记,就会执行转换。
有限状态机可以看作是Petri网的特例。

一般来说,如果您的进程或您希望表示的部分是单线程的,我建议您使用有限状态机:同行软件工程师可能更熟悉有限状态机;并且有更多工具可以将有限状态机转换为实现。

仅当您需要并发性或额外的表现力时才使用 Petri 网。或者当您正在为工厂建模时,其中一半的制造品被转化为产品,或者当您的观众更熟悉此图像时。
也许 Petri 网还可以用于建模、可视化 运行、大规模并发系统,例如微服务架构、azure service fabric 可靠服务和可靠参与者、kubernetus 上的服务 运行、azure function 和 AWS Lambda .
此外,与有限状态机相比,关于 Petri 网的理论研究和使用更多(请注意,正如我之前所说,有限状态机可简化为 Petri 网)。

在状态机中,状态是全局的。给定两个状态,你只能说 "these states are different"。在 Petri 网中,状态由位置构成。状态是一个标记,表示每个地方有多少令牌。给定两个标记,你可以比较它们并说 "they are the same in places X,Y,Z but differ in places U,V,W".

定义 FSM 时,您必须单独查看每个状态并确定到其他状态的可能转换。 Petri 网中的每个转换代表底层可达图中的一整组转换。例如,Petri 网转换可能会说:从每个在 P1 中有一个标记和在 P2 中有一个标记的标记,该模型可以得出一个标记,在 P1 中少一个标记,在 P2 中少一个标记,但在 P2 中少一个标记,但多一个标记在 P3。如果可达性图中有 8 个或 800 个带有 属性 的标记,则单个 Petri 网转换表示可达性图中的 8 个或 800 个转换。

在 Petri 网模型中,您可以创建转移不变量。这些是可达图中的循环。然后你可以在模型的初始标记中放入更多的令牌,可达图中的状态数量爆炸。它的结构仍然由与具有较少标记的模型中相同的循环给出,并且 Petri 网模型仍然可以理解。 例如,考虑一个 Client/Server 系统。您有供客户端使用的位置、供服务器使用的位置、供来回流动的消息使用的位置。然后,您只需输入要建模的客户端和服务器数量的标记。它们很容易改变。

至于什么时候用什么,我同意Kasper van den Berg的观点。

  • 如果您遇到的问题小到可以用 FSM 处理,那么就使用 FSM。也许多达两打州?
  • 如果您遇到自然映射到 FSM 的问题,请使用 FSM。在这种情况下,您可能会使用一种算法来构建 FSM。例如,使用正则表达式解析输入。 (顺便说一句,许多正则表达式库的扩展至少需要一台堆栈机器来处理。)
  • 如果您需要为相互交互的可区分子系统创建模型,请使用 Petri 网。然后您可以为每个子系统设置一组位置,而 FSM 会要求您为每个子系统中每个子状态的每个可能组合创建一个新状态。