function [awt,lql] = harbor(as1,as2,ult1,ult2,n) % awt: average waiting time % lql: longest queue length % as1, as2 : minimum and maximum arrival of successive ships % ult1,ult2: minimum and maximum unloading time if nargin == 0, % the given example n = 5; rsa = [20 30 15 120 25]; rut = [55 45 60 75 80]; else if nargin<5, n = as1; end as1 = 15; as2 = 145; ult1 = 45; ult2 = 90; rsa = round(rand(1,n)*( as2- as1)+ as1); % random ship arrival rut = round(rand(1,n)*(ult2-ult1)+ult1); % random unload time end at = cumsum(rsa); % arrival time ss(1) = at(1); ql(1) = 0; for k = 2:n, ss(k) = max( at(k), ss(k-1)+rut(k-1) ); % start service ql(k) = sum( at(k) < ss(1:k-1)+rut(1:k-1) ); % queue length end wt = ss - at; % wait time tih = wt + rut; % time in harbor awt = mean(wt); % average wating time lql = max(ql); % longest queue length clc; fprintf('%c',61*ones(1,85)); fprintf('\n%25s%26s%21s%8s','Random time','Queue','Random','Time'); fprintf('\n%11s%10s%13s%8s%11s%8s%11s%7s','Ship','between','Arrival',... 'Start','length at','Wait','unload','in'); fprintf('\n%11s%15s%6s%10s%11s%8s%10s%11s\n','no.','ship arrival','time',... 'Service','arrival','time','time','harbor'); fprintf('%c',45*ones(1,85)); for k = 1:n, fprintf('\n'); fprintf('%10d',k,rsa(k),at(k),ss(k),ql(k),wt(k),rut(k),tih(k)); end fprintf('\nTotal(if appropriate):%38d\n',sum(wt)); fprintf('Average(if appropriate):%s%6.2f %9.2f %9.2f\n',... blanks(30),mean(wt),mean(rut),mean(tih)); fprintf('Longest queue length: %s%3d\n',blanks(25),lql); fprintf('%c',61*ones(1,85)); fprintf('\n');