数学建模03-排队论

一.排队论

排队论(queueing theory),或称随机服务系统理论,作为运筹学研究的一种有力手段,研究的内容有3个方面

  • 系统的性态,即与排队有关的数量指标的概率规律性;
  • 系统的优化问题;
  • 统计推断,根据资料合理建立模型。目的是正确设计和有效运行各个服务系统,使之发挥最佳效益。

排队论不仅在理论上达到了成熟阶段,而且其应用范围不断增加。概括起来,它已在电话交换网、公路、铁路、航空运输、工程管理、公共服务、货物存储和生产流水线过程等方面得到了广泛的应用。特别地,排队论是计算机通信网络和计算机系统中通信信息量研究的基础理论,信息系统通信问题的定量研究往往要求借助于排对论才能得到解决。

1.具体内容

1.1 排队论的基本构成与指标

排队论的基本构成:

  • 输入过程:描述顾客按照这样的规律到达排队系统。顾客总体(有限/无限)、到达的类型(单个/成批)。到达时间间隔。
  • 排队规则:指顾客按照怎样的规定次序接受服务。常见的有等待制,损失制,混合制,闭合制。
  • 服务机构:服务台的数量;服务时间服从的分布。

排队系统的数量指标:

  • 队长:系统中的平均顾客数(包括正在等待的顾客数量)。
  • 等待队长:系统中处于等待的顾客数量。
  • 等待时间:在队伍中的等待时间。
  • 逗留时间:比等待时间多一个服务时间。
  • 忙期:连续保持服务的时长。

1.2 排队论表示实例 M/M/S/∞

  • 输入过程是Poisson流,顾客到达规律服从参数为λ的Poisson分布;
  • 服务时间服从负指数分布,顾客接受服务的时间服从参数为μ的负指数分布;
  • 系统有S个服务台平行服务;
  • 系统容量为无穷大的等待制排队系统;
1.2.1 单服务台 S = 1
  • 系统的服务强度&无顾客概率&有n个顾客的概率
  • 平均队长
  • 平均等待队长
  • 平均逗留时间
  • 平均等待时间
  • Little公式
1.2.2 多服务台 S > 1
  • 服务能力和强度
  • 服务台都空闲的概率
  • 平均队长
  • 平均逗留时间
  • 平均等待时间
  • 平均等待队长
1.2.3 开始服务,到达,离开时刻和服务,等待时长的关系
  • 单服务台
  • 多服务台

2.具体实现

  • mm1.m
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

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;
  • mms.m
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)

(以上文章及代码在查看各种网课和相关资料后整理自用。)

本文地址:https://blog.csdn.net/weixin_45480903/article/details/107318846