【发布时间】:2014-04-10 18:58:15
【问题描述】:
我正在使用整数线性规划解决优化问题,其中一个约束假设变量的值属于一组值,如下所示
min 5*x1 + 2*x2
s.t.
x1,x2>0
x1 in {2,4,-5}
如何在 matlab 中使用 CPLEX 或 lp_solve 来表示这个问题来解决它? F,A,b 数组的值是多少?
谢谢
【问题讨论】:
-
您可以尝试写
x1 = 2 * b1 + 4 * b2 -5 * b3s.t.0 <= b1, b2, b3 <= 1和b1, b2, b3 integer. -
@BenVoigt :这可行,但您需要添加一个额外的约束
(b1 + b2 + b3) <= 1,否则x1 = 6可能是b1=1, b2=1, b3=0的解决方案 -
@dhrumeel:对不起,是的。我本来打算
b1 + b2 + b3 = 1然后忘记在我的问题中输入它。 (需要相等,因为x1 = 0是不允许的) -
x1 = 0 已经被原始问题中的边界
x1,x2>0避免了。我想这也使(-5)项变得多余。此外,许多 ILP 求解器不采用等式约束,所以如果我们确实想要等式,我们需要说b1 + b2 + b3 <= 1和b1 + b2 + b3 >= 1 -
@dhrumeel:是的,我包含了著名的转换等式约束的方法,以及使它与内点方法兼容的技巧。是否允许严格的不等式约束取决于求解方法(例如,障碍法求解器使所有不等式都变得严格)。当然,可以改用
-x1 <= -1,而{2, 4}仍然可行
标签: matlab linear-programming cplex lpsolve