【问题标题】:how to solve integer linear programming when one of the variables belong to a set当一个变量属于一个集合时如何解决整数线性规划
【发布时间】: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 * b3 s.t. 0 <= b1, b2, b3 <= 1b1, 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 <= 1b1 + b2 + b3 >= 1
  • @dhrumeel:是的,我包含了著名的转换等式约束的方法,以及使它与内点方法兼容的技巧。是否允许严格的不等式约束取决于求解方法(例如,障碍法求解器使所有不等式都变得严格)。当然,可以改用-x1 <= -1,而{2, 4} 仍然可行

标签: matlab linear-programming cplex lpsolve


【解决方案1】:

您可以重写一个问题,其中整数变量采用有限不连续的一组可能的整数值作为更多变量的二进制程序。随便写:

2 * b1 + 4 * b2 -5 * b3 - x1 = 0
b1 + b2 + b3 = 1

b1, b2, b3 被限制为二进制。这可能是直接支持的,或者表示为

b1, b2, b3 integer
0 <= b1, b2, b3 <= 1

如果不允许使用等式约束,请记住一对不等式约束是等价的。

 Ax = b;

一样
 Ax <= b
-Ax <- -b

但是解集仍然没有内部,所以内部点方法不起作用。您可以通过以下方式放松:

 Ax - e <= b
-Ax - e <= -b

并使用您的目标函数最小化e

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2020-09-14
    相关资源
    最近更新 更多