有没有办法在 Ampl 中从一个整数集合中创建一个特定变量?
Is there a way to make a specific variable from a set an integer in Ampl?
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
仅 return 一个 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;
选项 2:将虚拟变量声明为整数,然后约束相关值以匹配它:
var X{j in P} >=0;
var int_dummy integer;
s.t. force_integer: X["sweatshirt-f"] = int_dummy;
我现在无法测试这些,因此您可能需要进行一些调试,但这应该能让您接近解决方案。
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
仅 return 一个 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;
选项 2:将虚拟变量声明为整数,然后约束相关值以匹配它:
var X{j in P} >=0;
var int_dummy integer;
s.t. force_integer: X["sweatshirt-f"] = int_dummy;
我现在无法测试这些,因此您可能需要进行一些调试,但这应该能让您接近解决方案。