GRBLinExpr


GRBLinExpr

古罗比线性表达式对象。一个线性表达式包含一个常数项,加上一系列捕捉线性项的系数-变量对。线性表达式用于构建约束。它们是临时对象,通常寿命很短。

GRBLinExpr类是抽象基类的子类GRBExpr

通常使用重载操作符构建线性表达式。例如,如果x是一个GRBVar对象,然后x + 1是一个GRBLinExpr对象。表达式可以由常量构建(例如,expr = 0)、变量(例如,Expr = 1 * x + 2 * y),或由其他表达(例如:Expr2 = 2 * expr1 + x,或Expr3 = expr1 + 2 * expr2).您还可以修改现有的表达式(例如,expr + = x,或expr2 - = expr1).

构建表达式的另一种选择是使用addTerms方法,它一次添加一组新术语。术语也可以从表达式中删除,使用删除

请注意,构建表达式的成本很大程度上取决于所使用的方法。虽然在构建小表达式时你通常可以忽略这个问题,但在构建大表达式时,你应该注意一些效率问题:

  • 你应该避免使用exp = Expr + x在一个循环中。它将导致运行时是表达式中项数的二次型。
  • 使用expr + = x(或expr - = x)的效率比exp = Expr + x.通过循环构建一个大型表达式+ =语句是相当有效的,但它不是最有效的方法。
  • 构建大型表达式的最有效方法是调用addTerms

要向模型中添加一个线性约束,通常需要构建一个或两个线性表达式对象(expr1expr2)然后使用重载的比较运算符构建一个参数GRBModel: addConstr.举几个例子:

{displaymath} \ \开始开始{数组}{1}\ mathrm{模型。addConstr} (expr1 < = expr2 ) \... ...) \\ \ mathrm{模型。addConstr}(2*x + 3*y <= 4) \\结束{array}\结束{displaymath}

一旦您向您的模型添加了约束,随后对用于构建约束的表达式对象的更改将不会改变您将要使用的约束GRBModel: chgCoeff)。

属性查询线性表达式中的单个项getVargetCoeff,getConstant方法。属性查询表达式中的项数大小方法。

注意,一个线性表达式可能包含多个涉及相同变量的项。当从表达式创建约束时,这些重复的术语会被合并,但是当检查表达式中的单个术语时,它们可能是可见的(例如,当使用getVar).



部分