根据其他变量定义 Gurobi 变量

Define Gurobi variable based on other variable

我正在使用带有 Python API 的 Gurobi 9.0.0 来求解 MIP。我坚持表达基于另一个变量定义的变量。

具体来说,我为 i 的范围定义了一个变量 x[i]。现在我想创建一个变量 y[i],它是 x[i]x[i+1] 之间定义范围 i 的绝对差值。最终目标是在 objective.

中的所有 i 中最小化 y 的最大值

我试过如下定义变量:

y[i] = model.addVar(abs_(x[i] - x[i+1]) for i in range(i_range - 1))

但是 Gurobi 抛出错误

File "model.pxi", line 2562, in gurobipy.Model.addVar
TypeError: must be real number, not GenExpr

根据x直接定义objective,没有y,也会报错。

这一定是一个非常典型的用例。如何在 Gurobi 中正确定义它?

请注意,在 AddVar(abs_(x[i] - x[i+1] for range(i_range - 1) 部分,您尝试使用命令添加单个变量,但生成器表达式(即由 i 索引的多个表达式)作为其参数。这会导致您遇到错误。

添加这样的定义的一个常见步骤是添加两个变量,y 作为实数(自由符号)变量和 z 非负变量,两者都由与 [= 相同的集合索引14=],然后添加如下约束:

model.addConstrs(y[i] == x[i] - x[i+1]) for i in range(i_range - 1))

m.addConstr(z == abs_(y))