• 大小: 4KB
    文件类型: .m
    金币: 2
    下载: 1 次
    发布日期: 2021-05-12
  • 语言: Matlab
  • 标签: Matlab  2019美赛  B题  

资源简介

2019美赛B题第一问 装箱问题完整代码 matlab 遗传算法

资源截图

代码片段和文件信息

clc;clear all;
format long;
M=11;
N=12;
zq=100;
%c=[ceil(rand*M) ceil(rand*M) ceil(rand*M) ceil(rand*M) ceil(rand*M) ceil(rand*M) ceil(rand*M) ceil(rand*M) ceil(rand*M) ceil(rand*M) ceil(rand*M) ceil(rand*M)];%定义染色体编码,各个货物对应的车1*12
c=ceil(rand(zqN)*M);
L=[3.86 6.9 4.87 7.15 7.15 7.15 3.9 7.15 7.15 7.15 7.994 7.12];%各个12货物的长度1*12
L=L+0.2;
K=13;%箱子的长度
e=zeros(1N+1);
e(N+1)=100000;

for jhcs=1:10
s=zeros(zqM);
%初始化种群
for zqs=1:zq
for xh=1:40
    for j=1:M
       s(zqsj)=0; 
    end
A=zeros(MN);
for j=1:M%遍历各个车
    t=1;
    for k=1:N%遍历各个货物
        if(c(zqsk)==j)
            s(zqsj)=s(zqsj)+L(k);%计算每辆箱子上货物的长度s[]
            A(jt)=k;
            t=t+1;
        end
    end
end
for j=1:M  %遍历各个车
    if((s(zqsj)==0)&&(j        for i=1:N
            if (c(zqsi)==max(c(zqs:)))
                c(zqsi)=j;
            end
        end
        %break;
    end
end

for j=1:M  %遍历各个车
    d=10;
    T=0;
    if(s(zqsj)>=K)%第j辆车货物超过箱子长度
        for t=1:N%建立此箱子对应的货物长度矩阵
            if ((A(jt)~=0)&&(d>L(A(jt))))
                d=L(A(jt));           %寻找最短长度
                p=j;q=t;                   %保存序号
            end
        end
        %找到最短的车序号之后再放到每个车上看看长度够不够,够就插入
        for j=1:M
            if (s(zqsj)+d               %将此货物放入此车中 
               c(zqsA(pq))=j;
               T=1;
               break;
            end
        end
        if (T==0)%表明所有的车上货物都不能容纳新货物
            c(zqsA(pq))=max(c(zqs:))+1;
            break;
        end
    end
end
end
end

num=zeros(1zq);
f=zeros(1zq);
for zqs=1:zq
    %计算每个种群中所用箱子的个数,存于num中
    for j=1:M
    if (s(zqsj)>0)
        num(zqs)=num(zqs)+1;
    end
    end
    f(zqs)=num(zqs)*K*(K*num(zqs)-sum(s(zqs:)));
end

d=[cf‘];
d=sortrows(dN+1);
if(d(N+1)    e=d;
end
d(:N+1)=[];
c=d;

%[sfindex]=sort(f);
%for zqs=1:zq
 %   if (zqs  %  b=c(index(zqs):);
   % c(index(zqs):

评论

共有 条评论