在Ampl中,有没有办法让一个特定的变量从一个集合中变成一个整数?

问题描述 投票:0回答:1
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, tshirtftshirtBF但我想 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];
ampl
1个回答
0
投票

方案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;

我现在还不能测试这些,所以你可能需要做一些调试,但这应该能让你找到一个解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.