QuadExpr


QuadExpr

古洛比二次表达式对象。一个二次表达式由一个线性表达式加上一组捕捉二次项的系数-变量-变量三元组组成。二次表达式用于构造二次目标函数和二次约束。它们是临时对象,通常寿命很短。

通常使用重载操作符构建二次表达式。例如,如果x是一个Var对象,然后x *是一个QuadExpr对象。表达式可以由常量构建(例如,expr = 0)、变量(例如,Expr = 1 *x *x + 2 *x * y),或由其他表达(例如:Expr2 = 2 * expr1 + x * x,或Expr3 = expr1 + 2 * expr2).您还可以修改现有的表达式(例如,x += 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.举几个例子:

{displaymath} \ \开始开始{数组}{1}\ mathrm{模型。addConstr}(qexpr1 <= qexpr2)... ...\ mathrm{模型。添加Constr}(2*x*x + 3*y*y <= 4) \\ \end{array}\end{displaymath}

一旦您向模型中添加了约束,随后对用于构建约束的表达式对象的更改将不会对该约束产生影响。

二次表达式中的单个二次项可以使用getVar1getVar2,getCoeff方法。函数查询表达式中二次项的个数大小方法。要查询与二次表达式相关的常数项和线性项,请使用getLinExpr求出线性部分的二次表达式,然后用getVargetCoeff,getConstant在这个方法LinExpr对象。请注意,二次表达式可能包含多个涉及相同变量对的项。当从表达式创建约束时,这些重复的术语会被合并,但是当检查表达式中的单个术语时,它们可能是可见的(例如,当使用getVar1getVar2).



部分