【问题标题】:How to handle absolute value in Gurobi constraints如何处理 Gurobi 约束中的绝对值
【发布时间】:2019-10-31 17:48:29
【问题描述】:

我想处理 Gurobi 约束中的绝对值。这是我的代码 abc.lp。但是我没有得到解决方案。

Maximize
  v0 + v1 + v2



SubjeCt To
C1: 3 v0 + v1 + v2 <=   72

C2: 2 v0 + 3 v1 + 2 v2 <= 80

C3: abs_(v0 - v1) + abs_(v1 - v2) >= 10

Integers 
v0 v1 v2
End

【问题讨论】:

标签: gurobi


【解决方案1】:

abs_ 函数是 Gurobi Python API 的一部分,在 LP 文件中不起作用。 (读取您的 LP 文件时,求解器会将您的 C3 约束解释为具有四个变量的线性约束,名称为 abs_(v0v1)abs_(v1v2)。)

另外,请注意绝对值约束只能采用var1 = abs_(var2) 的形式。所以你必须定义一些辅助变量来模拟上面的约束。

在 Python API 中,您可以对约束 C3 进行如下建模:

a = model.addVars(4, name="a")   # auxiliary variables
model.addConstr(a[0] == v0 - v1)
model.addConstr(a[1] == v1 - v2)
model.addConstr(a[2] == abs_(a[0]))
model.addConstr(a[3] == abs_(a[1]))

model.addConstr(a[2] + a[3] >= 10)

在LP文件中,可以在General Constraints部分看到绝对值约束:

General Constraints
 GC0: a[2] = ABS ( a[0] )
 GC1: a[3] = ABS ( a[1] )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多