📄 problem2_y2.m
字号:
clc,clear
tic %计时开始
timelength=100*24; %设定仿真时间长度(小时)
h=0.01; %设定仿真时间步长(小时)
G0=30000; %设定油罐的容量
time=0; %仿真时间
oiltankercome=zeros(1,1000); %油轮到达,1表示油轮到达,0表示没有油轮到达
oiltankerhold= zeros(1,1000); %到达油轮的当前油量
waittime=zeros(1,1000); %油轮的等待时间
tankoil=0; %油罐的当前油量
alltankoil=0; %油罐油量的总值
unloadpause=0 ; %表示卸货暂停的状态量
busytime=0; %码头忙时间
inoil=0; %码头的进油量数
outoil=0; %码头的供油量数
queuelength=0; %队列长度
y=exprnd(6,1,1000); %产生服从指数分布的时间间隔变量
reachtime=cumsum(y); %得到油轮到达时间
x=rand(1,1000); %产生均匀分布的随机数
capacity=zeros(1,1000); %得到每个油轮的载油量
capacity(find(x<=1/6))=50000;
capacity(find(x>1/6&x<=1/2))=60000;
capacity(find(x>1/2&x<=5/6))=80000;
capacity(find(x>5/6))=100000;
%以下以时间步长0.01小时进行仿真
i=1;
for time=0:h:timelength
nowtime=mod(time,24); % 仿真在每一天中的时间
if (time-reachtime(i)>0)&(time-reachtime(i)<=h) %%判断是否有油轮到达
oiltankercome(i)=1;
oiltankerhold(i)=capacity(i);
queuelength=queuelength+1;
i=i+1;
end
if nowtime>=6 %判断油轮到达时间是否为凌晨0点到6点之间
if queuelength>0 %判断码头是否有船
if tankoil<G0 %判断是否为码头油满
if unloadpause==0 %判断是否为卸货暂停
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=1:i-1 %查找先进来的且未服务完的油轮卸货
if oiltankercome(j)==1;%%%%%%%%%%%%%%%
break
end
end
oiltankerhold(j)=oiltankerhold(j)-150;%卸货
tankoil=tankoil+150;
inoil=inoil+150;
if oiltankerhold(j)<0.05*capacity(j)%如果油轮的剩余油小于其容量的5%,则卸货完毕
oiltankercome(j)=0;
queuelength=queuelength-1;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
else
unloadpause=1; %码头油满,置位卸货暂停标志
end
busytime=busytime+h;
end
end
waittime(i-queuelength+1:i-1)=waittime(i-queuelength+1:i-1)+h;
if tankoil<(0.8*G0) %如果油罐的储油量小于其容量的80%,则恢复卸货
unloadpause=0;
end
%以下为给炼油厂供油的仿真
if tankoil<=5000, outputoil=0; end
if tankoil>=50000, outputoil=1; end
if outputoil==1
tankoil=tankoil-130;
outoil=outoil+130;
end
alltankoil=alltankoil+tankoil;
end
dock_efficiency=busytime/(timelength*3/4) % 码头利用率
mean_tankoil=alltankoil/(timelength/h) % 储油罐平均储油量
mean_inoil=inoil/(timelength/24) % 码头日平均进油量
mean_outoil=outoil/(timelength/24) % 码头日平均供油量
mean_wait_time=sum(waittime)/(i-1) % 油轮的平均等待时间
toc %计时结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -