排队论模型计算机模拟
排队论中的问题有的可以通过理论计算解决,但当理论计算难以
解决时,则可以考虑采用计算机模拟的方法解决。
问题1 收款台服务问题
该问题中顾客服务时间服从正态分布,不再是负指数分布,不能直接采用前面的
模型计算,因此我们可以考虑采用计算机模拟计算得到需要的结果。
程序见后,某次仿真结果为:
顾客平均逗留时间 13.32秒, 系统工作强度 0.659
Matlab模拟计算程序:
n=10000; %模拟顾客数
dt=exprnd(10,1,n); %到达时间间隔
st=normrnd(6.5,1.2,1,n); %服务台服务时间
%st=exprnd(2.5,1,n); %服务台服务时间
a=zeros(1,n); %每个人到达时间
b=zeros(1,n); %每个人开始接受服务时间
c=zeros(1,n);%每个人离开时间
a(1)=0;
for i=2:n
a(i)=a(i-1)+dt(i-1);%第i个人到达时间
end
b(1)=0;%第1个人开始服务时间为到达时间
c(1)=b(1)+st(1); %第1个人离开时间为服务时间
for i=2:n
if(a(i)<=c(i-1)) b(i)=c(i-1);
else b(i)=a(i);
end
c(i)=b(i)+st(i); %第i个人离开时间为其开始服务时间+接受服务时间
end
cost=zeros(1,n); %记录每个人在系统逗留时间
for i=1:n
cost(i)=c(i)-a(i); %第i个人在系统逗留时间
end
T=c(n); p=sum(st)/T; %服务率
avert=sum(cost)/n; %每个人系统平均逗留时间
fprintf('顾客平均逗留时间%6.2f秒\n',avert);
fprintf('系统工作强度%6.3f\n',p);
问题2 卸货问题
解答:该问题可以看作单服务台的排队系统。到达时间服从的是给定的离散分
布,服务时间也不服从负指数分布。不能直接利用理论公式求解,可采用计算机模
拟求解。
1. 随机到达船数的产生
首先我们需要产生每天随机到达的船数,该随机数服从离散分布
,可以先产生一个0~1之间的均匀随机数,其落在不同区间则寿命取
不同值,具体见表2 。
2. 计算机仿真分析
某次模拟结果为:
每天推迟卸货的平均船数2.68 。
下面是Matlab实现程序
1) 产生随机到达船数的函数BoatNumber.m
function X=BoatNumber
Boat=0:7; %到达船数取值范围
%到达船数概率分布
Prob=[0.05,0.1,0.1,0.25,0.20,0.15,0.1,0.05];
n=length(Prob);
Qu=zeros(1,n+1);
Qu(1)=0;
for i=1:n
Qu(i+1)=Qu(i)+Prob(i); %产生概率区间
end
Qu(n+1)=1.01;
%将最后一个数值超过1,便于后面的随机数r取到1
%产生一次到达船数
r=rand(1); %产生一个[0,1]随机变量
for i=1:n
if(r>=Qu(i)&&r
end
end
return
2) 模拟计算的主程序Boat.m
n=10000; %模拟总天数
x=zeros(n,1); %存储每天到达船数
a=zeros(n,1); %存储每天需要卸货的船数
b=zeros(n,1); %存储每天实际卸货的船数
d=zeros(n,1); %存储每天推迟卸货的船数
for i=1:n
x(i)=BoatNumber; %模拟n天到达船数
end
a(1)=x(1);
if a(1)>4 b(1)=4; %计算每天实际卸货船数
e