问题: 假设某银⾏⼯作时间只有⼀个服务窗⼝,⼯作⼈员只能逐个的接待 顾客。当来的顾客较多时,⼀部分顾客就需要排队等待。
假设:1) 顾客到来的间隔时间服从参数为0.1的指数分布 2) 每个 顾客的服务时间服从均值为10,⽅差为4的正态分布(单位为分钟,若 服务时间⼩于1分钟,则按1分钟计算) 3) 排队按先到先服务的规则, 且不限制队伍的⻓度,每天⼯作时⻓为8⼩时。
试回答下⾯的问题:1) 模拟⼀个⼯作⽇,在这个⼯作⽇共接待了多 少客户,客户平均等待的时间为多少? 2) 模拟100个⼯作⽇,计算出 平均每⽇接待客户的个数以及每⽇客户的平均等待时⻓。
分析:
符号引入:
%% 代码部分(问题一)
a=zeros(1,1000); %每个客户到达时间初始化
b=zeros(1,1000); %每个客户开始办理业务时间初始化
e=zeros(1,1000); %每个客户办理业务结束时间初始化
stary=zeros(1,1000); %每个客户等待时间初始化
i=1; %接待客户数
a(1)=exprnd(10); %第一个客户到达时间赋值
b(1)=exprnd(10); %第一个客户开始办理业务时间赋值
t=normrnd(10,2); %办理业务的时长
if t<1
t=1;
end
e(1)=t; %第一个客户办理业务结束时间赋值
while (e(i)<=480) %限制为一天,8个工作时长
i=i+1; %总客户加一
a(i)=a(i-1)+exprnd(10); %第i个客户到达时间赋值
b(i)=max(e(i-1),a(i)); %第i个客户开始办理业务时间赋值
if a(i)<e(i-1)
stary(i)=b(i)-a(i); %第i个客户的等待时长
end
t=normrnd(10,2);
if t<1
t=1;
end %第i个客户办理业务时长
e(i)=b(i)+t; %第i个客户办理业务结束时间
end
starysum=sum(stary); %总的等待时长
average=starysum/i; %每个客户平均等待时长
disp(['一天共接待的客户为:',num2str(i)]);
disp(['平均接待客户的时长为:',num2str(average)]);
%% 代码部分(问题二)
tic
a=zeros(100,1000); %每个客户到达时间初始化
b=zeros(100,1000); %每个客户开始办理业务时间初始化
e=zeros(100,1000); %每个客户办理业务结束时间初始化
stary=zeros(100,1000); %每个客户等待时间初始化
people=zeros(1,100);
for day=1:10000 %第i天
i=1; %接待客户数
a(day,i)=exprnd(10); %第一个客户到达时间赋值
b(day,1)=exprnd(10); %第一个客户开始办理业务时间赋值
t=normrnd(10,2); %办理业务的时长
if t<1
t=1;
end
e(day,i)=t; %第一个客户办理业务结束时间赋值
while (e(day,i)<=480) %限制为一天,8个工作时长
i=i+1; %总客户加一
a(day,i)=a(day,i-1)+exprnd(10); %第i个客户到达时间赋值
b(day,i)=max(e(day,i-1),a(day,i)); %第i个客户开始办理业务时间赋值
if a(day,i)<e(day,i-1)
stary(day,i)=b(day,i)-a(day,i); %第i个客户的等待时长
end
t=normrnd(10,2);
if t<1
t=1;
end %第i个客户办理业务时长
e(day,i)=b(day,i)+t; %第i个客户办理业务结束时间
end
people(1,day)=i; %第day天办理业务总的客户人数
end
daypeople=mean(people); %平均每天办理客户人数
starysum=sum(stary,2); %每天客户等待时间总长
averagepeople=starysum./people'; %每天客户等待平均时长
w=mean(averagepeople); %平均每天客户等待时长
disp(['每天平均接待客户人数:',num2str(daypeople)]);
disp(['每天平均客户等待时间:',num2str(w)]);
toc %tic与toc中间代码运行总时长