?? problem2.m
字號(hào):
clc,clear
tic %計(jì)時(shí)開始
day=1 ; %day變量存儲(chǔ)仿真的天數(shù)
wt=zeros(1,144); %wt為每個(gè)油輪的等待時(shí)間
h=0.01; %時(shí)間步長(zhǎng)0.01小時(shí)
simtime=0.01; % 變量存儲(chǔ)仿真時(shí)間
otc= zeros(1,144); %事件油輪到達(dá)otc=1 表示油輪到達(dá),otc=0 表示沒有油輪到達(dá),或者油輪卸貨完畢
otchold= zeros(1,144); %到達(dá)油輪的存儲(chǔ)油量
dockship=0 ; %dockship為表示碼頭忙閑的狀態(tài)
tankoil=0; %tankoil為儲(chǔ)油罐的儲(chǔ)油量
unloadtemp=0 ; %unloadtemp為表示卸貨暫停的狀態(tài)量
freetime=0; %freetime變量表示碼頭空閑數(shù),freetime=0表示工作,freetime=1表示空閑
night=0; %night變量為是否為:0:0-6:0的標(biāo)志
eatoil=0; %eatoil變量為碼頭的進(jìn)油量數(shù)
outoil=0; %outoil變量為碼頭的供油量數(shù)
ql=0; %ql變量為隊(duì)列長(zhǎng)度
sum_of_tankoil=0;%仿真步長(zhǎng)內(nèi)油罐的儲(chǔ)油量
unload_time= zeros(1,144);%
%兩個(gè)月(60天)約144條油輪到達(dá),首先產(chǎn)生服從均值為10的指數(shù)分布的油輪到達(dá)時(shí)間,結(jié)合油輪載油量的分布函數(shù)產(chǎn)生每個(gè)油輪 的載油量
x=rand(1,144);%產(chǎn)生144個(gè)均勻分布的隨機(jī)數(shù)
y=log(x);
y=-10*y;%產(chǎn)生服從指數(shù)分布的時(shí)間間隔變量
cat(1)=0; % %%%%cat(1)=5;
for i=2:144
for j=1:(i-1) %%%%%%%%%
cat(i)=cat(i-1)+y(i-1);%計(jì)算出144個(gè)油輪的到來時(shí)刻 ,存于eat數(shù)組中
end
hold(1)=50000; %%%% hold(1)=60000;
if x(i-1)<=(1/6)%利用隨機(jī)數(shù)計(jì)算出每個(gè)油輪的載油量,存于hold數(shù)組中
hold(i)=50000;
elseif x(i-1)<=(1/6+1/3)
hold(i)=60000;
elseif x(i-1)<=(1/6+2/3)
hold(i)=80000;
else
hold(i)=100000;
end
end
%以下以時(shí)間步長(zhǎng)0.01小時(shí)進(jìn)行仿真
for step=1:144000
ql=0;
simtime=simtime+h;
nowtime=simtime-(day-1)*24;%nowime變量存儲(chǔ)仿真的每一天中的時(shí)間
if nowtime>23.999
day=day+1;
end
for i=1:144 %%%%%%%%%%%%判斷是否有油輪到達(dá),記錄在otc數(shù)組中;并表示碼頭dockship置位
cha=simtime-cat(i);
if((cha>0)&(cha<=0.01))
otc(i)=1;
otchold(i)=hold(i);
dockship=1;
unload_time(i)=unload_time(i)+0.95*otchold(i)/15000;
end
end
if nowtime>=6%判斷油輪到達(dá)時(shí)間是否為凌晨0點(diǎn)到6點(diǎn)之間
if dockship==1 %判斷碼頭是否有船
if tankoil<300000%判斷是否為碼頭油滿(設(shè)碼頭的儲(chǔ)油量為300000桶)
if unloadtemp==0%是否為卸貨暫停
for j=1:144%查找先進(jìn)來的且未服務(wù)完的油輪卸貨
if otc(j)==1;%%%%%%%%%%%%%%%
break
end
end
otchold(j)=otchold(j)-150;%卸貨
tankoil=tankoil+150;
eatoil=eatoil+1;
end
else
unloadtemp=1;%碼頭油滿,置位卸貨暫停標(biāo)志
end
else
freetime=freetime+1;
end
else
night=1;%如果是夜里,置夜標(biāo)志位night
end
%以下為統(tǒng)計(jì)一步長(zhǎng)的狀態(tài),并改變相應(yīng)的狀態(tài)量
for t=1:144 %%%%%%%%%
if otc(t)==1
wt(t)=wt(t)+0.01;
end
ql=ql+otc(t);
end
if otchold(j)<0.05*hold(j)%如果油輪的剩余油小于其容量的5%,則卸貨完畢
otc(j)=0;
end
if tankoil<(0.8*300000)%如果儲(chǔ)油罐的儲(chǔ)油量小于其容量的80%,則恢復(fù)卸貨
unloadtemp=0;
end
if ql==0
dockship=0;
end
%以下為給煉油廠供油的仿真
if tankoil<=5000
outputoil=0;
end
if tankoil>=50000
outputoil=1;
end
if outputoil==1
tankoil=tankoil-130;
outoil=outoil+1;
end
sum_of_tankoil=sum_of_tankoil+tankoil;
end
total_waittime=0;%所有144條船的總等待時(shí)間
wait_time_of_eachship=wt-unload_time;
for i=1:144
total_waittime=total_waittime+wait_time_of_eachship(i);
end
average_tankoil_of_each_step=sum_of_tankoil/(60*24*100)
averge_inoil_of_shipside=eatoil*150/60
averge_outoil_of_shipside=outoil*130/60
working_efficiency=1-(freetime*0.01)/(24*60)
average_wait_time=total_waittime/144
toc %計(jì)時(shí)結(jié)束
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -