【发布时间】:2018-12-30 19:29:32
【问题描述】:
它们都代表系统可以采取的不同状态。那么Petri网和有限状态机有什么区别呢?什么时候使用 Petri 网,什么时候使用有限状态机?
【问题讨论】:
标签: controls modeling state-machine petri-net
它们都代表系统可以采取的不同状态。那么Petri网和有限状态机有什么区别呢?什么时候使用 Petri 网,什么时候使用有限状态机?
【问题讨论】:
标签: controls modeling state-machine petri-net
标准有限状态机只包含一个当前状态。而在 Petri 网络中,多个位置(或多或少与有限状态机中的状态相当)可以包含一个或多个令牌。有限状态机是单线程的,而 Petri 网是并发的。
在有限状态机中,活动状态响应事件而改变。在 Petri 网中,只要所有输入位置都包含至少一个标记,就会执行转换。
有限状态机可以看作是 Petri 网的一个特例。
一般来说,如果您的进程或您希望表示的部分是单线程的,我建议使用有限状态机:其他软件工程师可能更熟悉有限状态机;还有更多工具可以将有限状态机转换为实现。
仅当您需要并发性或额外的表现力时才使用 Petri 网。或者,当您为工厂建模时,其中一半的制造物被转化为产品,或者当您的观众更熟悉此图像时。
也许 Petri 网也可以用于建模、可视化运行的海量并发系统,例如微服务架构、Azure Service Fabric 可靠服务和可靠参与者、运行在 kubernetus 上的服务、Azure 函数和 AWS Lambda。
此外,关于 Petri 网的理论研究和使用比关于有限状态机的研究更多(请注意,正如我之前所说,有限状态机可以简化为 Petri 网)。
【讨论】:
在状态机中,状态是全局的。给定两个状态,您只能说“这些状态不同”。在 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 的观点。
【讨论】: