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.)。



小节