解决此类问题的有效方法是什么:
我们有许多可能的实体(例如:产品,医学测试)。实体以包装形式提供,购买物品A,B,C的成本低于单独购买(物品可能会或可能不会单独出售,如果他们有一些价格)。我们只对几件商品感兴趣,我们希望找到单品和/或产品包的最佳组合,以最低的成本购买我们所需的所有商品(如果我们购买任何产品,我们并不在意不是我们的名单,他们对我们没有价值)。包的内容可以重叠(例如,项目A可以在几个不同的包中提供,也可以单独提供)。
最本地的方式是计算功率集(所有可能的子集),但这不允许解决方案很好地扩展。
什么是有效的精确或近似/启发式解决方案?
答案 0 :(得分:1)
您可以在优化模型中执行此操作。
假设我们有输入数据:
---- 14 SET c items+combos
c1, c2, c3, A , B , C
---- 14 SET i single items
A, B, C
---- 14 PARAMETER p prices
c1 30, c2 18, c3 18, A 10, B 12, C 15
---- 14 PARAMETER cc combo content
A B C
c1 1 1 1
c2 1 1
c3 2
A 1
B 1
C 1
---- 14 PARAMETER demand items needed
A 7, B 4, C 3
现在我们解决简单的混合整数规划(MIP)模型:
结果如下:
---- 36 VARIABLE buy.L items+combos to buy
c1 3, c2 1, c3 1, A 1
---- 36 VARIABLE cost.L = 136.000
在某些情况下,我们会购买超过需要的商品(如果折扣足够高)。如果您购买的商品超出需求价值,那么模型会变得有点复杂。
高性能商业和开源MIP解算器都很容易获得。他们将非常有效地解决这种类型的模型到全局最优性(即使对于具有许多项目和许多组合的较大数据集)。与您的“powerset”算法相比,对我来说这种方法看起来更具吸引力。 MIP求解器不是近似值,但它们通常只需要探索所有可能的整数解的一小部分。