【问题标题】:How to add constraint x∈{a,b} using cplex in Matlab?如何在 Matlab 中使用 cplex 添加约束 x∈{a,b}?
【发布时间】:2018-12-09 00:44:33
【问题描述】:

我正在尝试在 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'。

【问题讨论】:

    标签: matlab optimization linear-programming cplex


    【解决方案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. 
    

    它有效,但您的解决速度会很快下降。

    【讨论】:

    • 您好,彼得斯,感谢您的回答。我得到了您的想法并尝试通过 CPLEX 实施,但仍然没有成功。 >
    • 您能告诉我您在 CPLEX 中编码的数学模型吗?
    猜你喜欢
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多