目标 :学会 MM1模型
再进行推广 ,完成机场第三问
假设
这两个模型假设顾客抵达与服务时间为指数分布
,时间流程为泊松过程
,
论文
论文中需要写的假设
-
根据统计学规律,在一段时间之内,各个航班到达的乘客前往出租车乘车区域乘车的人数符合泊松分布。
-
根据统计学规律,每一个到达航班的需要乘坐出租车的乘客到达出租车乘车等候区的时间满足正
态分布。
生灭过程
The Birth-and-Death Process
. 为了得出M/M/1 及 M/M/S的一般公式,笔者认为有必要简单推导下…… 该模型为连续时间马尔可夫过程
(continuous time Markov chain),要介绍全很困难,这里就给一个简易推导。
在排队论中,“生” 指的是 客抵达系统,“灭”指的是客离开系统,生灭过程的系统状态 N(t)
此时顾客在t时候的顾客数量
有以下的假设:
- 当前状态 N(t)=n 直接到下一过程顾客来的时间的概率分布为
指数分布
,参数 λ n \lambda_n λn (n=0,1,2,…) - 当前状态下N(t) =n直到下一位顾客来的时间为
指数分布
,参数为 μ n \mu_n μn(n=0,1,2,…) - 前两者的分布独立,下一次的状态的转换为
或者
取决于两个时间的长短。
还可以这么表示:
在稳态队列
的情况下: 任何系统状态的进出速率应该相当。
举一个例子,系统在状态0的情况下:
从状态0转移到状态1(没有顾客到一个顾客)时,离开与进入相等:
省略迭代的推导 ,给结论
则
参数的计算
由此算出
系统平均顾客
系统平均顾客
L
=
∑
n
=
0
inf
n
P
n
L = \sum\limits_{n=0}^{\inf}nP_n
L=n=0∑infnPn
平均队列长度
平均队列长度
L
q
=
∑
n
=
s
∞
(
n
−
s
)
P
n
L_q=\sum_{n=s}^{\infty}{\left( n-s \right) P_n}
Lq=∑n=s∞(n−s)Pn
其中, s s s为服务台数量
每位顾客平均等待时间
每位顾客平均等待时间:
W = L λ W=\frac{L}{\lambda} W=λL
其中,L为顾客数 除以速度 λ \lambda λ,得到时间
每位顾客平均队列等待时间
每位顾客平均队列等待时间
W
q
=
L
q
λ
W_q=\frac{L_q}{\lambda}
Wq=λLq
平均顾客到达率
平均顾客到达率
λ
=
∑
n
=
0
∞
λ
n
p
n
\lambda \,\,=\,\,\sum\limits_{n=0}^{\infty}{\lambda _np_n}
λ=n=0∑∞λnpn
假设
μ
n
\mu_n
μn,
λ
n
\lambda_n
λn不随n变化,设为
μ
\mu
μ,
λ
\lambda
λ,即顾客到达速率与服务台服务速率不随着顾客数发生变化
这里推导出了
P
n
P_n
Pn
平均系统顾客数的推导如下:
L
=
λ
μ
−
λ
L\,\,=\,\,\frac{\lambda}{\mu -\lambda}
L=μ−λλ
平均系统顾客数的推导如下:
L
q
=
λ
2
μ
(
μ
−
λ
)
L_q=\frac{\lambda ^2}{\mu \left( \mu -\lambda \right)}
Lq=μ(μ−λ)λ2
系统平均等待时间的推导如下:(直接跳过推导)
MMS模型
首先检查
先决条件
已知某生产线在执行某项特殊高危高精度工艺时,有10台机器共同运作。由于人员配置紧张,该产线只安排的8名工人同时操作8台机器,另外两台设备随时standby为替补更改工装/加工设备,工厂这样安排的目的是为了保持满负荷运作。目前该工厂只安排了1名工人更改工装与加工设备。
已知该工艺流设备平均每20天需要下线更改工装,而更改工装工人平均需2天的时间完成设备的重新设置。由于队列等待现象,产线经常出现不满8台生产的情况。目前管理层正在考率是否要再雇佣一名工人执行机器下线操作。已知每个线下工人公司给的酬薪大约是每天280RMB,而每天由于产线未满负荷运作而产生的利润损失为每台额外下线机器400RMB。你作为工业工程师被指派study这个问题,请问你会对管理层作出怎样的决策推荐以求公司利润最大化?
顾客
机器排队让工人改装,每隔20天来一次店里,服务时间为2天,目前只有一个服务平台
M(20)/M(2)/S(1)
特殊点:
- 等待下线的队列最大顾客(机器)数为10,即潜在机器总量受限,N=10
模型推导:
例题
此题 涉及泊松过程,
https://zh.wikipedia.org/wiki/%E6%B3%8A%E6%9D%BE%E8%BF%87%E7%A8%8B
在
区
间
[
t
,
t
+
τ
]
[
t
,
t
+
τ
]
内
发
生
的
事
件
的
数
目
的
概
率
分
布
为
:
在区间[t,t+\tau ][t,t+\tau ]内发生的事件的数目的概率分布为:
在区间[t,t+τ][t,t+τ]内发生的事件的数目的概率分布为:
clc;clear;
lambda =5/3;
rho = lambda /(s*mu);
% k =floor(15/12);
t=12;
k=15;
p = (exp(-lambda*t)*(lambda*t).^k)./factorial(k)
指数分布与泊松过程的联系
长
度
为
t
的
时
间
段
内
随
机
事
件
发
生
一
次
的
概
率
等
于
λ
t
e
−
λ
t
(
λ
t
)
1
1
!
=
e
−
λ
t
λ
t
,
所
以
第
k
次
随
机
事
件
之
后
长
度
为
t
的
时
间
段
内
,
第
k
+
n
次
(
n
=
1
,
2
,
3
,
.
.
.
)
随
机
事
件
出
现
的
概
率
等
于
1
−
e
−
λ
t
。
这
是
指
数
分
布
。
这
还
表
明
了
泊
松
过
程
的
无
记
忆
性
。
长度为t的时间段内随机事件发生一次的概率等于\lambda t\frac{e^{-\lambda t}(\lambda t)^1}{1!}=e^{-\lambda t}\lambda t, \\ 所以第k次随机事件之后长度为t的时间段内, \\ 第k+n次(n=1,2,3,...)随机事件出现的概率等于1-e^{-\lambda t}。 \\ 这是指数分布。这还表明了泊松过程的无记忆性。
长度为t的时间段内随机事件发生一次的概率等于λt1!e−λt(λt)1=e−λtλt,所以第k次随机事件之后长度为t的时间段内,第k+n次(n=1,2,3,...)随机事件出现的概率等于1−e−λt。这是指数分布。这还表明了泊松过程的无记忆性。
https://zh.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E5%88%86%E5%B8%83
输入时间间隔t服从参数为入的指数分布
clc;clear;
lambda =5/3;
%一分钟内发生一件时间的概率
delta_t=1;
p=1-exp(-lambda*delta_t)
例题2
某临时假设的公路简便桥,桥上不容许同时又两辆汽车通过。若汽车到达流为泊松流,其强度为λλ=2.1辆/分钟。通过时间为指数分布,平均每辆的通过时间为0.4分钟,试求系统的效率指标。
clc;clear;
lambda =2.1;
mu =1/(0.4);
s=1
rho = lambda /(s*mu);
if rho >1
disp("警告!rho 大于1 !!!!!!!!!")
end
if s ==1
disp(" mm1模型")
else
disp(" mms模型")
end
% 系统平均顾客
L=rho /(1-rho);
% 平均队列长度
L_q = (rho*rho)/(1-rho);
% 每位顾客平均逗留时间
w = 1/(mu-lambda);
% 每位顾客平均时间
w_q = rho/(mu*(1-rho));
fprintf("系统平均顾客:%5.3f\n",L);
fprintf("平均队列长度:%5.3f\n",L_q);
fprintf("每位顾客平均逗留时间:%5.3f\n",w);
fprintf("每位顾客平均时间:%5.3f\n",w_q);
% % k =floor(15/12);
% t=12;
% k=15;
% p = (exp(-lambda*t)*(lambda*t).^k)./factorial(k)
% %一分钟内发生一件时间的概率
% delta_t=1;
% p=1-exp(-lambda*delta_t)
系统内排队顾客的平均数= 4.41
顾客的平均排队时间= 2.1
占用服务员的平均数= 0.84
系统内顾客的平均数= 5.25
顾客在系统中平均逗留时间= 2.5
例题3
5.2 计算机模拟
当排队系统的到达间隔时间和服务时间的概率分布很复杂时,或不能用公式给出 时,那么就不能用解析法求解。这就需用随机模拟法求解,现举例说明。
例1:
设某仓库前有一卸货场,货车一般是夜间到达,白天卸货,每天只能卸货 2 车,若一天内到达数超过 2 车,那么就推迟到次日卸货。根据表 3 所示的数据,货车到 达数的概率分布(相对频率)平均为 1.5 车/天,求每天推迟卸货的平均车数。
解: 这是单服务台的排队系统,可验证到达车数不服从泊松分布,服务时间也不服从指数分布(这是定长服务时间)。随机模拟法首先要求事件能按历史的概率分布规律出现。模拟时产生的随机数与事件的对应关系如表4
用 a1 表示产生的随机数,a2 表示到达的车数,a3 表示需要卸货车数,a4 表 示实际卸货车数,a5 表示推迟卸货车数。编写程序如下:
clear
rand('state',sum(100*clock));
n=50000;
m=2
a1=rand(n,1);
a2=a1; %a2初始化
a2(find(a1<0.23))=0;
a2(find(0.23<=a1&a1<0.53))=1;
a2(find(0.53<=a1&a1<0.83))=2;
a2(find(0.83<=a1&a1<0.93),1)=3;
a2(find(0.93<=a1&a1<0.98),1)=4;
a2(find(a1>=0.98))=5;
a3=zeros(n,1);
a4=zeros(n,1);
a5=zeros(n,1); %a2初始化
a3(1)=a2(1);
if a3(1)<=m
a4(1)=a3(1);
a5(1)=0;
else
a4(1)=m;
a5(1)=a3(1)-m;
end
for i=2:n
a3(i)=a2(i)+a5(i-1);
if a3(i)<=m
a4(i)=a3(i);
else
a4(i)=m;
a5(i)=a3(i)-m;
end
end
a=[a1,a2,a3,a4,a5];
sum(a)/n