复盘之GSDN模型(或称随机Petri网)的数学原理求解

在2024年某校妈妈杯校赛中,我们碰到了高铁安检流程优化问题,类似2017年美赛的机场安检流程评估与优化。我们查阅前人论文发现,他们采用petri网+随机过程处理的此问。

以下是本人在使用gsdn模型查阅的资料,并为运用进行举例,观点并不一定正确,如有错误还请指出。

想要准确了解GSDN模型及概念可以查阅 :  [4]张建东,高晓光,吴勇,朱岩.GSPN 的分析方法及其应用[J].火力与指挥控制,2005,30(5):27-31。

如有错误非常抱歉!!

一、对 Petri Net 以及GSDN模型简要介绍

Petri网是对离散并行系统的数学表示。Petri网是20世纪60年代由卡尔·A·佩特里发明的,适合于描述异步的、并发的计算机系统模型。 Petri网既有严格的数学表述方式,也有直观的图形表达方式,既有丰富的系统描述手段和系统行为分析技术,又为计算机科学提供坚实的概念基础。(摘自百度百科)

简单的来说,通过有向弧构建网络图,通过设置其中库所(place)可容纳token数以及网络总token数,来模拟每一步中token是否发生变迁(从一个库所到另一个库所)。具体可见Petri网建模技术基础入门学习-CSDN博客

在此提供一个简单的Petri Net 在matlab上运行的代码。 (鸣谢大佬,非原创,侵权可删,只是想为后来人指路>_<)

(以及我只是一下子找不到大佬id了呜呜呜)

%%petri网动态运行仿真程序
%%计算结果:变迁激发列表fired_t_list,记录激发的变迁;系统状态变化情况sys_state,记录变迁激发后各库所的令牌分布情况
%%作者:izzet
%%
clc;
close all;
clear
P=(1:13);
T=(13:25);
F = [[P(1),T(1)];[T(1),P(2)];[P(2),T(2)];[T(2),P(3)];[P(3),T(3)];[T(3),P(4)];[P(4),T(4)];[T(4),P(5)];[P(5),T(5)];[T(5),P(6)];
    [P(6),T(11)];[T(11),P(12)];[T(2),P(7)];[P(7),T(7)];[T(7),P(8)];[P(8),T(8)];[T(8),P(10)];
    [P(10),T(11)];[P(8),T(9)];[T(9),P(9)];[P(9),T(10)];[T(10),P(10)]];
M=[Inf 2 1 3 2 1 5 1 3 4 4 2 4]; %初始令牌分布
K=[Inf 10 31 23 Inf 25 Inf 19 Inf 18 Inf Inf Inf]; %各库所容量函数
W=[2 1.5 2 3 1 1 1 0.99 1 1]; %权函数
sys_state=M;
fired_t_list=[];

%pre_set={}; %变迁前集初始化
%post_set={}; %变迁后集初始化
pre_set = cell(1, length(T));    % 变迁前集初始化
post_set = cell(1, length(T));   % 变迁后集初始化

for i = 1:length(T)
    pre_set{i} = [];    % 初始化为空数组
    post_set{i} = [];   % 初始化为空数组
end
for i=1:length(T)
    u=1;
    v=1;
    for j=1:length(F)
        if F(j,2)==T(i)
            pre_set{T(i)}(u)=F(j,1);
            u=u+1;
        end
        if F(j,1)==T(i)
            post_set{T(i)}(v)=F(j,2);
            v=v+1;
        end
    end
end
%%   
main_switch = 0;  % 定义变量 main_switch,并初始化为 0

while main_switch == 0
    enable_t = T;  % 可激发变迁集合初始化,一开始假设所有变迁均可激发

   
   for i = 1:length(T)
        pre_switch = 0;  % 初始化前集开关为 0
        
        for j = 1:(u-1)  % 变迁前集条件考察
            arc = find(ismember(F, [pre_set{T(i)}(j), T(i)], 'rows'));
            
            if M(pre_set{T(i)}(j)) < W(arc)
                ind = find(enable_t == T(i));
                enable_t(ind) = [];
                pre_switch = 1;
                break;  % 一票否决制
            end
        end
    
        if pre_switch == 1
            continue;  % 当前变迁不满足前集条件,跳过后续操作,进行下一轮循环
        end
        
