背包/背包2d / 4d

时间:2017-10-22 18:59:51

标签: python algorithm knapsack-problem bin-packing

假设我每天有500多个订单。每个订单平均包含30种不同空间尺寸和重量的产品。我想用最少数量的盒子来包装产品。盒子上的限制是重量和体积。对于所有框,两个约束都是固定的并且相等。

从我所看到的,这看起来像4d binpacking /背包问题,我已经阅读了一些可以解决这个问题的算法。有没有可用的python包可以帮我解决这个问题?

另外,由于我不太担心3个空间维度,我会满意的是2d bin打包算法,其中2d我的意思是体积和重量(而不是矩形框!)。

提前多多赞赏!

1 个答案:

答案 0 :(得分:0)

感谢您提供将此从4D减少到2D。 完成后,对我而言,你的二维问题比一维更难很多,因为质量和体积通过密度自然相关。 这与尺寸为(机器,时间)的作业车间调度完全不同。你的物品有不同的密度,但仍然质量和数量将显示正相关。

目标密度的启发式算法就是bin_weight_limit / bin_volume。更好的估计将考虑输入集是否会受到质量或体积的限制,甚至可能使用我们昨天发运的密度,如果项目组合没有每天大幅改变。我建议使用标准的1D贪婪方法,并加强密度跟踪。如果目前的包装物品高于目标密度,那么“贪婪”意味着更喜欢选择密度较小的物品,反之亦然。

您可以通过存储按重量顺序排序的项目列表以及按卷顺序排序的其他项目列表来实现此目的。保持指向列表的指针,并根据当前是高于还是低于目标密度从一个列表或另一个列表中选择。定义一个功能,使选择过程在接近满或更不平衡时更加挑剔,例如坚持跳过几个候选项以确保强烈不平衡的密度变化“大”量。在添加每个项目时,您可能会尝试在目标密度的上方和下方之间交替使用箱密度。