gurobipy.LinExpr#

class LinExpr#

Gurobi 线性表达式对象。一个线性表达式由一个常数项和一系列系数-变量对组成,这些对捕捉了线性项。线性表达式用于构建线性目标和约束。它们是临时对象,通常具有较短的寿命。

通常使用重载运算符来构建线性表达式。例如,如果x是一个Var对象,那么x + 1就是一个LinExpr对象。表达式可以从常量(例如,expr = 0)、变量(例如,expr = 1 * x + 2 * y)或其他表达式(例如,expr2 = 2 * expr1 + x,或expr3 = expr1 + 2 * expr2)构建。你也可以修改现有的表达式(例如,expr += x,或expr2 -= expr1)。

LinExpr 对象上重载的操作符的完整列表如下:+, +=, -, -=, *, *=, /, 和 **(仅适用于指数2)。用Python的说法,我们定义了 以下 LinExpr 函数:__add__, __radd__, __iadd__, __sub__, __rsub__, __isub__, __neg__, __mul__, __rmul__, __imul__, __div__, 和 __pow__

我们还重载了比较运算符(==<=>=),以便更容易地从线性表达式构建约束。

你也可以使用addaddTerms来修改表达式。LinExpr()构造函数也可以用来构建表达式。另一个选择是quicksum;它是Python sum函数的一个更高效的版本。可以使用remove从表达式中移除项。

考虑到所有这些构建表达式的选项,您可能会想知道哪个是最快的。对于小型表达式,您不需要担心它们之间的性能差异。如果您正在构建许多非常大的表达式(数百个项),您会发现LinExpr()构造函数通常是最快的,其次是addTerms方法,然后是quicksum函数。

要向您的模型添加线性约束,通常需要构建一个或两个线性表达式对象(expr1expr2),然后使用重载的比较运算符来构建 Model.addConstr 的参数。以下是一些示例:

model.addConstr(expr1 <= expr2)
model.addConstr(expr1 == 1)
model.addConstr(2*x + 3*y <= 4)

一旦你向模型添加了一个约束,用于构建该约束的表达式对象的后续更改将不会改变该约束(你可以使用Model.chgCoeff来实现这一点)。

线性表达式中的各个项可以使用getVargetCoeffgetConstant方法进行查询。您可以使用size方法查询表达式中的项数。

请注意,线性表达式可能包含涉及相同变量的多个项。在从表达式创建约束时,这些重复的项会被合并,但在检查表达式中的各个项时(例如,使用getVar时),它们可能是可见的。

LinExpr(arg1=0.0, arg2=None)#

线性表达式构造函数。对于中等大小的线性表达式(只有几项)以及为了使用方便,通常应使用重载运算符而不是显式构造函数来构建线性表达式对象。

这个构造函数有多种形式。你可以使用常数(LinExpr(2.0))、变量(LinExpr(x))、表达式(LinExpr(2*x))、分别包含系数和变量的一对列表(LinExpr([1.0, 2.0], [x, y])),或者一个系数-变量元组列表(LinExpr([(1.0, x), (2.0, y), (1.0, z)]))来初始化一个线性表达式。

Returns:

一个线性表达式对象。

Example:
expr = LinExpr(2.0)
expr = LinExpr(2*x)
expr = LinExpr([1.0, 2.0], [x, y])
expr = LinExpr([(1.0, x), (2.0, y), (1.0, z)])
add(expr, mult=1.0)#

将一个线性表达式添加到另一个线性表达式中。完成后,调用的线性表达式将等于其自身与参数表达式的和。

Parameters:
  • expr – 要添加的线性表达式。

  • mult – (可选)参数表达式的乘数。

Example:
e1 = x + y
e1.add(z, 3.0)
addConstant(c)#

向线性表达式中添加一个常数。

Parameters:

c – 添加到表达式中的常数。

Example:
expr = x + 2 * y
expr.addConstant(0.1)
addTerms(coeffs, vars)#

将新项添加到线性表达式中。

Parameters:
  • coeffs – 新项的系数;可以是系数列表或单个系数。这两个参数必须具有相同的大小。

  • vars – 新术语的变量;可以是变量列表或单个变量。这两个参数必须具有相同的大小。

Example:
expr.addTerms(1.0, x)
expr.addTerms([2.0, 3.0], [y, z])
clear()#

将线性表达式设置为0。

Example:
expr.clear()
copy()#

复制一个线性表达式

Returns:

输入表达式的副本。

Example:
e0 = 2 * x + 3
e1 = e0.copy()
getConstant()#

从线性表达式中检索常数项。

Returns:

表达式中的常量。

Example:
e = 2 * x + 3
print(e.getConstant())
getCoeff(i)#

从表达式的单个项中检索系数。

Returns:

表达式中索引为i的项的系数。

Example:
e = x + 2 * y + 3
print(e.getCoeff(1))
getValue()#

使用当前解决方案计算表达式的值。

Returns:

表达式的值。

Example:
obj = model.getObjective()
print(obj.getValue())
getVar(i)#

从表达式的单个项中检索变量对象。

Returns:

表达式中索引为 i 的项的变量。

Example:
e = x + 2 * y + 3
print(e.getVar(1))
remove(item)#

从线性表达式中移除一个项。

Parameters:

item – 如果 item 是一个整数,那么存储在表达式索引 item 处的项将被移除。如果 item 是一个 Var,那么所有涉及 item 的项都将被移除。

Example:
e = x + 2 * y + 3
e.remove(x)
size()#

检索线性表达式中的项数(不包括常数项)。

Returns:

表达式中的项数。

Example:
e = x + 2 * y + 3
print(e.size())
__eq__()#

重载了==操作符,创建了一个TempConstr对象,该对象捕获了一个等式约束。结果通常立即传递给Model.addConstr

Returns:

一个 TempConstr 对象。

Example:
m.addConstr(x + y == 1)
__le__()#

重载了<=操作符,创建了一个TempConstr对象,该对象捕获了一个不等式约束。结果通常立即传递给Model.addConstr

Returns:

一个 TempConstr 对象。

Example:
m.addConstr(x + y <= 1)
__ge__(arg)#

重载 >= 操作符,创建一个 TempConstr 对象 用于捕获不等式约束。结果通常 立即传递给 Model.addConstr

Returns:

一个 TempConstr 对象。

Example:
m.addConstr(x + y >= 1)