【问题标题】:How to model this MILP problem in python?如何在 python 中建模这个 MILP 问题?
【发布时间】:2019-11-29 11:39:39
【问题描述】:

我有一个想要解决的问题,但我不知道如何对其建模在问这里之前,我进行了研究并找到了有用的东西,但我无法解决这个问题。我在下面遇到的问题示例

所以我有很多项目,比如说 40 个,每个项目有 2 或 3 个功能,每个功能只有在有 3、4、5、...时才有用,具体取决于功能。

目标是通过 10 个不同的项目

获得最大数量的不同的有用功能

示例(如果 3 个或更多不同的项目包含 a,则特征 a 有用,如果 5 个或更多不同的项目包含 b,则特征 b 有用,c 8 或更多项目等)

Items   Features (a,b,c,...)
item1   a,c,d
item2   a,b
item3   a,b,e,
item4   a,c
item5   b,e,f
item6   b,d,e
item7   b,c,d
item8   c,f
item9   c,d,e
item10  d,f
...     ...

一个示例组合

item1+item2+...+item10 = a(3), b(5) 

所以 a 和 b 有用的特性(c 没用,因为有 5 个我们需要 8 个才能使它有用)

我想我想对一个混合整数线性程序建模并使用分支定界求解器对其进行求解目标是每个项目和每个特征的特征权重的数量(?)我曾考虑将其建模为背包问题,但后来我不知道如何应用这个容量是 10 但价值和重量?对有用的功能有最低要求,我需要一些指导或通用算法来解决这个问题,如果我有什么要开始的,我可以进一步调查

【问题讨论】:

  • 在示例中,您有 3 个具有“a”功能的项目,但在输出中您编写了 a(3)。对吗?

标签: python mixed-integer-programming branch-and-bound


【解决方案1】:

我的做法是:

第一步:建立数学模型

拿一张纸,写下一个数学模型。例如:

数据:

 a(i,f) = 1   if item i has feature f
          0   otherwise
 K(f)   = number of items with feature f needed to be useful
 N      = number of items to select

二进制变量:

 x(i) = 1    if item i is selected
        0    otherwise

 u(f) = 1    if feature f is useful in selection
        0    otherwise

型号:

  maximize sum(f,u(f))
  subject to 
       sum(i,x(i)) = N
       u(f)*K(f) <= sum(i, a(i,f)*x(i))   for all f

第 2 步:实施

这现在应该是微不足道的。首先写下数学模型的目的是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 2021-05-08
    • 2022-01-15
    相关资源
    最近更新 更多