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__。我们还重载了比较运算符(
==、<=和>=),以便更容易地从线性表达式构建约束。你也可以使用
add或addTerms来修改表达式。LinExpr()构造函数也可以用来构建表达式。另一个选择是quicksum;它是Pythonsum函数的一个更高效的版本。可以使用remove从表达式中移除项。考虑到所有这些构建表达式的选项,您可能会想知道哪个是最快的。对于小型表达式,您不需要担心它们之间的性能差异。如果您正在构建许多非常大的表达式(数百个项),您会发现
LinExpr()构造函数通常是最快的,其次是addTerms方法,然后是quicksum函数。要向您的模型添加线性约束,通常需要构建一个或两个线性表达式对象(
expr1和expr2),然后使用重载的比较运算符来构建Model.addConstr的参数。以下是一些示例:model.addConstr(expr1 <= expr2) model.addConstr(expr1 == 1) model.addConstr(2*x + 3*y <= 4)
一旦你向模型添加了一个约束,用于构建该约束的表达式对象的后续更改将不会改变该约束(你可以使用
Model.chgCoeff来实现这一点)。线性表达式中的各个项可以使用
getVar、getCoeff和getConstant方法进行查询。您可以使用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)