gurobi - 如何处理 Gurobi 约束中的绝对值
问题描述
我想处理 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
解决方案
该abs_
函数是 Gurobi Python API 的一部分,在 LP 文件中不起作用。(读取您的 LP 文件时,求解器将您的C3
约束解释为具有四个变量的线性约束,名称分别abs_(v0
为 、v1)
、abs_(v1
和v2)
。)
另外,请注意绝对值约束只能采用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] )
推荐阅读
- python - 在固定宽度文本文件的多个位置添加分隔符的问题
- android - 如何将 Unity 应用程序集成到原生 android studio 项目中
- machine-learning - 什么是负采样方法使用 - sigmoid 或 softmax?
- amazon-web-services - AWS - {lambda function} 可能没有定义授权
- python - Python 3(Linux 和 Windows)中的 CPU 温度
- javascript - 如何使用 ES6 语法导入 pg-promise?
- mysql - 只允许每个 id 列有一次 true 吗?
- java - 我如何在 AccessibilityService 类中获得退格(删除)单击键事件?
- python - 我收到 TypeError: 'NoneType' object is not subscriptable in tictactoe 但我尝试在线解决类似问题但没有用
- c - 错误:声明在全局范围内隐藏变量