[数学建模]数学建模算法和模型(B站视频)(七)

版权声明:未经许可,请勿转载 https://blog.csdn.net/glpaichiyu/article/details/82813036

[数学建模]数学建模算法和模型(B站视频)(七)

排队论

模型背景

排队论发源于上世纪初。当时美国贝尔电话公司发明了自动电话,以适应日益繁忙的工商业电话通讯需要。这个新发明带来了一个新问题,即通话线路与电话用户呼叫的数量关系应如何妥善解决,这个问题久久未能解决。
1909年,丹麦的哥本哈根电话公司A.K.埃尔浪(Erlang)在热力学统计平衡概念的启发下解决了这个问题。

排队现象

到达顾客 服务内容 服务机构
病人 诊断/手术 医生/手术台
进港的货船 装货/卸货 码头泊位
到港的飞机 降落 机场跑道
电话拨号 通话 交换台
故障机器 修理 修理技工
修理技工 领取修配 零件仓库管理员
上游河水 入库 水闸管理员

模型介绍

(1)由于顾客到达和服务时间的随机性,
现实中的排队现象几乎不可避免;
(2)排队过程,通常是一个随机过程,
排队论又称“随机服务系统理论”;

排队服务过程

在这里插入图片描述

排队系统的要素

(1)顾客输入过程;
(2)排队结构与排队规则;
(3)服务机构与服务规则;

顾客输入过程

顾客源(总体):有限/无限;
顾客到达方式:逐个/逐批;(仅研究逐个情形)
顾客到达间隔:随机型/确定型;
顾客前后到达是否独立:相互独立/相互关联;
输入过程是否平稳:平稳/非平稳;(仅研究平稳性)
在这里插入图片描述

排队结构与排队规则

顾客排队方式:等待制/即时制(损失制);
排队系统容量:有限制/无限制;
排队队列数目: 单列/多列;
是否中途退出: 允许/禁止;
是否列间转移: 允许/禁止;
(仅研究禁止退出和转移的情形)

服务机构与服务规则

服务台(员)数目;单个/多个;
服务台(员)排列形式;并列/串列/混合;
服务台(员)服务方式;逐个/逐批;(研究逐个情形)
服务时间分布;随机型/确定型;
服务时间分布是否平稳:平稳/非平稳;(研究平稳情形)
在这里插入图片描述

服务台(员)为顾客服务的顺序:
a)先到先服务(FCFS);
b)后到先服务(LCFS);
c)随机服务;
d)优先服务;

到达间隔和服务时间典型分布
(1)泊松分布M ;
(2)负指数分布M ;
(3)k阶爱尔朗分布Ek;
(4)确定型分布D;
(5)一般服务时间分布G;

排队模型示例
——M/M/1,M/D/1,M/ Ek /1;
——M/M/c,M/M/c/∞/m,
——M/M/c/N/∞,。。。

(一)系统运行状态参数

系统状态N(t)
——指排队系统在时刻t时的全部顾客数N(t),包括“排队顾客数”和“正被服务顾客数”;
系统状态概率:

(1)瞬态概率Pn(t)
——表示时刻t系统状态N(t)=n 的概率;

(2) 稳态概率Pn
——Pn=Pn(t);
——一般排队系统运行了一定长的时
间后,系统状态的概率分布不再随时间
t变化,即初始时刻(t=0)系统状态的
概率分布(Pn(0),n>>0)的影响将消失。

(二)系统运行指标参数

——评价排队系统的优劣。

1、队长与排队长

(1)队长: 系统中的顾客数(n)期望值记为Ls ;

(2)排队长: 系统中排队等待服务的顾客数;
期望值记为Lq

2、逗留时间与等待时间

(1)逗留时间:
——指一个顾客在系统中的全部停留时间;
期望值,记为Ws

(2)等待时间:
——指一个顾客在系统中的排队等待时间;
期望值,记为Wq
Ws = Wq + E[服务时间]

3、其他相关指标

(1)忙期: 指从顾客到达空闲服务机构起到服务
机构再次空闲的时间长度;

(2)忙期服务量:指一个忙期内系统平均完成
服务的顾客数;

(3)损失率: 指顾客到达排队系统,未接受服务
而离去的概率;

(4)服务强度:ρ= λ/sμ;

顾客到达时间间隔分布

——————————————泊松流与泊松分布

满足条件

