矩形排料问题,组合优化问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档