📄 排队系统仿真.txt
字号:
function fz4=fz4()
clc
close all
q=input('请输入初始队长:');
n=input('请输入加工零件数:');
T=input('请输入服务时间:');
t1=ft1(n);
t2=ft2(n+q);
Q=zeros(1,2*(n+q));%队长序列
tc=zeros(1,n+q);%到达时刻序列
tg=zeros(1,n+q)+T;%离开时刻序列
clock=0;%仿真钟
if q>0
for i=1:q
tg(i)=sum(t2(1:i));
end
end
t=0;%初始时刻
for i=1+q:n+q
t=t+t1(i-q);
tc(i)=t;
end
i=1;
k=1;
j=1+q;
while clock<=T
if i>length(tc)
fprintf('结束服务\n');
break
end
Q(k)=q;
if q<0
fprintf('出错\n');
break
end
if tc(i)<tg(j)%服务开始
clock=tc(i);
fprintf('%f 时刻,零件 %d 到达\n',clock,i);
if q==0
fprintf('队里没有零件\n');
tg(i)=t2(i)+clock;
q=q+1;
else
if i==1
tg(i)=t2(i);
else
fprintf('队里有 %d 个零件\n',q);
q=q+1;
tg(i)=tg(i-1)+t2(i);
end
end
i=i+1;%下一个进入
else%C(j)<=T(i)
if q<1
fprintf('出错');
break
end
clock=tg(j);
fprintf('%f 时刻,零件 %d 离开\n',clock,j);
q=q-1;
j=j+1;
end
k=k+1;
end
fprintf('零件总数:%d \n',i-1);
fprintf('平均队长:%f \n',Q(1,1:2*(i-1))*diff([0 sort([tc(1:i-1) tg(1:i-1)])])'/T);
fprintf('平均用时:%f \n',sum(tg(1,1:i-1)-tc(1,1:i-1))/(i-1));
fprintf('平均耽误:%f \n',sum(tg(1,1:i-1)-tc(1,1:i-1)-t2(1,1:i-1))/(i-1));
figure
hist(t1);
fprintf('平均时间间隔:%d \n',sum(t1)/length(t1));
figure
hist(t2);
fprintf('平均服务时间 %d \n',sum(t2)/length(t2));
figure
stem(sort([tc(1,1:i-1) tg(1,1:i-1)]),Q(1,1:2*(i-1)))
corrcoef(rand(1,n+q));
function t1=ft1(n)%到达时间间隔
for i=1:n
while 1>0
t1(i)=-log(rand(1))*5;
if t1(i)>=3 & t1(i)<=10
break
end
end
end
function t2=ft2(n)%加工时间
for i=1:n
while 1>0
t2(i)=-log(rand(1))*4-log(rand(1))*4;
if t2(i)>=2 & t2(i)<=8
break
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -