我有一个问题想要解决,但我不知道如何建模 在问这里之前,我做了研究并找到了有帮助的东西,但我无法理解它。我在下面遇到的问题示例
所以我有很多项目,比如说 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 步:实施
这现在应该是微不足道的。这就是首先写下数学模型的目的。