如果顾客到达满足如下条件,则称为泊松流:
(1) 在不相互重叠的时间区间内,到达顾客数
相互独立(无后效性).
(2) 对于充分小的时间间隔内,到达
1个顾客的概率与t无关,仅与时间间隔
成正比(平稳性):
(3) 对于充分小的时间间隔,2个及以
上顾客到达的概率可忽略不计(普通性)。

分布方式

1.泊松流到达间隔服从负指数分布
若顾客到达间隔T的概率密度为
在这里插入图片描述
则称T服从负指数分布,分布函数如下:
在这里插入图片描述
若顾客流是泊松流时,顾客到达的时间间隔
服从上述负指数分布
E[T]=1/λ; Var[T]=1/λ2; σ[T]=1/λ

2.顾客服务时间分布服从负指数分布

(1) 对一个顾客的服务时间Ts,等价于相邻两个顾客离开排队系统的时间间隔。若Ts服从负指数分布,其概率密度和分布函数分别为
在这里插入图片描述
则E[Ts]=1/μ; Var[Ts]=1/ μ2; σ[Ts]=1/ μ
(2) E[Ts]=1/μ:每个顾客的平均(期望)服务时间;
μ:单位时间服务的顾客数,平均(期望)服务率;

3.单服务台负指数分布M/M/1排队系统

模型的条件是:

1、输入过程――顾客源是无限的,顾客到达完全是随机的,单个到来,到达过程服从泊松分布且是平稳的

2、排队规则――单队,且队长没有限制,先到先服务

3、服务机构――单服务台,服务时间的长短是随机的,服从相同的指数分布

对于M/M/1模型有如下公式:

在这里插入图片描述

例题:
某医院急诊室同时只能诊治一个病人,诊治时间服从指数分布,每个病人平均需要15分钟。病人按泊松分布到达,平均每小时到达3人。试对此排队队系统进行分析。

解:
对此排队队系统分析如下:
(1)先确定参数值:这是单服务台系统,有:
故服务强度为:
在这里插入图片描述
故服务强度为:
在这里插入图片描述
计算稳态概率:
在这里插入图片描述
这就是急诊室空闲的概率,也是病人不必等待立即就能就诊的概率。而病人需要等待的概率则为:
ρ =1− P0 = 0.75
这也是急诊室繁忙的概率。
(2)计算系统主要工作指标。
急诊室内外的病人平均数:
在这里插入图片描述
急诊室外排队等待的病人平均数:
在这里插入图片描述
病人在急诊室内外平均逗留时间:
在这里插入图片描述
病人平均等候时间:

4.M/M/S模型
此模型与M/M/1模型不同之处在于有S个服务台,各服务台的工作相互独立,服务率相等,如果顾客到达时,S个服务台都忙着,则排成一队等待,先到先服务的单队模型。

整个系统的平均服务率为sμ,ρ=λ/sμ,(ρ<1)为该系统的服务强度。

状态概率
在这里插入图片描述

主要运行指标
在这里插入图片描述

系统状态N ≥S的概率
在这里插入图片描述

例题:
承接例1,假设医院增强急诊室的服务能力,使其同时能诊治两个病人,且平均服务率相同,试分析该系统工作情况。

解:
这相当于增加了一个服务台,故有:
S=2,λ=3人/h,μ=4人/h
在这里插入图片描述
在这里插入图片描述
病人必须等候的概率,即系统状态N≥2的概率:
在这里插入图片描述

代码:(只需输入μ和λ和s)


s=2;
mu=4;
lambda=3;
ro=lambda/mu;
ros=ro/s;
sum1=0;

for i=0:(s-1)
    sum1=sum1+ro.^i/factorial(i);
end

sum2=ro.^s/factorial(s)/(1-ros);

p0=1/(sum1+sum2);
p=ro.^s.*p0/factorial(s)/(1-ros);
Lq=p.*ros/(1-ros);
L=Lq+ro;
W=L/lambda;
Wq=Lq/lambda;
fprintf('排队等待的平均人数为%5.2f人\n',Lq)
fprintf('系统内的平均人数为%5.2f人\n',L)
fprintf('平均逗留时间为%5.2f分钟\n',W*60)
fprintf('平均等待时间为%5.2f分种\n',Wq*60)

