介绍Petri网的元素:
(1)库所(place):圆形节点
(2)变迁(transition0):方形节点
(3)有向弧(connection):库所与变迁之间的有向弧线
(4)托肯(token):库所中的动态对象,可以从一个库所移动到另一个库所
Petri网规则:
如果某一个变迁的所有前驱库所都有托肯,则这个变迁满足发射条件;变迁发射时,从它所有的前驱库所里分别取出1个托肯,同时往它所有的后继库所里面分别放置1个托肯,以此类推;
如图:图中变迁"1"不满足发射条件,由一个前驱库所中托肯数目为0.
有两个或多个变迁都被允许的可能,但是一次只能发生一个变迁。随机数确定发生的变迁
如果出现一个变迁,其输入库所的个数与输出库所的个数不相等,令牌的个数将发生变化,即就是,消耗托肯数目=前驱库所数目-后继库所数目
两个变迁争夺一个托肯的情形被称之为冲突。当发生冲突的时候,由于Petri网的时序是不确定的,因此具体哪个变迁得以发生也是不确定的。实际应用中,往往需要避免这种情形。用于描述现象的Petri网也可能自然出现冲突,这表明我们对于变迁发生的条件没有完全了解。
Petri是静态的,也就是说,不存在发生了一个变迁之后忽然冒出另一个变迁或者库所,从而改变Petri网结构的可能。
Petri网的状态由托肯在库所的分布决定。也就是说,变迁发生完毕、下一个变迁等待发生的时候才有确定的状态,正在发生变迁的时候是没有一个确定的状态的。
编程:
Place类(库所):序号,托肯数目
Transition类(变迁):序号,前驱库所数组,后继库所数组
Main主程序:全局变量:Petri网中的Place数组和Transition数组
a.初始化Place数组;
b.初始化Transition数组;
c.判断当前状态下是否存在满足发射条件的变迁,并随机选择一个满足发射条件的变迁执行d;
d.对一个指定的变迁进行发射,内容是将这个变迁的所有前驱库所中的托肯数目均减1,所有后继库所中的数目均加1,消耗的托肯数目是前驱库所数目-后继库所数目,完成
e.若要继续进行c