【问题标题】:Variation of Bin packing- with bin and object classes and mutual constraintsBin 包装的变化 - 带有 bin 和对象类以及相互约束
【发布时间】:2014-10-30 04:35:29
【问题描述】:

我正在解决一个问题,它是装箱的一种变体,但更一般的形式带有额外的限制。问题定义如下-

我们有不同大小的对象,可以将它们分组到对象类中。我们有容量不同的垃圾箱,它们也被分组到垃圾箱类中(同一类中的所有垃圾箱都具有相同的容量)。对象类对它们可以放入哪些箱有限制——例如,“A”类的对象可以放置在“X”或“Y”类中的任何一个中。目标是找到每个类中的最小箱数,这可以产生给定对象集的最佳包装。

这个问题是否有一个很好的数学公式,以及您遇到的解决方法?这是可以应用相同方法的装箱问题的扩展吗?我知道这很难 NP。我找不到太多关于如何解决这个问题的信息,所以如果你能指出正确的方向,那将非常有帮助。

【问题讨论】:

    标签: algorithm optimization np bin-packing


    【解决方案1】:

    找到精确的解决方案是 NP 难的。但是找到最佳解决方案很容易。

    由于目标是尽量减少每个班级的垃圾箱数量,我会做这样的事情。

    从输入约束生成一个 Map,其中存储每个 bin 类可以打包的对象类。例如。对于约束“'A'类的对象可以放置在bin类'X'或'Y'中。”

    M[X] = {A};
    M[Y] = {A};
    

    通过处理所有约束来生成此地图。现在从具有最少对象数量的 bin 类开始,开始打包并将对象标记为 打包[Object_A] = true;

    现在对地图中的 bin 类按照计数的递减顺序重复上述步骤。

    在此之后,您将得到没有约束的对象和具有零个或多个对象的 bin 类。

    我们可以扩展 First Fit 算法来解决这部分问题。 根据其中的对象计数按升序对 bin 类进行排序。在左侧对象上运行循环以放入 First Fit bin 类。在每次迭代中,您需要根据对象计数重新排序 bin 类。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      目标是找到每个类中的最小箱数

      这是一个负载平衡(或公平)约束。诀窍是计算每个类的 bin 数量并惩罚该数字的平方:

      这样,您不必取每个班级的平均垃圾箱数:如果另一个硬约束阻止您达到特定班级的平均值,这种方式就会失效。

      Full explanation in this manual

      【讨论】:

        猜你喜欢
        • 2021-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-01
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 2012-01-29
        相关资源
        最近更新 更多