LinExpr
LinExpr
古罗比线性表达式对象。一个线性表达式包含一个常数项,加上一系列捕捉线性项的系数-变量对。线性表达式用于构建线性目标和约束。它们是临时对象,通常寿命很短。
通常使用重载操作符构建线性表达式。例如,如果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__
.
我们还重载了比较操作符(==,<=,>=),以便更容易地从线性表达式中构建约束。
你也可以使用添加或addTerms修改表达式。的LinExpr ()构造函数也可用于构建表达式。另一个选择是quicksum;它是一个更高效的Python版本总和
函数。术语可以从表达式中删除删除.
考虑到所有这些构建表达式的选项,您可能想知道哪个最快。对于小表达式,您不需要担心它们之间的性能差异。如果您正在构建大量非常大的表达式(100个术语),您将发现LinExpr ()构造函数通常是最快的,其次是addTerms方法,然后quicksum函数。
要向模型中添加一个线性约束,通常需要构建一个或两个线性表达式对象(expr1
和expr2
,然后使用重载比较操作符来构建Model.addConstr.举几个例子:
一旦您向您的模型添加了约束,随后对用于构建约束的表达式对象的更改将不会改变您将要使用的约束Model.chgCoeff)。
属性查询线性表达式中的单个项getVar,getCoeff,getConstant方法。属性查询表达式中的项数大小方法。
注意,一个线性表达式可能包含多个涉及相同变量的项。当从表达式创建约束时,这些重复的术语会被合并,但是当检查表达式中的单个术语时,它们可能是可见的(例如,当使用getVar).
部分