优化 - 选择最小化成本的集子集

时间:2017-12-19 03:34:25

标签: optimization mathematical-optimization

解决此类问题的有效方法是什么:

我们有许多可能的实体(例如:产品,医学测试)。实体以包装形式提供,购买物品A,B,C的成本低于单独购买(物品可能会或可能不会单独出售,如果他们有一些价格)。我们只对几件商品感兴趣,我们希望找到单品和/或产品包的最佳组合,以最低的成本购买我们所需的所有商品(如果我们购买任何产品,我们并不在意不是我们的名单,他们对​​我们没有价值)。包的内容可以重叠(例如,项目A可以在几个不同的包中提供,也可以单独提供)。

最本地的方式是计算功率集(所有可能的子集),但这不允许解决方案很好地扩展。

什么是有效的精确或近似/启发式解决方案?

1 个答案:

答案 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)模型:

enter image description here

结果如下:

----     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求解器不是近似值,但它们通常只需要探索所有可能的整数解的一小部分。