GRBQuadExpr
GRBQuadExpr
Gurobi二次表达式对象。二次表达式由线性表达式和捕获二次项的系数变量三元组列表组成。二次表达式用于构建二次目标函数和二次约束。它们是通常具有较短寿命的临时对象。
这个GRBQuadExpr
类是抽象基类的子类GRBExpr.
在支持运算符重载的.NET语言中,通常使用重载运算符构建二次表达式x
是一个格尔瓦对象,然后x*x
是一个GRBQuadExpr表达式可以从常量(例如。,expr=0
),变量(例如。,expr=1*x*x+2*x*y
),或来自其他表达式(例如。,expr2=2*expr1+x
或expr3=expr1+2*expr2
)。您还可以修改现有表达式(例如。,expr+=x*x
或expr2-=expr1
).
构建表达式的另一个选项是从空表达式开始(使用GRBQuadExpr构造函数),然后添加术语。可以单独添加术语(使用AddTerm)或分组(使用附加条款或穆尔塔德)。也可以从表达式中删除术语(使用去除).
请注意,构建表达式的成本在很大程度上取决于所使用的方法。虽然在构建小表达式时通常可以忽略此问题,但在构建大表达式时应注意一些效率问题:
- 你应该避免使用
expr=expr+x*x
或expr+=x*x
在循环中。它将导致运行时在表达式中的项数是二次的。 - 使用AddTerm在循环中是相当有效的,但它不是最有效的方法。
- 构建大型表达式最有效的方法是对附加条款.
要向模型添加二次约束,通常需要构建一个或两个二次表达式对象(qexpr1
和qexpr2
),然后使用重载比较运算符为其构造实参GRBModel.AddQConstr.举几个例子:
一旦向模型添加了约束,用于构建约束的表达式对象的后续更改将不会对该约束产生影响。
可以使用GetVar1GetVar2和格特科夫方法。参数可以查询表达式中二次项的个数大小要查询与二次表达式关联的常量和线性项,请首先使用LinExpr,然后使用常数,格特科夫或格特瓦尔关于结果GRBLinExpr对象。
请注意,二次表达式可能包含涉及同一变量对的多个项。从表达式创建模型目标时,这些重复项会合并,但在检查表达式中的单个二次项时(例如,使用GetVar1和GetVar2).
分段