首页 > 解决方案 > 基于其他变量定义 Gurobi 变量

问题描述

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

具体来说,我x[i]为范围定义了一个变量i。现在我想创建一个变量,y[i]它是. 最终目标是最小化目标中总体的最大值。x[i]x[i+1]iyi

我尝试如下定义变量:

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, without定义目标y也会给我错误。

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

标签: pythonmathematical-optimizationgurobi

解决方案


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

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

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

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


推荐阅读