GRBaddqconstr


GRBaddqconstr

GRBaddqconstr GRBmodel *模型,
numlnz,
*林德,
* lval,
numqnz,
* qrow,
* qcol,
* qval,
字符 意义上说,
,
const char * constrname)

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

一个二次约束由一组二次项、一组线性项、一个意义和右边的值组成:<span>$</span>x^TQx + q^Tx \le b<span>$</span>.二次项通过numqnzQrow.qcol,qval参数和线性项通过numlnz林德,lval参数。

重要提示: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无法将约束转换为其中一个表单),则尝试解决模型时会出错。二次术语仅涉及二进制变量的约束将始终转换为其中一个表单。

返回值:

非零返回值表示在添加二次约束时出现了问题。指的是错误代码表中可能的返回值列表。关于错误的详细信息可以通过调用来获得GRBgeterrormsg

参数:

模型:应该添加新约束的模型。

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

林德:与线性项相关的变量指标。

lval:与线性项相关的数值。

numqlnz:新的二次约束中二次项的个数。

Qrow.:与二次项相关的行索引。二次项用三个值表示:一对索引(存储在Qrow.qcol)和一个系数(存储在qval).相关的参数数组为每个二次项提供相应的值。举个例子,如果你想输入二次项< span > < / span > 2美元x_0 ^ 2 + x_0 x_1 + x_1 ^ 2 < span > < / span >美元,你会把这个程序叫做numqnz = 3Qrow [] = {0,0,1}Qcol [] = {0,1,1},Qval [] = {2.0, 1.0, 1.0}

qcol:与二次项相关的列索引。参见的描述Qrow.参数以获取更多信息。

qval:与二次项相关的数值。参见的描述Qrow.参数以获取更多信息。

感觉:对新的二次约束的理解。选项是GRB_LESS_EQUAL或者GRB_GREATER_EQUAL

园艺学会:新的二次约束的右边值。

constrname:新的二次约束的名称。这个论证可以是,在这种情况下,约束被赋予一个默认名称。

示例用法:

Int lind[] = {1, 2};双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 */ error = GRBaddqconstr(model, 2, lind, lval, 3, qrow, qcol, qval, GRB_LESS_EQUAL, 1.0, "New");