在日常生活中,我们每天都会遇到各种各样的排队。比如:银行中取款要排队,火车站买票要排队,超市、商场中购物付款要排队,预订旅馆或机票时也要排队,人们仿佛置身于一个排队的社会。
所谓排队,就是等候消费服务的顾客在进入点前排队(意大利G·佩里切利)。排队的类型一般来说有以下几种:
一个服务点。即只有一个点可供顾客选择等候服务,顾客只能按顺序一个接一个等侯,这样排队,顾客多的时候最混乱。现在这种排队类型已不多见。
多个服务点。即有两个或两个以上的点可供顾客选择,每一点都可排成一条队。多个服务点可减轻一个服务点的负担,增加顾客选择服务点的灵活性,同时顾客还可选择自己喜欢的服务员。
专门服务点。即专门为某些特殊的顾客开辟的服务点。专门的服务点可以保证某些特殊顾客的特殊权益,如:减少顾客等待服务时间,同时使一些顾客分离出来,减轻其服务口的压力。
我们拿一个理发店的实际例子来分析:
某理发馆每天早晨开业后,顾客的到来总是陆续不断的,他们到来的间隔时间,给统计如下:
到达时间间隔(分钟) |
频率 |
4 |
0.07 |
5 |
0.10 |
6 |
0.52 |
7 |
0.20 |
8 |
0.11 |
顾客到来后,由管理人员引导至A、B、C三个服务椅(理发员固定在服务椅上),各服务椅的服务内容相同,但服务时间有多有少,根据以往统计资料,他们的服务时间分布如下:
A |
B |
C |
|||
时间(分) |
频率 |
时间(分) |
频率 |
时间(分) |
频率 |
8 9 10 11 |
0.18 0.22 0.33 0.27 |
10 11 12 13 |
0.18 0.19 0.35 0.28 |
12 13 14 15 |
0.15 0.22 0.36 0.27 |
1.00 |
1.00 |
1.00 |
当有一个以上服务椅空闲时,管理人员按字母排列次序引导顾客至服务椅去进行服务。顾客中有10%属“特殊顾客”理发很费时间,每人需多4分钟。现模拟10位顾客的到来和服务情况,并分析三个服务椅的忙闲情况。
顾客到达时间间隔 |
频率 |
累计频率 |
对应的 随机数 |
A服务时间 |
频率 |
累计频率 |
对应的随机数 |
4 |
0.07 |
0.07 |
0.00~0.06 |
8 |
0.18 |
0.18 |
0.00~0.17 |
5 |
0.10 |
0.17 |
0.07~0.16 |
9 |
0.22 |
0.40 |
0.18~0.39 |
6 |
0.52 |
0.69 |
0.17~0.68 |
10 |
0.33 |
0.73 |
0.40~0.72 |
7 |
0.20 |
0.89 |
0.69~0.88 |
11 |
0.27 |
1.00 |
1.00 |
8 |
0.11 |
1.00 |
0.89~1.00 |
B服务时间 |
频率 |
累计频率 |
对应的 随机数 |
C服务时间 |
频率 |
累计频率 |
对应的 随机数 |
10 |
0.18 |
0.18 |
0.00~0.17 |
12 |
0.15 |
0.15 |
0.00~0.14 |
11 |
0.19 |
0.37 |
0.18~0.36 |
13 |
0.22 |
0.37 |
0.15~0.36 |
12 |
0.35 |
0.72 |
0.37~0.71 |
14 |
0.36 |
0.73 |
0.37~0.72 |
13 |
0.28 |
1.00 |
0.72~1.00 |
15 |
0.37 |
1.00 |
0.72~1.00 |
我们采用二位随机数来模拟顾客到来间隔和服务情况,并选定碰到个位数是5,就作为“特殊顾”(占10%)现从随机数中抽取随机数如下:
顾客 |
顾客到来时间间隔 |
服务随机数 |
|
随机数 |
时间间隔(分) |
||
1 2 3 4 5 6 7 8 9 10 |
(14) 46 11 66 60 90 33 65 72 92 |
6 5 6 6 8 6 6 7 8 |
00 99 20 19 32 40 20 01(特殊顾客) 68 87 |
设第一个顾客到达的时间是在3点正,随机数是14,此数本不需要,主要是看一下是不是“特殊顾客”,现此数尾数不是5说明第一位不是“特殊顾客”。第一个顾客到达,按字母的顺序应到A服务椅,随机数00,表示要服务8分钟,第二个顾客到达与第一个顾客的间隔时间,按随机数46应为6分钟,即在8.06时,服务椅A正在使用,因此到服务椅B,服务随机数99,应服务13分钟,如此编成表如下:
顾客 |
到达时间 |
服务椅 |
等待时间 |
服务 时间 |
A |
B |
C |
|||
到达 |
离开 |
到达 |
离开 |
到达 |
离开 |
|||||
1 |
8:00 |
A |
8 |
8:00 |
8:08 |
|||||
2 |
8:06 |
B |
13 |
8:06 |
8:19 |
|||||
3 |
8:11 |
C |
13 |
8:11 |
8:24 |
|||||
4 |
8:17 |
A |
9 |
8:17 |
8:26 |
|||||
5 |
8:23 |
B |
11 |
8:23 |
8:34 |
|||||
6 |
8:31 |
A |
10 |
8:31 |
8:41 |
|||||
7 |
8:37 |
B |
10 |
8:37 |
8:47 |
|||||
8 |
8:43 |
A |
12 |
8:43 |
8:55 |
|||||
9 |
8:50 |
B |
12 |
8:50 |
9:02 |
|||||
10 |
8:58 |
A |
11 |
8:58 |
9:09 |
|||||
共计 |
109 |
*为“特殊顾客”服务时间8(分)+4(分)=12(分)
10个顾客在系统内的总时间为63分。
分析:
1.10个顾客在系统(理发馆内)的总时间为69分,平均每人69/10=6.9分
2.10个顾客总的服务时间为109分。平均每人服务109/10=10.9分
3.统内无等待时间,即没出现顾客排队等待问题.
4.椅的服务情况如下:
A |
B |
C |
|
服务顾客数 总的服务时间(分) 为每个顾客的平均服务时间 空闲时间 空闲占总的时间% |
5 50 10 19 27.3% |
4 46 11.5 23 33.3% |
1 13 13 56 81.2% |
在此基础上,可用计算机编写程序,在计算机上实现仿真模拟,用以模拟更多时间和更多顾客时的情况。以下用Matlab编写的模拟程序的算法部分:
function [num,pass]=computing(tim0)
seat=[0 0 0];%服务员属性
pass=rand(1,4);%顾客信息:序号、到达时间、特殊要求时间、正常理发时间
pass(5)=0;%理发员
pass(6)=0;%离开时间
pass(7)=0;%等待时间
num=1;%服务人数初始化
tim=0;%时间计数器
temp=0;%
while tim<=tim0
pass(num,1)=num; %装入序号
pass(num,2)=rand;
pass(num,3)=rand;
pass(num,4)=rand;
%计算顾客到达时间
if pass(num,2)<=0.07
temp=4;
else if pass(num,2)<=0.17
temp=5;
else if pass(num,2)<=0.69
temp=6;
else if pass(num,2)<=0.89
temp=7;
else temp=8;
end
end
end
end
tim=tim+temp; %装入顾客到达时间
pass(num,2)=tim;
if pass(num,3)<=0.1
pass(num,3)=4; %装入需要特殊服务的时间
else pass(num,3)=0;
end
num=num+1;
end
num=num-1;
for i=1:num
%计算顾客的理发席位
if seat(1)<=pass(i,2)+pass(i,7)
pass(i,5)=1; %由1号服务员理发
temp1=timinge1(1,pass(i,4));
seat(1)=pass(i,2)+pass(i,3)+temp1;
pass(i,4)=temp1; %装入正常理发所需时间
else if seat(2)<=pass(i,2)+pass(i,7)
pass(i,5)=2; %由2号服务员理发
temp1=timinge1(2,pass(i,4));
seat(2)=pass(i,2)+pass(i,3)+temp1;
pass(i,4)=temp1; %装入正常理发所需时间
else if seat(3)<=pass(i,2)+pass(i,7)
pass(i,5)=3; %由2号服务员理发
temp1=timinge1(3,pass(i,4));
seat(3)=pass(i,2)+pass(i,3)+temp1;
pass(i,4)=temp1;
else %计算等待时间
x=seat(1);
y=1;
if x>seat(2)
x=seat(2);
y=2;
end
if x>seat(3)
x=seat(3);
y=3;
end
pass(i,5)=y;
temp1=timinge1(y,pass(i,4));
pass(i,7)=seat(y)-pass(i,2);
seat(y)=seat(y)+temp1+pass(i,3);
pass(i,4)=temp1;
end
end
end
pass(i,6)=pass(i,2)+pass(i,3)+pass(i,4);
end
function xxxx=timinge1(vect1,vect)
switch vect1
case 1
if vect<=0.18
xxxx=8;
else if vect<=0.4
xxxx=9;
else if vect<=0.77
xxxx=10;
else xxxx=11;
end
end
end
case 2
if vect<=0.18
xxxx=10;
else if vect<=0.37
xxxx=11;
else if vect<=0.72
xxxx=12;
else xxxx=13;
end
end
end
otherwise
if vect<=0.15
xxxx=12;
else if vect<=0.37
xxxx=13;
else if vect<=0.74
xxxx=14;
else xxxx=15;
end
end
end
end
更多数学建模模型与算法可以关注数模乐园公主号的更新,具体数学建模基础课程可以在数模乐园微小店观看。