矩形排料问题,组合优化问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《二维矩形条带装箱问题的底部左齐择优匹配算法_蒋兴波》 matlab的实现,不包括遗传算法部分。
function area =
PackingAlgorithm(length,width,length1,width1,length2,width2,length3,wid th3,restrict1,restrict2)
area = 0;
frameCount = 1;
count1 = 0;
count2 = 0;
runLLABF;
function runLLABF
rectBig.length = length;
rectBig.width = width;
rectSmall(1).length = length1;
rectSmall(1).width = width1;
rectSmall(1).color = 'r';
rectSmall(2).length = length2;
rectSmall(2).width = width2;
rectSmall(2).color = 'b';
rectSmall(3).length = length3;
rectSmall(3).width = width3;
rectSmall(3).color = 'g';
edges(1).x = 0;
edges(1).y = 0;
edges(1).length = rectBig.length;
edges(2).x = -100;
edges(2).y = 10000;
edges(2).length = 0;
edges(3).x = rectBig.length+100;
edges(3).y = 10000;
edges(3).length = 0;
while(1)
flag = -1;
if(flag < 0)
[sortedEdges,lowestEdge,id] = edgesSort(edges);
[edges,flag] = FullFitFirst(sortedEdges,lowestEdge,id,rectSmall);
if(flag<0)
[sortedEdges,lowestEdge,id] = edgesSort(edges);
[edges,flag] =
WidthFitFirst(sortedEdges,lowestEdge,id,rectSmall);
end
if(flag<0)
[sortedEdges,lowestEdge,id] = edgesSort(edges);
[edges,flag] =
HeightFitFirst(sortedEdges,lowestEdge,id,rectSmall);
end
if(flag<0)
[sortedEdges,lowestEdge,id] = edgesSort(edges);
[edges,flag] =
PlaceabelFirst(sortedEdges,lowestEdge,id,rectSmall);
end
if(flag<0)
[sortedEdges,lowestEdge,id] = edgesSort(edges);
[edges,flag] =
cannotPalce(sortedEdges,lowestEdge,id,rectSmall,flag)
end
end
if count1 >= restrict1
rectSmall(1).length = 100000;
rectSmall(1).width = 100000;
end
if count2 >= restrict2
rectSmall(2).length = 100000;
rectSmall(2).width = 100000;
end
sortRect = sort([rectSmall(1).length,rectSmall(1).width,... rectSmall(2).length,rectSmall(2).width,...
rectSmall(3).length,rectSmall(3).width]);
minRect = sortRect(1);
minRect2 = sortRect(2);
[sortedEdges,lowestEdge,id] = edgesSort(edges);
[~,h] = size(sortedEdges);
for i = 1:h
if(sortedEdges(i).y+minRect <= width )
break;
end
end
if i == h
break;
end
if i == h-1 && lowestEdge.x + minRect2 > length
break
end
if frameCount > 300
break;
end
end
end
function initial
rectBig.length = 30;
rectBig.width = 20;
rectSmall(1).length = 4;
rectSmall(1).width = 3;
rectSmall(2).length = 3;
rectSmall(2).width = 3;
rectSmall(3).length = 4;
rectSmall(3).width = 1;
edges(1).x = 0;
edges(1).y = 0;
edges(1).length = rectBig.length;
% edges(1).x = 12;
% edges(1).y = 10;
% edges(1).length = 2;
%
% edges(2).x = 3;