矩形嵌套 - 使用模拟退火收敛到最优解

时间:2015-03-24 11:37:45

标签: matlab optimization geometry computational-geometry geometry-surface

我使用模拟退火进行矩形嵌套问题。我能够取得好成绩,但我得到的解决方案是DISCRETE。甚至不能总是获得全局最优。

问题描述:

目标 - 通过更改放置零件的顺序,最小化无限薄板的长度(宽度恒定)。

我面临的问题:

我获得的输出结果是DISCRETE(只有15种可能的利用率%)而不是ANALOG(因为有11种!* 2 ^ 11可能的解决方案 - >我们希望结果是模拟的)

SA行进的路径 - MATLAB输出enter image description here

我期望的结果使用与此问题相同的SA代码生成其他问题 enter image description here

从下图中可以看到我获得DISCRETE输出的原因。序列的长度可能很多55。

效率根据最大长度计算得出 enter image description here

如果我像这样改变计算利用率%的方式,我认为我可以解决问题。

效率根据边界切割长度计算得出 enter image description here

即使我想出如何解决问题,我也不知道如何找到边界切割区域以便找到效率。有人有办法找到红线下的区域吗?我需要避免使用Image Processing Toolbox

供参考: 矩形存储为每个矩形的原点左下角位置的x,y距离。我在另一个变量中有相应的长度,广度值。

1 个答案:

答案 0 :(得分:0)

我弄明白了,如何使用Image Processing Toolbox找不到边界切割区域 而不使用。我想发布这个作为其他有类似问题的人的答案。也欢迎更好的解决方案。

放置零件的逻辑:

将部分从Left-> Right放置到Right most end,然后转到Left end并将下一部分放在上一部分上,移动Right,依此类推。< / p>

寻找边界切割区域的解决方案:

我只创建一个单维矩阵,其长度等于工作表的宽度(在上面的屏幕截图中 - > 200)默认情况下,我将它们的值设置为zero

boundaryLength = zeros(sheetWidth+1,1);   
% sheetWidth+1 because matlab starts from the index 1 while my range is from 0-200

每次我放置一个部分时,我都会指定值的范围,即从左下角位置的xDist到右下角位置的xDist到顶部的yDist值线。

for i = 1:numberOfParts
    boundaryLength(xDist(i)+1:xDist(i)+width(Index(i))) = yDist(i)+ height(Index(i));
end

% Index is the order in which i place the part. 
% Here in the above screenshot, my index value is [8, 2, 4, 11, 7, 5, 6, 10, 1, 9, 3]

现在我已经找到了整个纸张宽度中每个像素的最大占用长度。要找到该区域,我需要找到向量boundaryLength

的总和
boundaryArea = sum(boundaryLength);

边界切割利用率示例: enter image description here

相关问题