LINEXPR.
LINEXPR.
Gurobi线性表达对象。线性表达式由常数项组成,以及捕获线性术语的系数可变对列表。线性表达式用于构建约束。它们是通常具有短寿命的临时对象。
您通常使用过载的运算符构建线性表达式。例如,如果X
是A.var.然后,对象x + 1
是A.LINEXPR.目的。表达可以由常数构建(例如,expr = 0.
),变量(例如,expr = 1 * x + 2 * y
)或其他表达(例如,expr2 = 2 * expr1 + x
, 或者EXPR3 = EXPR1 + 2 * EXPR2
)。您还可以修改现有表达式(例如,expr + = x
, 或者expr2 - = expr1
)。
重载的运营商的完整列表LINEXPR.对象如下:+
那+ =
那-
那- =
那*
那* =
, 和/
。在Python Parlance中,我们已经定义了以下内容LINEXPR.
职能:__添加__
那__radd__
那__我加__
那__sub__
那__sub__
那__isub__
那__mul__
那__rmul__
那__imul__
, 和__div__
。
我们还超载了比较运营商(==.那<=, 和> =),使其更容易从线性表达式构建约束。
你也可以使用添加或者addterms.修改表达式。这linexpr()构造函数可用于构建表达式。另一种选择是QuickSum.;它是一个更有效的python版本和
功能。可以使用表达式删除术语消除。
请注意,建筑表达的成本在很大程度上取决于您使用的方法。虽然您可以在构建小表达式时忽略此问题,但您应该在构建大型表达式时意识到一些效率问题:
- 而python
和
功能可用于构建表达式,应该避免。它的成本在表达的长度中是二次的。 - 出于类似的原因,您应该避免使用
expr = expr + x
在循环中。以这种方式构建大型表达也会导致二次堆积。 - 这QuickSum.函数比速度快得多
和
,循环结束expr + = x
或者expr.add(x)。这些方法足够快,对大多数程序来说足够快,但对于非常大的表达来说它们可能仍然是昂贵的。 - 构建大线性表达式的两个最有效的方法是addterms.或者linexpr()构造函数。
可以使用线性表达中的各个术语来查询Getvar.那getcoeff., 和getConstant.方法。您可以使用该术语查询表达式中的术语数尺寸方法。
注意,线性表达式可以包含涉及相同变量的多个术语。从表达式创建约束时,这些重复术语被合并,但是当检查表达式中的各个术语时,它们可能会看到(例如,使用时Getvar.)。
小节