%确定舰船与码头的匹配情况
recorddata = zeros(2,10,10);
rate = [1 2 3 4 5 6 7 8 9 10];
timeseachnumber = 5;
for ichecknumber = 10:10
if ichecknumber==3
save("2");
end
if ichecknumber==5
save("4");
end
if ichecknumber==8
save("7");
end
if ichecknumber==10
%save("9");
end
for time_eachnumber = 1:timeseachnumber
[usedship,overallportnumber]=getshipnuber(rate(ichecknumber));
vesselnumberlimited = [30 50 70 90 120];
vesselnumbersize=5;
timenumber=[1 2 4 6 8];
timesize = 5;
times=4;
maximumgenelimit=50;
groupnumber=max(2,floor(sum(usedship)/maximumgenelimit));%既然是分组,那最少得分两个
shipgroupload=zeros(groupnumber,19);%根据舰船的装载时间将其分为七类 已知舰船的装载时间分为1 3 4 5 10 15 18
%杂货船与客船的数量为26个,2万吨级的7艘,3万吨级要9艘
%需要设计一个矩阵计算所有的船的运载时间以及吨位
%总的方案是:[5 3 9 4 11 10 1 1 31 12 10 200 36 8 7 7 2 17 9 ]
%按照吨位分析每个船类型[2 3 3 3 3 3 3 3 3 3 3 4 4 4 2 1 1 3 3 ]
%在确定将某个船挪到另一个组时不用判断到底是哪个类型的船,但仍然需要对所有的船进行统一管理。
shipgroupload=[];
loadtime=[6 5 5 5 5 4 4 4 4 3 3 3 1 1 10 15 18 5 4];%每一类舰船的装载时间
loadweight=[2 3 3 3 3 3 3 3 3 3 3 4 4 4 2 1 1 3 3 ];
shiptype=4;%根据船的排水量
overallnumber=sumshipnumber(loadweight,usedship);%根据每艘船的排水量计算各类船的数量
initialgroup=clipgroup(overallnumber,groupnumber);
shipgroup=getinitialshipgroup(initialgroup,usedship,loadweight,groupnumber,shiptype);
%portgroup=zeros(groupnumber,4);%已知码头装载能力分为 3万 2万 千吨 百吨
porttype=size(overallportnumber,2);
[portgroup,basicgroup,porttypeposition]=getportgroup(overallportnumber,groupnumber);
%portgroup=[5 4 7 1;5 4 7 1;5 4 7 1;5 4 8 1; 6 5 6 1];
maxtimeeachgroup=zeros(1,groupnumber);
maxportnumber=max(sum(portgroup'));%所有分组里最多的泊位数
largetime=zeros(groupnumber,maxportnumber);
shiptypesize=size(usedship,2);
additionalnumber=10;
maximumnumber = max(sum(shipgroup,2))+additionalnumber;
bestgena=zeros(groupnumber,maximumnumber);
recordship=zeros(groupnumber,maximumnumber);
maptype=zeros(groupnumber,shiptype);
mapeachtype=zeros(groupnumber,shiptype,12);
maximumnumberall = sum(usedship);
maxportnumberall = sum(overallportnumber);
[maxtimeeachgroupall,largetimeall,bestgenaall,recordshipall]=genesearchall(usedship,overallportnumber,loadweight,loadtime,maximumnumberall,maxportnumberall,times);
recorddata(1,ichecknumber,time_eachnumber) = maxtimeeachgroupall;
tic;
for i=1:groupnumber
[maxtimeeachgroup(i),largetime(i,:),bestgena(i,:),recordship(i,:)]=genasearch(shipgroup(i,:),portgroup(i,:),loadweight,loadtime,maximumnumber,maxportnumber,times);
for j=1:shiptypesize
if shipgroup(i,j)~=0
maptype(i,loadweight(j))=maptype(i,loadweight(j))+1;
mapeachtype(i,loadweight(j),maptype(i,loadweight(j)))=j;
end
end
end
minivalue=25;%定义这个数值的意思是为了保证新值优于旧值的一致性
[gX,index]=sort(maxtimeeachgroup);
averageloadingtime=getaverageloadingtime(largetime,portgroup,porttype,groupnumber);%计算每组泊位的各种位置的平均时间
maximumvalue=maxtimeeachgroup(index(groupnumber));
portpositionall=find(largetime(index(groupnumber),:)==maximumvalue);
if size(portpositionall,2)>1
portposition=portpositionall(floor(size(portpositionall,2)/2));
else
portposition=portpositionall(1);
end
oldimaxshiptype=1;
oldiminshiptype=shiptype;
imaxshipgroup=index(groupnumber);%泊位指派结果中耗时最长的船的分组
iminshipgroup=index(1);%泊位指派结果中耗时最短的船的分组
optimalsolution = bestgena;
optimalshippolicy = recordship;
shortesttime = maxtimeeachgroup;
timeofport = largetime;
oldminvalue = max(maxtimeeachgroup);
oldshipgroup = shipgroup;
oldportgroup = portgroup;
equaltime=0;
while equaltime<groupnumber
changesign = zeros(1,groupnumber);
unevenresult=0;
different=averageloadingtime(imaxshipgroup,:)-averageloadingtime(iminshipgroup,:);%通过这个向量确定是高吨位的泊位时间久还是低泊位的时间久
for iindex=1:shiptype%%如果不是两组泊位都分配了某类泊位,那么就定义其为0
if averageloadingtime(imaxshipgroup,iindex)==0||averageloadingtime(iminshipgroup,iindex)==0
different(iindex)=0;
end
end
[gX1,index1]=sort(different);
% if mod(equaltime,3)==0
% imaxshiptype=ceil(rand*shiptype);
% else
% if mod(equaltime,2)~=0||unevenresult
% imaxshiptype=index1(shiptype);%耗时最长的分组中耗时最久的船的类型
% else
if portposition<=porttypeposition(imaxshipgroup,1)
imaxshiptype=1;
else
if portposition<=porttypeposition(imaxshipgroup,2)
imaxshiptype=2;
else
if portposition<=porttypeposition(imaxshipgroup,3)
imaxshiptype=3;
else
imaxshiptype=4;
end
end
end
% end
iminshiptype=index1(1);
if iminshiptype==imaxshiptype
tt=1;
end
% if unevenresult==1
% unevenresult=0;
% imaxshiptype=oldimaxshiptype;
% iminshiptype=oldiminshiptype;
% imaxshiptype=min(imaxshiptype+1,shiptype);%如果选择上一个策略不行,那么就将策略调整到更小吨位的船只上去
% shipgroup=oldshipgroup;
% else
% oldshipgroup=shipgroup;
% oldimaxshiptype=index1(shiptype);
% oldiminshiptype=iminshiptype;
% end
addednumber=0;
if maptype(imaxshipgroup,imaxshiptype)~=0
randderivedship=ceil(rand*maptype(imaxshipgroup,imaxshiptype));
else
if maptype(imaxshipgroup,imaxshiptype+1)~=0
randderivedship=ceil(rand*maptype(imaxshipgroup,imaxshiptype+1));
addednumber=1;
else
randderivedship=ceil(rand*maptype(imaxshipgroup,imaxshiptype+2));
addednumber=2;
end
end
randposition=mapeachtype(imaxshipgroup,imaxshiptype+addednumber,randderivedship);
shipgroup(imaxshipgroup,randposition)=shipgroup(imaxshipgroup,randposition)-1;
shipgroup(iminshipgroup,randposition)=shipgroup(iminshipgroup,randposition)+1;
changesign(imaxshipgroup)=1;%哪个组调整了,就修正哪个组
changesign(iminshipgroup)=1;
%最小值进行交换
if iminshiptype>imaxshiptype%&&different(iminshiptype)<0
addednumber=0;
if maptype(iminshipgroup,iminshiptype)~=0
randderivedship=ceil(rand*maptype(iminshipgroup,iminshiptype));
else
if maptype(iminshipgroup,iminshiptype+1)~=0
randderivedship=ceil(rand*maptype(iminshipgroup,iminshiptype+1));
addednumber=1;
else
randderivedship=ceil(rand*maptype(iminshipgroup,iminshiptype+2));
addednumber=2;
end
end
randposition=mapeachtype(iminshipgroup,iminshiptype+addednumber,randderivedship);
shipgroup(iminshipgroup,randposition)=shipgroup(iminshipgroup,randposition)-1;
shipgroup(imaxshipgroup,randposition)=shipgroup(imaxshipgroup,randposition)+1;
end
%bestgena=zeros(groupnumber,max(sum(shipgroup,2)));%2021.11.23注释了这里是因为只调整港口有变动的分配方案
%recordship=zeros(groupnumber,max(sum(shipgroup,2)));
maptype=zeros(groupnumber,sh
没有合适的资源?快使用搜索试试~ 我知道了~
Large-scale Marine Loading Iterative Variable Grouping GA
共28个文件
m:26个
xlsx:1个
mat:1个
需积分: 9 3 下载量 60 浏览量
2022-08-12
17:34:43
上传
评论
收藏 30KB RAR 举报
温馨提示
Discrete Berth Allocation,Iterative Variable Grouping Genetic Algorithm
资源详情
资源评论
资源推荐
收起资源包目录
data.rar (28个子文件)
generategenevalue.m 2KB
Evaluegene.m 5KB
mutain.m 846B
genesearchall.m 4KB
portmain.m 13KB
getaverageloadingtime.m 440B
checkfeasible.m 305B
genasearch.m 6KB
clipgroup.m 470B
getaverageloadingtime_large.m 716B
generateinitial.m 537B
mininfo.m 328B
getportgroup.m 1KB
interchangerand.m 0B
portgroup.m 0B
getshipnuber.m 708B
collectdata.m 697B
24hourgoodresult_savedinpreparedtime.mat 7KB
sumshipnumber.m 612B
sailnavy.m 2KB
portassign1.m 0B
getinitialshipgroup.m 2KB
interchange.m 898B
data.xlsx 10KB
genasearchchecknumber.m 4KB
recordsmalltoport.m 1KB
checknumber.m 0B
recordconvergencerate.m 380B
共 28 条
- 1
thanksgivingguy
- 粉丝: 3
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0