如何在python中对这个MILP问题进行建模?



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

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

目标是通过 10 个不同的项目获得最大数量的不同有用功能

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

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 但价值和重量?对有用的功能有最低要求,我需要一些指导或通用算法来面对这个问题,如果我有什么要开始的,我可以进一步调查

我的方法是:

第 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 步:实施

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

最新更新