grbquadexpr.
grbquadexpr.
Gurobi二次表达式对象。二次表达式由线性表达式组成,以及捕获二次术语的系数可变变量三维列表。二次表达式用于构建二次目标函数和二次约束。它们是通常具有短寿命的临时对象。
这grbquadexpr.
类是抽象基类的子类GRBEXPR.。
在支持运算符重载的.NET语言中,通常使用过载的运算符构建二次表达式。例如,如果X
是A.GRBVAR.然后,对象x * x.
是A.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.)或组(使用addterms.要么Multadd.)。术语也可以从表达式中删除(使用消除)。
请注意,建筑表达的成本在很大程度上取决于您使用的方法。虽然您可以在构建小表达式时忽略此问题,但您应该在构建大型表达式时意识到一些效率问题:
- 你应该避免使用
expr = expr + x * x
要么expr + = x * x
在循环中。它将导致运行时是表达式中的术语数量的二次。 - 使用addterm.在循环中是合理效率,但它不是最有效的方法。
- 构建大表达的最有效的方法是打电话给addterms.。
可以使用二次表达中的各个二次术语来查询getvar1.getvar2., 和getcoeff.方法。您可以使用该表达式查询表达式的二次术语数尺寸财产。要查询与二次表达式相关联的常量和线性术语,首先使用二次表达式的线性部分使用LINEXPR.,然后使用持续的那getcoeff., 要么Getvar.在结果上格林克斯特目的。
注意,二次表达式可以包含涉及相同变量对的多个术语。从表达式创建模型目标时,这些重复术语被合并,但是当检查表达式中的单个二次术语时,它们可能是可见的(例如,使用时getvar1.和getvar2.)。
小节