11

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

4

2 回答 2

19

标准有限状态机只包含一个当前状态。而在 Petri 网络中,多个位置或多或少与有限状态机中的状态相当,可以包含一个或多个令牌。有限状态机是单线程的,而 Petri 网是并发的。
在有限状态机中,活动状态响应事件而改变。在 Petri 网中,只要所有输入位置都包含至少一个标记,就会执行转换。
有限状态机可以被认为是 Petri 网的一个特例。

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

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

于 2018-12-30T19:57:57.043 回答
7

在状态机中,状态是全局的。给定两个状态,您只能说“这些状态不同”。在 Petri 网中,状态是由地方构成的。状态是一个标记,表示每个地方有多少令牌。给定两个标记,您可以比较它们并说“它们在 X、Y、Z 位置相同,但在 U、V、W 位置不同”。

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

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

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

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