数学建模之排队论模型·三更

数学建模之排队论模型·三更

二、 排队论的计算机模拟

排队论中的问题有的可以通过理论计算解决,有的则需要通过计算机模拟计算得到。当理论计算难以解决时,则可以考虑采用计算机模拟计算的方法来解决。

分析:该问题中顾客服务时间服从正态分布,不再是负指数分布,不能直接采用前面的模型计算,因此我们可以考虑采用计算机模拟计算得到需要的结果。

该问题可以从开始时刻计,当有人到达产生一个事件,当有人离开产生一个事件。当有人到达时,记录其开始接受服务时刻和离开服务台的时刻,从而可以计算出每个人在系统逗留的时间,以及每个人在系统接受服务的时间,从而统计出每个人在收款台的平均逗留时间和系统的服务强度。

这里我们可以依次考虑每一个人,考察其到达时刻,开始接受服务时刻和离开时刻

使仿真变得更方便。

上式的意义是当后一个人到达时刻比前一个人离开时刻晚,则其开始接受服务时间就是其到达时间;当后一个人到达时刻比前一个人离开时刻早,则其开始接受服务时间就是前一个人的离开时刻。

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);%如果第i个人到达时间比前一个人离开时间

%早,则其开始服务时间为前一人离开时间

else b(i)=a(i); %如果第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);

某次仿真结果为:

顾客平均逗留时间 13.32秒

系统工作强度 0.659

解答:该问题可以看作单服务台的排队系统。到达时间不服从负指数分布,服从的是给定的离散分布,服务时间也不服从负指数分布,是定长时间服务。不能直接利用理论公式求解,可采用计算机模拟求解。

下面是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<Qu(i+1)) X=Boat(i); %获得到达船数

end

end

return

模拟计算的主程序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; %计算每天实际卸货船数

else b(1)=a(1);

end

d(1)=a(1)-b(1);

for i=2:n

a(i)=x(i)+d(i-1); %计算每天需要卸货的船数

if a(i)>4 b(i)=4; %计算每天实际卸货船数

else b(i)=a(i); end

d(i)=a(i)-b(i);

%计算每天推迟卸货的船数

end

Total=sum(d); %计算总共推迟卸货船数

Aver=Total/n; %计算每天推迟卸货的平均船数

fprintf('每天推迟卸货的平均船数%6.2f\n',Aver);

某次模拟结果为:

每天推迟卸货的平均船数2.68

多次模拟计算,每天推迟卸货的平均船数大约在2.75艘左右。

问题3 眼科病床的合理安排(2009B)

医院就医排队是大家都非常熟悉的现象,它以这样或那样的形式出现在我们面前,例如,患者到门诊就诊、到收费处划价、到药房取药、到注射室打针、等待住院等,往往需要排队等待接受某种服务。

我们考虑某医院眼科病床的合理安排的数学建模问题。

该医院眼科门诊每天开放,住院部共有病床79张。该医院眼科手术主要分四大类:白内障、视网膜疾病、青光眼和外伤。附录中给出了2008年7月13日至2008年9月11日这段时间里各类病人的情况。

白内障手术较简单,而且没有急症。目前该院是每周一、三做白内障手术,此类病人的术前准备时间只需1、2天。做两只眼的病人比做一只眼的要多一些,大约占到60%。如果要做双眼是周一先做一只,周三再做另一只。

问题:有人从便于管理的角度提出建议,在一般情形下,医院病床安排可采取使各类病人占用病床的比例大致固定的方案,试就此方案,建立使得所有病人在系统内的平均逗留时间(含等待入院及住院时间)最短的病床比例分配模型。

因此我们得到总的非线性整数规划模型为:

发布于 2019-08-28 14:05