GRBQuadExpr
GRBQuadExpr
古洛比二次表达式对象。二次表达式包括一个线性表达式,加上一组捕捉二次项的系数-变量-变量三元组。二次表达式用于构造二次目标函数和二次约束。它们是临时对象,通常寿命很短。
的GRBQuadExpr
类是抽象基类的子类GRBExpr.
通常使用重载操作符构建二次表达式。例如,如果x
是一个GRBVar对象,然后x *
是一个GRBQuadExpr对象。表达式可以由常量构建(例如,expr = 0
)、变量(例如,Expr = 1 *x *x + 2 *x * y
),或由其他表达(例如:Expr2 = 2 * expr1 + x * x
,或Expr3 = expr1 + 2 * expr2
).您还可以修改现有的表达式(例如,x += x * x
,或expr2 - = expr1
).
构建表达式的另一种选择是从空表达式开始(使用GRBQuadExpr构造函数),然后添加术语。术语可以单独添加(使用addTerm)或分组使用(使用addTerms).术语也可以从表达式中删除(使用删除).
请注意,构建表达式的成本很大程度上取决于所使用的方法。虽然在构建小表达式时你通常可以忽略这个问题,但在构建大表达式时,你应该注意一些效率问题:
- 你应该避免使用
Expr = Expr + x*x
在一个循环中。它将导致运行时是表达式中项数的二次型。 - 使用
expr + = x * x
(或expr - = x * x
)的效率比Expr = Expr + x*x
.通过循环构建一个大型表达式+ =
语句是相当有效的,但它不是最有效的方法。 - 构建大型表达式的最有效方法是进行单个调用addTerms.
要向模型中添加二次约束,通常需要构建一个或两个二次表达式对象(qexpr1
和qexpr2
,然后使用重载比较操作符来构建GRBModel: addQConstr.举几个例子:
一旦您向模型中添加了约束,随后对用于构建约束的表达式对象的更改将不会对该约束产生影响。
二次表达式中的单个项可以使用getVar1,getVar2,getCoeff方法。函数查询表达式中二次项的个数大小方法。要查询与一个二次表达式相关的常数项和线性项,首先使用,得到二次表达式的线性部分getLinExpr,然后使用getConstant,getCoeff,或getVar对结果GRBLinExpr对象。
请注意,二次表达式可能包含多个涉及相同变量对的项。当从一个表达式创建模型目标时,这些重复的术语被合并,但是当检查表达式中的单个术语时,它们可能是可见的(例如,当使用getVar1和getVar2).
部分
- GRBQuadExpr ()
- GRBQuadExpr: addTerm ()
- GRBQuadExpr: addTerms ()
- GRBQuadExpr: clear ()
- GRBQuadExpr: getCoeff ()
- GRBQuadExpr: getLinExpr ()
- GRBQuadExpr: getValue ()
- GRBQuadExpr: getVar1 ()
- GRBQuadExpr: getVar2 ()
- GRBQuadExpr::操作符=
- GRBQuadExpr::操作符+
- GRBQuadExpr:运营商-
- GRBQuadExpr::操作符+ =
- GRBQuadExpr::运营商- =
- GRBQuadExpr::操作符* =
- GRBQuadExpr: remove ()
- GRBQuadExpr:尺寸()