堆叠算法 - 尽可能在最小区域内堆叠3d对象

时间:2009-07-30 13:12:44

标签: php algorithm function formula

我正在尝试解决将物品堆放到最方便的邮资大小的问题。物体的大小和形状会有所不同。所有物体的长度,宽度和高度都是已知的。

例如,客户可以订购(长x宽x高)200x100x10cm的物体(宽,长,平)以及2个50x50x50cm的物体(立方体)。如果我要打包这个,我会把扁平的宽物体放在底部,2个立方体放在上面,并排。

有没有人知道或者知道一个相当有效的算法解决方案呢?或者甚至是我应该考虑解决这个问题的方法。我整个星期都在编码,现在已经很晚了,我的大脑也被炸了。我还没有绝望,但我只想明天休息一天。

我设想的方法是创建一个表示3d空间的数组,每个数组元素代表该空间中的1平方/ cm。 3d空间长度和宽度将基于最长的对象和最宽的对象。然后你就可以从最大的物体到最小的物体,找到足够的“洞”并随时填充它们。

虽然我确信会有一个数学公式可以更有效地做到这一点。

有什么想法吗?

4 个答案:

答案 0 :(得分:5)

第一个建议 - 远离键盘,停止编码,开始思考!

第二个建议 - 你提出的方法(最大的,然后是次大的)是一个备受尊重的,并且很常用于这个问题的启发式方法。而且,除非你有大量的东西要打包,或者要做大量的包装,不要太在意执行效率,开发效率应该是你的首要任务。

第三条建议 - 谷歌进行垃圾箱包装但要收到警告,有大量关于此的文献。

最后,不要确定有一个数学公式: - )

答案 1 :(得分:2)

这不是一个简单的问题,我想它甚至是NP难的。你似乎有一些不错的想法!我建议阅读有关Knapsack problem的内容,以获得更多理论和新想法。

答案 2 :(得分:2)

我不认为这是微不足道的。我认为这个名称的正确名称是bin packing,谷歌的搜索显示了很多学术论文,但没有简单的算法(特别是3-D,这就是你想要的)。

你想在实践中处理多少个物体?如果它相对较少(即不是数百个TEU运输容器,但可能是一些用于Fedexing的纸板箱),那么对于局部最大值解决方案而言,可能采用简单的蛮力方法可能是最好的方法。

答案 3 :(得分:1)

我不是专家,但我认为目前无法在不使用蛮力方法的情况下找到最佳结果,但我可以提出一些建议:

1)如果您开始打包第一个容器上容量最大的对象和第二个容器上的第二个最大对象,第一个容器上的第三个最大容量,结果将至多为14%(或者它是34%?记不清楚!)比最佳结果差。我在保罗·霍夫曼(Paul Hoffman)的“只爱数字的人”这本书的某处读过这篇文章。

2)遗传算法应该以某些性能为代价为您提供相对较好的结果。

还有一些像Logen SolutionsMaxLoad这样的公司以此为生,所以如果您愿意付费,您也可以使用他们的网络服务。