QuadExpr

Gurobi二次表达式对象。二次表达式由一个线性表达式加上coefficient-variable-variable三元组的列表获取二次项。二次表达式是用来构建和二次约束二次目标函数。他们临时对象,通常短寿命。

你通常建立二次使用重载操作符的表达式。例如,如果x是一个Var对象,然后x *是一个QuadExpr对象。表达式可以由常量(如expr = 0)、变量(例如,expr = 1 * x * x + 2 * * y),或者从其他表达式(例如,expr2 = 2 * expr1 + x * x,或expr3 = expr1 + 2 * expr2)。您还可以修改现有的表达式(例如,expr + = x * x,或expr2 - = expr1)。

重载操作符的完整列表QuadExpr对象如下:+,+ =,- - - - - -,- =,*,* =,/。在Python的说法,我们定义以下QuadExpr功能:__add__,__radd__,__iadd__,__sub__,__rsub__,__isub__,__neg__,__mul__,__rmul__,__imul__,__div__

我们也比较运算符重载(= =,< =,> =),使其更容易构建约束二次表达式。

您可以使用quicksum建立二次表达式;这是一个更有效版本的Python总和函数。您还可以使用添加addTerms修改表达式。可以从一个表达式使用条款删除

鉴于所有这些选项用于构建表达式,您可能想知道它是最快的。对于小表情,你不需要担心它们之间的性能差异。如果您正在构建很多非常大的表达式(100年代的术语),你会发现一个调用addTerms是最快的。下一个将被调用quicksum,紧随其后的是一系列的调用expr.add (x * x)

二次约束添加到你的模型,你通常建立一个或两个二次表达式对象(qexpr1qexpr2),然后使用一个重载的比较运算符来构建一个理由Model.addConstr。给几个例子:

< span > < / span > \ displaystyle \美元开始{数组}{l} \ mathrm{模型。addConstr} (qexpr1 < = qexpr2) \……(qexpr1 = = 1) \ \ mathrm{模型。添加Constr}(2*x*x + 3*y*y <= 4) \ \end{array}<span>$</span>
一旦你添加一个约束模型,表达式对象的后续更改用于构建约束的约束将没有影响。

个人的二阶项二次表达式可以查询使用getVar1,getVar2,getCoeff方法。您可以查询的二次项表达式中使用大小方法。查询相关的常数和线性二次表达式,使用getLinExpr获得的线性部分二次表达式,然后使用getVar,getCoeff,getConstant在这个方法LinExpr对象。请注意,二次表达式可以包含多个方面涉及到相同的变量。这些重复的条件合并创建约束时的表情,但是他们可能是可见的,当检查个人条件表达式(例如,当使用getVar1getVar2)。



部分