3

我正在尝试解决将对象堆叠成最方便邮资的尺寸的问题。物体的大小和形状会有所不同。所有物体的长度、宽度和高度都是已知的。

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

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

我设想的方式是创建一个表示 3d 空间的数组,每个数组元素代表该空间中的 1 平方/厘米。3d 空间长度和宽度将基于最长的对象和最宽的对象。然后你只需从最大的物体到最小的物体,找到足够的“洞”并在你走的时候把它们填满。

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

有任何想法吗?

4

4 回答 4

5

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

第二个建议-您提出的方法(首先是最大的,然后是第二大的)对于这个问题来说是一种备受推崇和广泛使用的启发式方法。而且,除非你有大量的东西要打包,或者大量的打包要做,否则不要太在意执行效率,开发效率应该是你的首要任务。

第三个建议——谷歌打包,但要注意,这方面有大量的文献。

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

于 2009-07-30T13:22:31.400 回答
2

这不是一个简单的问题,我想它甚至是 NP 难的。不过,你似乎有一些好主意!我建议阅读有关背包问题的内容,以获取更多理论和新想法。

于 2009-07-30T13:21:42.960 回答
2

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

您希望在实践中处理多少个对象?如果它相对较少(即不是数百个放入 TEU 集装箱,但可能有几个放入 Fedexing 的纸板箱中),那么对于局部最大值解决方案而言,简单的蛮力方法可能是最好的方法。

于 2009-07-30T13:22:19.123 回答
1

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

1)如果你开始在第一个容器上包装体积最大的物体,在第二个容器上包装第二大的物体,在第一个容器上无限地包装第三大的物体,结果最多为14%(或者是34%?记不清了!)比最佳结果最差。我在保罗霍夫曼的《只爱数字的人》一书中的某个地方读到了这一点。

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

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

于 2009-07-30T13:43:10.350 回答