具有多个尺寸箱的2D箱包装

时间:2012-07-20 04:34:27

标签: algorithm np-complete

假设我们有多种尺寸的长度由长度x宽度定义,那些可以称为“原材料”尺寸。

我需要从原材料中切出一定数量的桌子(矩形,以断头台形式),以便最大限度地减少原材料的使用量。

由于垃圾箱的尺寸不同,所以应该以某种方式考虑或优先考虑它们的价值 - 所以更大的箱子显然“更贵”。

我知道这是一个NP完全问题,我不期望在多项式时间内使用确定性算法。

我需要一种解决问题的算法。

任何建议都会有所帮助!

由于

1 个答案:

答案 0 :(得分:1)

嗯,基础知识是:你首先需要定义一个良好的功能。只有在那之后,您的问题才能被清楚地说明。让我们将材料板上任何矩形布局称为“排列”。 goodnes函数应该从Arrangements领域映射到实数域,越大越好,让我们说。该功能应该随着给定布置中“浪费”的材料量而减少,并且随着Arranegement满足的矩形的数量和值而增加。我再说一遍,你是那个必须定义善良功能的人,也就是材料的相对价值和各个矩形的价值,正如你所说的那样,它实现了“越大越好”的说法。你必须量化它。

一旦你这样做,就会为你打开过多的算法,第一个是随机算法:你在材料片上随机分配一个不重叠的排列或矩形,评估它的优点并将其存储在内存中。多次这样做之后,你会选择最好的一个。这种算法的改进是试图选择已经很好的排列并稍微“微调”矩形以获得一个小矩形的空间。这就是迪伦使用模拟退火可能意味着什么。顺便说一下。不要阅读关于模拟退火的维基百科页面,它只会弄乱你的脑袋。


对评论的回应:

显然,尼克,你必须从一开始就使用各种垃圾箱。假设您已经定义了起始材料(作为位图或向量)。你会做以下事情: 1.随机选择一个点 2.随机选择矩形类型 3.随机选择旋转 4.如果矩形不适合,请返回到第1点。 5.如果矩形适合,将其放在材料表上    尝试通过相同的方法放置第二个矩形。 6.然后是第三,第四等,直到你遇到太多失败并得出结论    你走到了尽头。 7.计算结果安排的好处 8.继续下一个安排

现在我想到,也许你的切割机只允许一个方向(2轴 没有工具旋转),因此不必考虑矩形的旋转。 在这种情况下,您将随机选择点,而不是在材料的一侧 单张或在纸张上已有的另一个矩形的一侧,您将放置 此时的下一个矩形,使其与纸张的一侧相邻 或与另一个矩形。在这种情况下(无旋转),您可以随机选择方向 并沿所选方向移动新矩形,直到它击中任何垂直方向 壁。这样,您将节省计算工作并从get中创建更好的安排 走。最后一步仍然是计算善良功能并选择最佳功能。