是否有人知道现有的软件或算法来计算运送多件物品的包装尺寸?
我的库存数据库中有很多项目,其中定义了长度,宽度和高度尺寸。鉴于这些尺寸,我需要计算购买的商品中有多少符合预定义的尺寸。
答案 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)列表打包为参数和返回结果,其中包含大量信息,包括
"以包装和未包装物品的百分比和清单包装的容器"