GRBaddqconstr


GRBaddqconstr

int GRBaddqconstr( GRB模型 *模型,
int numlnz,
int *林德,
双重的 *艾瓦尔,
int 努姆克孜,
int *克洛,
int *qcol,
双重的 *qval,
烧焦 感觉
双重的 rhs,
常量字符 *(姓名)

向模型添加一个新的二次约束。请注意,由于我们的延迟更新方法,在您更新模型(使用GRBupdatemodel),优化模型(使用GRB优化),或将模型写入磁盘(使用GRBwrite).

二次约束由一组二次项、一组线性项、意义和右侧值组成:<span>$</span>x^TQx+q^Tx\le b<span>$</span>.二次项通过努姆克孜,qrow,qcolqval参数和线性项通过numlnz,林德利瓦尔论据。

重要提示:Gurobi用于解决二次约束问题的算法只能处理某些类型的二次约束。始终接受以下形式的约束:

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

返回值:

非零返回值表示添加二次约束时出现问题。请参阅错误代码表获取可能返回值的列表。可通过调用GRBgeterrormsg.

论据:

模型:应向其添加新约束的模型。

numlnz:新二次约束中线性项的数目。

林德:与线性项关联的可变索引。

利瓦尔:与线性项关联的数值。

努姆克伦茨:新二次约束中二次项的数目。

qrow:与二次项关联的行索引。二次项使用三个值表示:一对索引(存储在qrowqcol)和系数(存储在qval)。关联的参数数组为每个二次项提供相应的值。若要输入二次项,请举例说明<span>$</span>2x\u0^2+x0x1+x1<span>$</span>,您可以将此例程称为numqnz=3,qrow[]={0,0,1},qcol[]={0,1,1}qval[]={2.0,1.0,1.0}.

qcol:与二次项关联的列索引。请参阅qrow关于更多信息的争论。

qval:与二次项关联的数值。请参阅qrow关于更多信息的争论。

感觉:检测新的二次约束。选项包括GRB_小于等于GRB_大于等于.

rhs:新二次约束的右侧值。

施工名称:新二次约束的名称。此参数可以是无效的,在这种情况下,将为约束指定默认名称。

使用示例:

int lind[]={1,2};double lval[]={2.0,1.0};int qrow[]={0,0,1};int qcol[]={0,1,1};double qval[]={2.0,1.0,1.0};/*2 x0^2+x0 x1+x1^2+2 x1+x2<=1*/错误=GRBaddqconstr;