标签:ros 怎样 poi 题意 设计 随机数 决定 iad 总数
$$
{A/B/C/n}
$$
A 输入过程,B 服务时间,C 服务台数,n 系统容量。
单位时间内到达的人数为λ,所以[0,t] 时间内到达的顾客平均数为 λt
μ代表单位时间服务人的个数
判断模型是否稳定,一般用比较λ和μ的大小(下图的系统服务强度)
$(1-\rho)\sum_{n=0}^{\infty}n\rho^{n}$,当$\rho$<1时候级数收敛
平均等待队长比平均队长少一人,因为一人在接受服务。
平均等待时间=逗留的时间-服务的时间
Little公式是根据前面推导出来。
λ/μ=8/9<1,系统是稳定的。
平均等待7.1个人
k=[0:s-1]
案例
lambda = 20; mu = 9; s = 3;
rho = lambda/(s*mu); %服务强度
k=(0:s-1);
p0 = 1./( sum((s*rho).^k./factorial(k)) + ...
(s*rho)^s/(factorial(s)*(1-rho)) ); %服务台空闲的概率
Ls = s*rho + (s*rho)^s*rho/(factorial(s)*(1-rho)^2)*p0; %平均长度
Ws = Ls/lambda; %平均逗留时间
Wq = Ws - 1/mu%平均等待时间
混合制:
系统容量K为队长,理发店的的凳子数(等待凳子和服务凳子)
闭合制:
工厂的工人,使用的机器。
做模拟:
开始服务, 到达, 离开时刻和服务, 等待时长的关系
开始服务, 到达, 离开时刻和服务, 等待时长的关系
问题
属于M/M/1/∞ 模型
n = 100000; % 模拟顾客总数
mu = 1; muA = 0.9; % 到达率和服务率
tarr = cumsum(exprnd(mu,1,n));% 到达时刻 ,exprnd生成指数分布(到达的时间间隔)
tsrv = exprnd(muA,1,n); % 服务时长
tsta = zeros(1,n); % 初始化服务时刻
tlea = zeros(1,n);% 初始化离开时刻
twat = zeros(1,n); % 初始化等待时长
tsta(1) = tarr(1);% 首位顾客服务时刻=到达时刻
tlea(1) = tsta(1) + tsrv(1); % 首位顾客离开时刻
twtime(1) = tlea(1) - tarr(1); % 首位顾客等待时长=0
% 上面初始化第一个顾客
for i = 2:n
% 服务时刻 = max{到达时刻, 上一个顾客离开时刻}
tsta(i) = max(tarr(i),tlea(i-1));
tlea(i) = tsta(i) + tsrv(i);% 离开时刻=服务时刻+服务时长
twat(i) = tlea(i) - tarr(i);;% 等待时长=离开时刻-到达时刻
end
hist(twat)
sum(twat)/n
n = 100000; % 模拟顾客总数
mu = 1; muB = 1.8; % 到达率和服务率
tarr = cumsum(exprnd(mu,1,n)); % 到达时刻
tsrv = exprnd(muB,1,n);% 服务时长
tsta = zeros(1,n);% 初始化服务/离开时刻
tlea = zeros(1,n); % 初始化等待时长
twat = zeros(1,n);% 初始化服务台结束服务时刻
last = [0 0];%几个服务台几个0
for i = 2:n
[minemp, k] = min(last); % 找出最快结束服务的服务台时刻
tsta(i) = max(tarr(i),minemp);% 服务时刻
tlea(i) = tsta(i) + tsrv(i); % 离开时刻
last(k) = tlea(i); % 服务台结束服务时刻
twat(i) = tlea(i) - tarr(i);% 等待时长
end
hist(twat)
sum(twat)/n
如何生成序列来满足题意概率分布呢?
举一个例子,由时间间隔 t = [0 1 2] 和概率 p = [0.2 0.3 0.5] 得到各到顾客达时间间隔 。
先把概率p倒过来求前缀和
$$
p′ = cumsum([0.5,0.3,0.2]) = [0.5,0.8,1.0]
$$
我们生成随机数x,则x<=0.5的概率为0.5,0.5<x<=0.8的概率为0.3,0.8<x<=1.0的概率为0.2
$$
R = rand(1,5) = [0.1,0.9,0.2,0.4,0.8];
$$
替换随机序列的数
把随机序列R<0.5的数换成2……
$$
R(R < 0.5) = 2, R(R < 0.8) = 1, R(p < 1.0) = 0
$$
由到达时间间隔得到各顾客到达时刻
$$
间隔 = [0,1,3,2] ? 时刻 = cumsum(间隔) = [0,1,4,6]
$$
开始服务, 到达, 离开时刻和服务, 等待时间的关系:
离开时刻(i) = 开始服务的时刻(i) + 服务时间(i)
等待时间(i) = 离开时刻(i)?到达时刻(i)?服务时间(i)(不是逗留时刻
%计算 Tarrival到达时刻, Tservice服务时间
n = 150;
ta = [5 4 3 2 1 0];
pa = [0.05 0.25 0.35 0.10 0.15 0.10];
ts = [ 4 3 2 1 ];
ps = [ 0.15 0.40 0.20 0.25 ];
pacum = cumsum(pa);%递增
pscum = cumsum(ps);
Tarrival = rand(1,n);
for i = 1:length(pa)
Tarrival(Tarrival<pacum(i)) = ta(i);
end
Tarrival = cumsum(Tarrival);%累加才得到到达时刻
Tservice = rand(1,n);
for i = 1:length(ps)
Tservice(Tservice<pscum(i)) = ts(i);
end
Tstart = zeros(1,n); %开始服务的时刻
Tleave = zeros(1,n); %离开的时刻
Twait = zeros(1,n); %等待的时长
line = zeros(1,n); %队长
%初始化第一位顾客
Tstart(1) = Tarrival(1);
Tleave(1) = Tstart(1) + Tservice(1);
Twait(1) = Tleave(1) - Tarrival(1) - Tservice(1);
line(1) = 0;
for i = 2:n
Tstart(i) = max(Tleave(i-1), Tarrival(i));
Tleave(i) = Tstart(i) + Tservice(i);
Twait(i) = Tleave(i) - Tarrival(i) - Tservice(i);
%队长的计算,一直找到前面的人离开了
k = i-1;
while ( k>0 )&&( Tarrival(i)<Tleave(k) )
line(i) = line(i) + 1;
k = k - 1;
end
end
subplot(1,2,1)
hist(Twait)
line
subplot(1,2,2)
hist(line)
因为随机数,所以可以多算几次,取平均值。
问题
建立一个或多个模型,研究旅客通过安检口的流量,确定瓶 颈,明确判断当前流程问题区域位置。
设计两个或更多对现有系统德潜在改进,提高旅客通信,减 少等待时间。模拟这些变化展示改进如何影响流程。
排队系统: μr = 10, μb = 13, μ1 = 12, μ2 = 9, μ3 = 16
function [tlea, twat, qlen] = mms(tarr, type, mus)
% MMS Stochastic simulation for M/M/c queue
%
% [tlea, twat, qlen] = mms(tarr, type, mus)
% tarr :每一个顾客到达的时间
% type :客户类型参数
% mus :服务台的服务速度
% tlea :服务台的离开时间
% twat :服务台的等待时间
% qlen :客户的队列长度(排队的长度)
narr = length(tarr); % 客户的个数
nsvr = length(mus); % 服务台的数量
% last time at which a customer left a particular server
last = zeros(nsvr,1);
[tsta, tlea, twat, qlen] = deal(zeros(narr,1));
rndm = zeros(nsvr,narr); % rndm(k,i) = 第i个客户的服务时间
for k = 1:nsvr;
rndm(k,:) = exprnd(mus(k)*type); %生成服从指数分布的随机数
end
for i = 1:narr
% find booth service was/will be emptied soonest and record
[minemp, ksvr(i)] = min(last);
% start time = max{arrival time, minemp}
tsta(i) = max(tarr(i), minemp);
% severe time = exponential random number with mean parameter mu
tsvr(i) = rndm(ksvr(i),i);
% leaving time = start time + service time
tlea(i) = tsta(i) + tsvr(i);
% last time of k-th server = leaving time of i-th customer
last(ksvr(i)) = tlea(i);
% waiting time = leaving time - arrival time
twat(i) = tlea(i) - tarr(i);
% queue length for i customer
j = i - 1;
while j>0 && tarr(i)<tlea(j)
if ksvr(j)==ksvr(i); qlen(i) = qlen(i) + 1; end
j = j - 1;
end
end
分别求出A区域两个队列(红色和绿色队列)的离开的时刻,作为下一阶段服务台到达的时刻。
具体使用看下面主程序。
μr = 10, μb = 13, μ1 = 12, μ2 = 9, μ3 = 16
n1 = 2; n2 = 3; n3 = 3;% ni表示第i个服务台的数量
mu1 = 12; mu2 = 9; mu3 = 16;% 服务台的到达率
muR = 10; muB = 13;% 蓝色与红色服务台的服务率
nR = ceil(24*3600/muR); nB = ceil(24*3600/muB);% 服务的人数
tArrR = cumsum(exprnd(muR,nR,1));
tArrB = cumsum(exprnd(muB,nB,1)); %到达时刻
tArr = [tArrR; tArrB];
type = [0.8*ones(nR,1); 1.2*ones(nB,1)];%区分两种服务的时长
%A区域
[tLeaR, tWatR, qLenR] = mms(tArrR, ones(nR,1), mu1*ones(n1,1));
[tLeaB, tWatB, qLenB] = mms(tArrB, ones(nB,1), mu2*ones(n2,1));
[tArrG, order] = sort([tLeaR; tLeaB]);%输出为离开A区域的时间,排序进入下一区域
%order数组为排序后的数组在原始数组的位置,保存原来的顺序
%下一区域
[tLeaG, tWatG, qLenG] = mms(tArrG, type(order), mu3*ones(n3,1));
tLeaG(order) = tLeaG;
tWatG(order) = tWatG;
qLenG(order) = qLenG;
figure('position',[50,50,1200,600])
subplot(2,3,1); hist(qLenR); ylabel('Frequency');
xlabel('length of the waiting line'); title('Red')
subplot(2,3,4); hist(tWatR); ylabel('Frequency');
xlabel('waiting time'); title('Red')
subplot(2,3,2); hist(qLenB); ylabel('Frequency');
xlabel('length of the waiting line'); title('Blue')
subplot(2,3,5); hist(tWatB); ylabel('Frequency');
xlabel('waiting time'); title('Blue')
subplot(2,3,3); hist(qLenG); ylabel('Frequency');
xlabel('length of the waiting line'); title('Green')
subplot(2,3,6); hist(tWatG); ylabel('Frequency');
xlabel('waiting time'); title('Green')
标签:ros 怎样 poi 题意 设计 随机数 决定 iad 总数
原文地址:https://www.cnblogs.com/pxlsdz/p/12244708.html