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)。
二次约束添加到你的模型,你通常建立一个或两个二次表达式对象(qexpr1
和qexpr2
),然后使用一个重载的比较运算符来构建一个理由Model.addConstr。给几个例子:
个人的二阶项二次表达式可以查询使用getVar1,getVar2,getCoeff方法。您可以查询的二次项表达式中使用大小方法。查询相关的常数和线性二次表达式,使用getLinExpr获得的线性部分二次表达式,然后使用getVar,getCoeff,getConstant在这个方法LinExpr对象。请注意,二次表达式可以包含多个方面涉及到相同的变量。这些重复的条件合并创建约束时的表情,但是他们可能是可见的,当检查个人条件表达式(例如,当使用getVar1和getVar2)。
部分
- QuadExpr ()
- QuadExpr.add ()
- QuadExpr.addConstant ()
- QuadExpr.addTerms ()
- QuadExpr.clear ()
- QuadExpr.copy ()
- QuadExpr.getCoeff ()
- QuadExpr.getLinExpr ()
- QuadExpr.getValue ()
- QuadExpr.getVar1 ()
- QuadExpr.getVar2 ()
- QuadExpr.remove ()
- QuadExpr.size ()
- QuadExpr.__eq__ ()
- QuadExpr.__le__ ()
- QuadExpr.__ge__ ()