用佩特里网设计交通灯
工作流课程作业里的一道问题: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 占用。
图中有两组交通灯,把它们分别命名为 TL1 和 TL2。假设初始状态如上图所示,此时 TL1 和 TL2 都亮红灯。开始运行后,rg1 因为两个输入 place 都被 token 占用而被触发,TL1 从红灯转至绿灯。之后,rg2 的两个输入 place 都被 token 占用,所以 TL2 也从红灯转至绿灯。然后,gy1 被触发,TL1 从绿灯转至黄灯,gy2 也因此被触发,导致 TL2 也从绿灯转至黄灯。与之前类似,此时 yr1 被触发,TL1 从黄灯转至红灯,进一步使得 yr2 被触发,TL2 也从黄灯转至红灯。此时已恢复至初始状态,完成一个周期。此过程可以不断循环。