如何在Matlab中使用cplex添加约束x∈{a,b}?

时间:2016-02-17 11:08:29

标签: matlab optimization linear-programming cplex

我试图在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

取自:http://www-01.ibm.com/support/knowledgecenter/SSSA5P_12.6.3/ilog.odms.cplex.help/CPLEX/MATLAB/topics/example_cplexlpex.html

但是,在这个问题中,我想添加约束x∈{20,30} s.t解决方案值是20或30.我怎么能写这个附加约束的语法?我想使用ctype,但ctype只能用于'I,B,S,N,C'。

1 个答案:

答案 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. 

它有效,但你的解决方案速度会快速恶化。