根据价格和重量限制将运输成本降至最低

时间:2019-05-11 09:40:28

标签: algorithm knapsack-problem

当您有许多可以组合到同一包装中的物品(每个物品都有重量和价格)时,我正在尝试确定最低的运输成本。约束如下:

  1. 组合套餐的最高价格受到限制(例如$ 15)
  2. 使用下表确定包裹的费用:
    1. 如果包装的总重量小于30克,则费用为7.5美元
    2. 如果包装的总重量> = 30g并且<80g,则成本为$ 7.5 +(重量-30)x0.075
    3. 如果包装的总重量> = 80g,则成本为$ 7.5 +(重量-30)x0.055

这些物品可以组合成的包装数量没有限制,只要它们保持在总价格阈值以下即可。

我看过背包问题,但是背包问题和我的问题有2个主要区别:

  1. 一个是,我们不是要最大化组合物品的重量或价格,而是要最小化只能在组合后才能确定的计算变量。
  2. 此外,重量和运输成本之间没有直接关系。

1 个答案:

答案 0 :(得分:1)

如果物品很少,可以使用二进制掩码通过蛮力解决。将Monthly定义为项目数。当值nm)表示长度等于0 <= m < 2^n的二进制掩码时(如果需要,前导零)。掩码显示已处理的项目(如果n个项目已处理,则掩码中的i位为1)。为掩码i中的子集项定义F[m]的最低成本。当m代表F[m] = min(F[m xor x] + cost(x))的所有值x(x是m的子集)时。 m and x = xxor是二进制操作。 and的价格为1包,其中包含来自掩码cost(x)的物品(以下是from语句中的2.)。该算法的复杂度为x(对于n <=〜14,在一台好的计算机上不到一秒钟)。但是您可以使用此https://cp-algorithms.com/algebra/all-submasks.html并获得复杂性O(4^n)(对于n <=〜18来说,是很好的工作)。最初的O(3^n)和答案是F[0] = 0