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

LJa*_*Jag 4 controls modeling state-machine petri-net

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

Kas*_*erg 5

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

通常,如果您的过程或您要表示的部分是单线程的,我建议您使用有限状态机。还有更多工具可以将有限状态机转换为实现。

仅在需要并发或具有更高表达能力时才使用Petri网。或者,当您在建模工厂工厂时,其中一半的零件被转化为产品,或者您的听众更熟悉此图像。
也许Petri网也可以用于建模,可视化正在运行的大型并发系统,例如微服务架构,天蓝色的服务架构可靠服务和可靠的参与者,在kubernetus上运行的服务,天蓝色的功能和AWS Lambda。
此外,与有限状态机相比,有更多关于Petri网的理论研究和使用(请注意,正如我之前所说,有限状态机可归结为Petri网)。


Rol*_*ber 5

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

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

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

至于何时使用什么,我同意 Kasper van den Berg。

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