计算机模拟
2.一个带有船只卸货的岗楼,任何时间仅能为一艘船只卸货。船只进港是为了卸货,相邻两艘船只到达的时间间隔在15分钟到145分钟之间变化。一艘船只卸货的时间由所卸货物类型决定,在45分钟到90分钟之间变化,请回答以下问题:
(1)每艘船只在港口的平均时间和最长时间是多少?
(2)若一艘船只的等待时间是从到达到开始卸货的时间,每艘船只的平均等待时间和最长等待时间是多少?
(3)卸货设备空闲时间的百分比是多少?
(4)船只排队最长的长度是多少?
解:可以看做是一个排队,用MATLAB程序如下所示:
function timeWaiting = simu3_ship(n)
n = input('n=');m=0;
x = zeros(1,n);y = zeros(1,n);
D = zeros(1,n);leng = zeros(1,n);
t = unifrnd(65,130,1,n)+15; %两艘船到达的时间间隔
s = unifrnd(22.5,45,1,n)+45; %一艘船只的卸货时间
x(1) = t(1); %第一艘船到达的时间
for i = 2:n
y(i) = x(i-1) + t(i); %第2~n搜船到达的时间
j = i - 1;
c(j) = x(j) + s(j)+ D(j); %计算第一艘船离开的时间
if c(j) < y(i) %比较相邻两艘船离开、到达时刻的大小 D(i) = 0;
D3(i) = y(i)-c(j); %D3用来计算空闲的时间
else
D(i) = c(j) - y(i);
D3(i) = 0;
end
x(i) = y(i);
D1(i) = D(i)+s(i);
D2(i) = D(i);
for k = 2:n
if c(j) > y(k)
m = m+1;
end
leng(j) = m; %计算每艘船在卸货的时候,等待的船只个数
end
m = 0;
end
averageWaiting1 = mean(D1);maxWaiting1 = max(D1);
averageWaiting2 = mean(D2);maxWaiting2 = max(D2);
maxLength = max(leng);
freerate3 = sum(D3(i))/(sum(D3(i))+sum(s(i-1)));
display(averageWaiting1);display(maxWaiting1);