如何以编程方式确定如何将较小的盒子放入更大的包装中?

时间:2008-09-26 16:03:11

标签: algorithm bin-packing

是否有人知道现有的软件或算法来计算运送多件物品的包装尺寸?

我的库存数据库中有很多项目,其中定义了长度,宽度和高度尺寸。鉴于这些尺寸,我需要计算购买的商品中有多少符合预定义的尺寸。

8 个答案:

答案 0 :(得分:58)

这是一个Bin Packing问题,而且它是NP难的。对于少量的对象和包,您可能只需使用强力方法尝试各种可能性。除此之外,您还需要使用某种启发式方法。维基百科的文章中有一些细节,以及您可能想要查看的论文的参考文献。

当然,替代方案是从一个非常简单的算法开始(例如简单地'堆叠'项目)并使用它计算合理的运输上限,然后如果你的人类包装工可以做得更好,你做一个微薄的利润。或者假设您的包装不理想,可以略微折现您的计算价格。

答案 1 :(得分:18)

关于“3D Bin包装”的文献非常广泛。您可以通过跟踪Professor David Pisinger的出版物来获得良好的概述。他还发布了少量高质量的bin打包实现之一,其中包含源代码:3dbpp.c

我自己的物流工具包pyShipping附带了仓储应用程序的3D Bin Packing实施。它基本上实现了4D Bin Packing(3D size& weigth),并在第二个运行时间内获得了典型订单大小(几十个包)的可接受解决方案。它现在用于生产(意味着仓库)几个月,以确定要使用的运输箱的上限。仓库工人通常能够更有效地打包,但这对我来说没问题。

答案 2 :(得分:9)

Pisinger是少数发表working code的学者之一。在他的一篇论文中,他提到了"最小深度"问题

这是一个实用的efficient algorithm 3D矩形盒子包装,可以调整封闭盒子的高度。

这是php中的一个实现。

答案 3 :(得分:6)

您是否尝试查看单个类型中有多少适合特定大小的包,或者您是否尝试混合类型?

听起来你正试图解决Knapsack Problem。您可能能够找到适合您特定要求的算法。只要明白,很难找到高效的算法,因为问题是NP完成(虽然根据您的具体要求,您可以找到有效的近似值,或者您的输入可能足够小这没关系。)

答案 4 :(得分:4)

如果这些方块是手工打包的,那么你可以考虑编写一个算法来做一个合理的人类会做的事情。我建议这样做的原因是因为除非你想打印出每个订单的包装说明,否则无论是谁正在打包你都要去锻炼它们如何适应所订购的物品,无论多少盒子已经分配给了顺序。

这可能导致你的人类打包者来到SO询问如何以编程方式锻炼如何将n个物品打包到m个盒子中。 :-P(他们也可能会要求去做,请你指示等等。)

只要您的算法符合人类合理的要求,我个人就会接受其运费估算。

答案 5 :(得分:3)

当存在许多包和/或许多约束时,Metaheuristics可以很好地处理现实世界的包装问题。一个开源Java实现是Drools Planner

答案 6 :(得分:2)

也许这听起来很明显,但记住这个问题可能是值得的,然后手工做一些。为NP-hard中的任意输入和框找到最有效的解决方案,但通过限制问题空间,接受一些低效率,NP大小可能是合理的,并且通过记忆,你可能能够带来“常见情况” “时间大幅减少。

在分层包装方面思考问题也许有所帮助。

答案 7 :(得分:0)

经过大量搜索后,我找到了一个可以帮助某人的GitHub存储库。函数PackingService.Pack()Container列表和Item(s)列表打包为参数和返回结果,其中包含大量信息,包括

"以包装和未包装物品的百分比和清单包装的容器"