📄 s.m
字号:
function[wait_time,stay_time,queue_length,use_rate]=shiyan1(p,q,n_num);
status=zeros(3,n_num); % 定义一个3行的矩阵表示每个顾客的状态
status(1,:)=exprnd(p,1,n_num);%p为平均到达时间间隔
status(2,:)=exprnd(q,1,n_num);%q为每个顾客平均服务时间间隔
%求平均等待时间
for i=2:n_num
if status(1,i)<=status(2,i-1)+status(3,i-1);%顾客i到达时间小于等于i-1的服务和等待时间的和
status(3,i)=status(2,i-1)+status(3,i-1)-status(1,i);%需要等待
else
status(3,i)=0;%否则不需要等待
end
end
arrive=cumsum(status(1,:));%每位顾客的到达时间
status(1,:)=arrive;
leave=sum(status);%每位顾客的离开时间
stay_time=(sum(status(2,:))+sum((status(3,:))))/n_num;
wait_time=mean(status(3,:))%求平均等待时间
%求平均队长
queue_num=zeros(1,2*n_num+1); %初始化队列长度
queue_time=zeros(1,2*n_num+1); %与队列长度相应的队列时间
m1=1; %等待的顾客+正在接受服务的顾客+正在离开的顾客
m2=1; %刚到达的顾客+ 正在服务的顾客+等待的顾客
m3=1; %正在离开的顾客数+刚到达的顾客数
while m1<=n_num
m3=m3+1;%如果当一个顾客来到,但没有顾客离开时,队长加1
if arrive(m1)<leave(m2);%有顾客到达但没有顾客离开
queue_num(1,m3)=m1-m2+1;%m3的长度
queue_time(1,m3)=arrive(m1); %m3的队列时间为m1的到达时间
m1=m1+1; %又多了一个等待的顾客
else%一个顾客离开后一个顾客来到
queue_num(1,m3)=m1-m2-1;
queue_time(1,m3)=leave(m2); %m3的队列时间为m2的离开时间
m2=m2+1; %又服务完一个人
end
end
while m2<=n_num
m3=m3+1;%如果没有顾客再到来
queue_num(1,m3)=n_num-m2;%此时不再来人,队长就是n_num-m2
queue_time(1,m3)=leave(m2);%此时不再来人,队列时间就是观察的m2的离开时间
m2=m2+1;%又服务完一个人
end
temp=diff(queue_time);%求queue_time各列的差,结果temp为每个队长所保持的时间
overtime=max(queue_time);%队列时间的最大值,注意到queue_time是累加的
queue_length=sum(temp.*queue_num(2:(2*n_num+1)))/overtime
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -