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代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。