set P;
set K;
set I:= {i in K};
set J:={j in P};
param C {P} >=0;
param A {K,P} >=0;
param B {K} >=0;
var X{j in P} >=0;
P
由4个集合值组成,即 sweatshirt-f
, sweatshirtB/F
, tshirtf
和 tshirtBF
但我想 sweatshirt-f
只不过 integer
:
maximize f: sum{j in P} C[j]*X[j];
S.T. Constraint {i in K}
:
sum{j in P} A[i,j]*X[j]<=B[i];
方案1:将它们全部声明为整数,然后放宽对其他值的整数约束。
var X{j in P} >=0 integer;
let {i in P: i <> "sweatshirt-f"} X[i].relax := 1;
方案二: 将一个虚拟变量声明为整数,然后约束相关的值来匹配它。
var X{j in P} >=0;
var int_dummy integer;
s.t. force_integer: X["sweatshirt-f"] = int_dummy;
我现在还不能测试这些,所以你可能需要做一些调试,但这应该能让你找到一个解决方案。