Model.addQConstr ()


Model.addQConstr ()

addQConstr(lhs, sense=None, rhs=None, name="")

向模型添加二次约束。

重要注意:Gurobi用来解决二次约束问题的算法只能处理某些类型的二次约束。我们始终接受下列表格的限制:

  • <span>$</span>x^TQx + q^Tx \le b<span>$</span>,在那里< span > < / span > Q < span >美元< / span >正半定(PSD)
  • < span > < /美元跨度> x ^ Tx \ le y ^ {2} < span > < / span >美元,在那里< span > < /美元跨度> x < span > < / span >美元是由变量组成的向量吗< span > < / span > y < span >美元< / span >为非负变量(二阶锥)
  • <span>$</span>x^Tx \le y z<span>$</span>,在那里< span > < /美元跨度> x < span > < / span >美元是由变量组成的向量吗< span > < / span > y < span >美元< / span >< span > < / span > z < span >美元< / span >为非负变量(旋转的二阶锥)
如果添加了不在其中一个表单中的约束(并且Gurobi presolve无法将约束转换为其中一个表单),那么在尝试解决模型时就会得到一个错误。当二次项只涉及二元变量时,约束总是转换成这些形式中的一种。

注意,此方法还接受TempConstr作为它的第一个参数(名称作为第二个参数)。这允许您使用操作符重载来创建约束。看到TempConstr为更多的信息。

参数:

:左边是新的二次约束。可以是常数,aVar,一个LinExpr,或者一个QuadExpr

感觉:新二次约束的意义(伽马射线爆发。LESS_EQUAL伽马射线爆发。GREATER_EQUAL).

园艺学会:右边是新的二次约束。可以是常数,aVar,一个LinExpr,或者一个QuadExpr

的名字:新约束的名称。请注意,的名字将以ASCII字符串的形式存储。因此,名字就像“一个< span > < /美元跨度> {\ rightarrow} < span > < / span >美元B”将产生一个错误,因为< span > < /美元跨度> {\ rightarrow} < span > < / span >美元'不能表示为ASCII字符。还请注意,强烈反对包含空格的名称,因为不能将它们写入LP格式文件。

返回值:

新的二次约束对象。

使用示例:

模型。addQConstr(x*x + y*y, GRB。LESS_EQUAL, z*z, "c0") model.addQConstr(x*x + y*y <= 2.0, "c1")