GRBLinExpr

Gurobi线性表达式对象。线性表达式由一个常数项,加上一个捕获的coefficient-variable双线性项列表。线性表达式是用来构建约束。他们临时对象,通常短寿命。

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方法,它添加了一组新的条款。方面也可以从一个表达式,使用删除

注意,建筑成本的表达式在很大程度上依赖于你使用的方法。而你通常可以忽略这个问题在构建小表情,您应该知道的几个效率问题在构建大型表达式:

  • 您应该避免使用expr = expr + x在一个循环中。它会导致运行时的二次项的数量表达式。
  • 使用expr + = x(或expr - = x)更有效expr = expr + x。构建大型表达式通过循环+ =语句是合理有效的,但它不是最有效的方法。
  • 最有效的方式来建立一个表达式是打一个电话addTerms

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

< span > < / span > \ displaystyle \美元开始{数组}{l} \ mathrm{模型。addConstr} (expr1 < = expr2) \ \……nstr} (expr1 = = 1) \ \ mathrm{模型。addConstr} (2 * x + 3 * y < = 4) \ \{数组}< span > < / span >美元
一旦你添加一个约束模型,后续更改您用于构建约束表达式对象不会改变约束(可以使用GRBModel: chgCoeff)。

个人在一个线性表达式可以查询使用getVar,getCoeff,getConstant方法。您可以查询条件表达式中使用的数量大小方法。

注意,一个线性表达式可以包含多个项涉及相同的变量。这些重复的条件合并创建约束时的表情,但是他们可能是可见的,当检查个人条件表达式(例如,当使用getVar)。



部分