【二维装箱】基于遗传算法求解矩形地块二维装箱放置优化问题附matlab代码

460 阅读2分钟

1 简介

通过分析人工排列的思考过程和实际经验,提出一种解决二维规则物体排列问题的算法。通过计算可放置点和可放置空间,高效解决物块的排列问题。应用遗传算法,求得最优的排列方案。实际应用证明了该算法的有效性。二维装箱问 题 是 随 着 计 算 机 技 术 的 产 生 而 出现的,大量出现 在 机 械 制 造、皮 革 服 装 加 工、汽 车、造船、货物装载以及大规模集成电路板的设计等领域。排样布局 的 优 劣 直 接 与 材 料 的 成 本 及 经 济效益相关。目前主要存在的问题是材料的利用率偏低,造成巨大的浪费。对于规模较大的生产厂家来说,即使是材料利 用 率 有 很 小 的 提 升,也 会 带 来巨大的经济效益。

2 部分代码

function [F,newX2]=objection(X)

global  data NUM layout

%%

H=200;

L=200;

X1=X(1:NUM);

X2=X(NUM+1:end);

X2=X2(X1);

newX2=X2;

for i=1:NUM

  if X1(i)>1

    newX2(i)=sum(layout(1:X1(i)-1))+X2(i);

  end

end

% F=sum(data(newX2,4));

% return;

flag=1;

F=0;

sizeX=0;%记录左右以用长度

sizeY0=0;%记录上下以用长度

sizeY1=0;

j=1;

k=1;

for i=1:NUM

    if i==1

%        sizeX=data(newX2(i),1);

       sizeX=data(newX2(i),1)+data(newX2(i),5);

       sizeY0=0;

       sizeY1=data(newX2(i),2)+data(newX2(i),4);

       F=F+data(newX2(i),6);

       row(1,1)=newX2(i);

    else

        if sizeX+data(newX2(i),1)+data(newX2(i),5)<H

           if sizeY0+data(newX2(i),2)+data(newX2(i),4)<L

             sizeY1=max(sizeY1,sizeY0+data(newX2(i),2)+data(newX2(i),4));

             sizeX=sizeX+data(newX2(i),1)+data(newX2(i),5);

             F=F+data(newX2(i),6);

             k=k+1;

             row(j,k)=newX2(i); %记录摆放顺序

           else

%                flag=0;

               break;

           end

        else

            if sizeY1+data(newX2(i),2)+data(newX2(i),4)<L

                sizeY0=sizeY1;

                sizeY1=sizeY1+data(newX2(i),2)+data(newX2(i),4);

                sizeX=data(newX2(i),1);

                F=F-data(newX2(i-1),6)+data(newX2(i),7)+data(newX2(i),6);%表示去除最右侧单元体东西间距,计算容积率之和

                j=j+1;

                k=1;

                row(j,k)=newX2(i);%记录摆放顺序

            else

%                 F=F-data(newX2(i-1),6)+data(newX2(i),8)+data(newX2(i),6);

%                 flag=0;

                break;

            end

        end

    end

end

row %记录摆放顺序

[a,b]=size(row);

B=row(a,:);%

for i=1:b

    if B(i)~=0

     F=F-data(B(i),6)+data(B(i),8); %最后一层,去除南北间距后,计算容积率之和

    end

end

if flag==0

   F=F+1000; 

end


3 仿真结果

4 参考文献

[1]田大肥, 申喜, and 周巍. "二维装箱问题的遗传算法求解." 舰船电子工程 34.1(2014):5.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。