资源简介
编写此代码的目的是解决17年美赛D题,采用排队论模型进行仿真,计算出各个区域的总耗费时间,找出瓶颈区域和解决方案,代码为原创,是多通道多服务台混联式模型,谢谢支持。
代码片段和文件信息
clear
clc
%% MMK∞和单队列多通道—多服务台混联式(即在每一个通道上,每个区域的服务台保持串联,而同一个区域内有多个服务台并联)
N=100;%乘客总数
M=4;%有4个串联的区域
u=0.45;%大约有45%的乘客会选择PC通道(Pre-Check)
lambda0=4.65;%乘客的到达率(每分钟平均到达4.65人)
%%
%乘客的平均到达时间
l0=1/lambda0;
%常规区域的平均服务时间,时间单位均为分钟
lambda1=11.21/60;%第一个区域有两个服务台但是这里为了简化模型,假设两个服务台的服务时间是完全一样的
lambda2=13.2/60;
lambda3=27/60;
lambda4=13.2/60;
%PC通道的平均服务时间,由于乘客不用移除衣物和一些个人物品,所以将lambda2和lambda4的时间减少25%
lambda1_PC=11.21/60;%第一个区域有两个服务台但是这里为了简化模型,假设两个服务台的服务时间是完全一样的
lambda2_PC=13.2/60*0.75;
lambda3_PC=27/60;
lambda4_PC=13.2/60*0.75;
%%
%按负指数分布产生各乘客到达的时间间隔
arr_interval= exprnd(l01N);
%各乘客的到达时刻等于时间间隔的累积和
arr_moment= cumsum(arr_interval);
%产生45个随机数,代表选择PC的乘客的编号
r=randperm(10045);
r=sort(r);
%按负指数分布产生每个乘客在常规通道各区域的服务时间serve(ij)表示第i个乘客在第j个区域的服务时间//此处第一个区域有两个服务台但是这里为了简化模型,假设两个服务台的服务时间是完全一样的
serve(:1)=exprnd(lambda11N)‘;
serve(:2)=exprnd(lambda21N)‘;
serve(:3)=exprnd(lambda31N)‘;
serve(:4)=exprnd(lambda41N)‘;
%按负指数分布产生每个乘客在PC通道各区域的服务时间serve(ij)表示第i个乘客在第j个区域的服务时间//此处第一个区域有两个服务台但是这里为了简化模型,假设两个服务台的服务时间是完全一样的
PC_serve(:1)=exprnd(lambda1_PC1N)‘;
PC_serve(:2)=exprnd(lambda2_PC1N)‘;
PC_serve(:3)=exprnd(lambda3_PC1N)‘;
PC_serve(:4)=exprnd(lambda4_PC1N)‘;
%%
%第i个乘客在常规通道第j个区域花费的时间为A1(ij)(i=1:100j=1:4花费的时间等于服务的时间加上等待的时间)
%第i个乘客离开常规通道第j个区域的时刻为B1(ij)
%在SLM的基础上做点修改简化下代码//在这一节编程的时候就直接用“C”矩阵了
%第i个乘客在PC通道第j个区域花费的时间为A2(ij)(i=1:100j=1:4花费的时间等于服务的时间加上等待的时间)
%第i个乘客离开PC通道第j个区域的时刻为B2(ij)
%在假设不计区域之间花费的时间的条件下有这样一个关系:到达第j个区域的时刻等于离开第j-1个区域的时刻
%a1,a2分别用来记录乘客离开常规通道和PC通道内第一区域的两个服务台的时刻为了简化,假设乘客遇到两个服务台时(即使两个都是空的)会选择乘客先行离开的那个服务台
a1=zeros(12);
a2=zeros(12);
A1=zeros(NM);
A2=zeros(NM);
C1=zeros(N5);
C2=zeros(N5);
C1(:1)=arr_moment‘;
C2(:1)=arr_moment‘;
if r(1)~=1
A1(1:)=serve(1:);
C1(12)=A1(11)+C1(11);
a1(1)=C1(12);
for j=2:4
C1(1j+1)=C1(1j)+A1(1j);
end
else
A2(1:)=PC_serve(1:);
C2(12)=A2(11)+C2(11);
a2(1)=C2(12);
for j=2:4
C2(1j+1)=C2(1j)+A2(1j);
end
end
for i=2:N
f
- 上一篇:排队论仿真代码
- 下一篇:Matlab实现小波去噪
评论
共有 条评论