修改程序例题:
某医院挂号室有个窗口,就诊者的到达服从泊松分布,平均到达率为每分钟0.9人,挂号员服务时间服从指数分布,平均服务率每分钟0.4人,现假设就诊者到达后排成一队,依次向空闲的窗口挂号,显然系统的容量和顾客源是不限的,属于M/M/S型的排队服务模型。求:该系统的运行指标 :
在这里插入图片描述

解:
在这里插入图片描述

将前三行代码修改为:

s=3;
mu=24;
lambda=54;

输出结果:

排队等待的平均人数为 1.70人
系统内的平均人数为 3.95人
平均逗留时间为 4.39分钟
平均等待时间为 1.89分种

可得:
(1)整个挂号间空闲的概率

在这里插入图片描述
在这里插入图片描述

附件:MM1代码:

clear 
clc 
%***************************************** 
%初始化顾客源 
%***************************************** 
%总仿真时间 
Total_time = 10; 
%队列最大长度 
N = 10000000000; 
%到达率与服务率 
lambda = 10; 
mu = 6; 
%平均到达时间与平均服务时间 
arr_mean = 1/lambda; 
ser_mean = 1/mu; 
arr_num = round(Total_time*lambda*2); 
events = []; 
%按负指数分布产生各顾客达到时间间隔 
events(1,:) = exprnd(arr_mean,1,arr_num); 
%各顾客的到达时刻等于时间间隔的累积和 
events(1,:) = cumsum(events(1,:)); 
%按负指数分布产生各顾客服务时间 
events(2,:) = exprnd(ser_mean,1,arr_num); 
%计算仿真顾客个数,即到达时刻在仿真时间内的顾客数 
len_sim = sum(events(1,:)<= Total_time); 
%***************************************** 
%计算第 1个顾客的信息 
%***************************************** 
%第 1个顾客进入系统后直接接受服务,无需等待 
events(3,1) = 0; 
%其离开时刻等于其到达时刻与服务时间之和 
events(4,1) = events(1,1)+events(2,1); 
%其肯定被系统接纳,此时系统内共有 
%1个顾客,故标志位置1 
events(5,1) = 1; 
%其进入系统后,系统内已有成员序号为 1 
member = [1]; 
for i = 2:arr_num 
%如果第 i个顾客的到达时间超过了仿真时间,则跳出循环 

if events(1,i)>Total_time 

break; 

else 
number = sum(events(4,member) > events(1,i)); 
%如果系统已满,则系统拒绝第 i个顾客,其标志位置 0 
if number >= N+1 
events(5,i) = 0; 
%如果系统为空,则第 i个顾客直接接受服务 
else 
if number == 0 
%其等待时间为 0

2009.1516

%PROGRAMLANGUAGEPROGRAMLANGUAGE
events(3,i) = 0; 
%其离开时刻等于到达时刻与服务时间之和 
events(4,i) = events(1,i)+events(2,i); 
%其标志位置 1 
events(5,i) = 1; 
member = [member,i]; 
%如果系统有顾客正在接受服务,且系统等待队列未满,则 第 i个顾客进入系统 

else len_mem = length(member); 
%其等待时间等于队列中前一个顾客的离开时刻减去其到 达时刻 
events(3,i)=events(4,member(len_mem))-events(1,i); 
%其离开时刻等于队列中前一个顾客的离开时刻加上其服 
%务时间 
events(4,i)=events(4,member(len_mem))+events(2,i); 
%标识位表示其进入系统后,系统内共有的顾客数 
events(5,i) = number+1; 
member = [member,i]; 
end 
end 

end 
end 
%仿真结束时,进入系统的总顾客数 
len_mem = length(member); 
%***************************************** 
%输出结果 
%***************************************** 
%绘制在仿真时间内,进入系统的所有顾客的到达时刻和离 
%开时刻曲线图(stairs:绘制二维阶梯图) 
stairs([0 events(1,member)],0:len_mem); 
hold on; 
stairs([0 events(4,member)],0:len_mem,'.-r'); 
legend('到达时间 ','离开时间 '); 
hold off; 
grid on; 
%绘制在仿真时间内,进入系统的所有顾客的停留时间和等 
%待时间曲线图(plot:绘制二维线性图) 
figure; 
plot(1:len_mem,events(3,member),'r-*',1: len_mem,events(2,member)+events(3,member),'k-'); 
legend('等待时间 ','停留时间 '); 
grid on;

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/glpaichiyu/article/details/82813036