用佩特里网设计交通灯

工作流课程作业里的一道问题:Make some changes to the following figure, to make the two sets of traffic lights change their status in turn。(下图出自 Workflow Management: Models, Methods, and Systems 这本书。)

这是一种被称为「佩特里网」(Petri Net)的描述方法,包含 place(用圆圈表示)、token(用黑点表示)和 transition(用方形表示)等基本组件。我对于该问题的解法如下:

图中的每个 transition 都有两个输入 place 和两个输出 place,假设每个 transition 在其输入 place 都含有 token 时才能被触发,之后两个输出 place 都被 token 占用。

图中有两组交通灯,把它们分别命名为 TL1TL2。假设初始状态如上图所示,此时 TL1TL2 都亮红灯。开始运行后,rg1 因为两个输入 place 都被 token 占用而被触发,TL1 从红灯转至绿灯。之后,rg2 的两个输入 place 都被 token 占用,所以 TL2 也从红灯转至绿灯。然后,gy1 被触发,TL1 从绿灯转至黄灯,gy2 也因此被触发,导致 TL2 也从绿灯转至黄灯。与之前类似,此时 yr1 被触发,TL1 从黄灯转至红灯,进一步使得 yr2 被触发,TL2 也从黄灯转至红灯。此时已恢复至初始状态,完成一个周期。此过程可以不断循环。

Updated: