我试图在Matlab中使用cplex来获取变量x的解决方案,但我很困惑如何编写语法,因为我想解决方案x∈{a,b}。
例如,假设我有这个LP问题:
Maximize x1 + 2 x2 + 3 x3
Subject to
- x1 + x2 + x3 <= 20
x1 - 3 x2 + x3 <= 30
Bounds
0 <= x1 <= 40
0 <= x2
0 <= x3
但是,在这个问题中,我想添加约束x∈{20,30} s.t解决方案值是20或30.我怎么能写这个附加约束的语法?我想使用ctype,但ctype只能用于'I,B,S,N,C'。
答案 0 :(得分:1)
我对matlab中的cplex功能并不太熟悉,但如果其他所有方法都失败了,你可以随时定义
x = 20 + 10*B,
其中B是二进制变量。这样,x只能取2个值。当你想要更多选项时,这种方法会变得混乱,例如
x \in {20, 23, 30, 103}.
然后你必须定义
x = 20*B_1 + 23*B_2 etc
sum_i (B_i) = 1.
它有效,但你的解决方案速度会快速恶化。