end
        for j = 1:(v-1)  % 变迁后集条件考察
            arc = find(ismember(F, [T(i+12), post_set{T(i+12)}(j)], 'rows'));
            
            if M(post_set{T(i+12)}(j)) + W(arc) > K(post_set{T(i+12)}(j))
                ind = find(enable_t == T(i+12 ));
                enable_t(ind) = [];
                break;  % 一票否决制
            end
        end
    
    
    % 在这里添加根据一些条件更新 main_switch 的代码
    

    if isempty(enable_t)
        main_switch=1;
    else
        fired_t=enable_t(1); %特别处理
        fired_t_list=[fired_t_list fired_t]; %该该变迁添加至列表
        fired_t_pre=pre_set{fired_t}; %找出该变迁前集
        fired_t_post=post_set{fired_t}; %找出该变迁后集
        for i=1:length(P)
            if ismember(P(i),setdiff(fired_t_pre,fired_t_post))
                arc=find(ismember(F,[P(i),fired_t],'rows'));
                M(i)=M(i)-W(arc);
            elseif ismember(P(i),setdiff(fired_t_post,fired_t_pre))
                arc=find(ismember(F,[fired_t,P(i)],'rows'));
                M(i)=M(i)+W(arc);
            elseif ismember(P(i),intersect(fired_t_post,fired_t_pre))
                arc1=find(ismember(F,[P(i),fired_t],'rows'));
                arc2=find(ismember(F,[fired_t,P(i)],'rows'));
                M(i)=M(i)-W(arc1)+W(arc2);
            else
                M(i)=M(i);
            end
        end
        sys_state=[sys_state;M];
    end
    end

而GSDN模型,则是在petri网的流程基础上,增加有着一定发生概率的变迁。如安检问题中,存在行李检测出危险物品/需要复检的可能性,因此可以采用GSDN模型做出研究。

二、GSDN的数学模型建立——马尔科夫链

因为GSDN存在有着发生概率的变迁,其迭代过程(每一步变迁)在数学模型上类似马尔科夫链变迁过程。实际上,因为概率的存在,并不便于进行 Petri Net 的模拟,而是根据数学原理搭建同构马尔科夫链,进行计算。

例一:(引用论文模型 [1])

如图,其中a1、a2表示两个随机事件发生概率,会变迁至不同的库所。而 v1~v11 则是各个变迁的引发速率(可以用 1/T 统一表示,T为该事件从发生到完成所需时间)

接着,根据变迁关系,列方程组

通过矩阵计算,能够得出 p1~p11 即每个状态的稳定概率。

下图是上式所用数据以及最终求解:

上述牵扯到两个随机过程,下面再举一个只包含一个随机过程的简单案例,供大家参考如何列方程组:

例二:(引用论文模型 [2])

三、根据求得稳定概率,对模型分析

其次,通过求得的稳定概率,我们能对该GSDN模型进行分析:

①平均token数:表示托肯出现在库所 X 的概率值的期望.平均托肯数越大,则旅客安检过程中 处于这个状态的概率越大,当token处于这个时间较长时,表示大部分时间被这一库所占用,则这一点 即为瓶颈。

②变迁利用率:变迁利用率这个值等于使变迁 t 处于可实施状态的所有状态标识的稳定概率之和.变迁 t 的利用率越大,触发该活动的可实施状态概率越大,流程中等待该变迁的token数量越大,等待(排队)时间越长。

四、参考文献

[1]黄艳红,汪凯,陈梦倩,等.基于Petri网模型的机场安检口客流量优化[J].上海工程技术大学学报,2017,31(02):154-160.

[2]孙霞,缪玉婷,张洁.随机Petri网在煤矿水害处理流程中的应用研究[J].煤矿机械,2023,44(11):183-185.DOI:10.13436/j.mkjx.202311054.

[3]张建东,高晓光,吴勇,朱岩.GSPN 的分析方法及其应用[J].火力与指挥控制,2005,30(5):27-31

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值