根据其他变量定义 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))
我正在使用带有 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))