CPXXcopyquad 和 CPXcopyquad
例程 CPXXcopyquad/CPXcopyquad 用于在 Q 不是对角项时复制二次目标矩阵 Q。
int CPXXcopyquad( CPXCENVptr 环境, CPXLPptr lp, CPXNNZ const * qmatbeg, CPXDIM const * qmatcnt, CPXDIM const * qmatind, double const * qmatval )
int CPXcopyquad( CPXCENVptr 环境, CPXLPptr lp, int const * qmatbeg, int const * qmatcnt, int const * qmatind, double const * qmatval )
描述
例程 CPXXcopyquad/CPXcopyquad 用于在 Q 不是对角项时复制二次目标矩阵 Q。 参数 "qmatbeg、"qmatcnt、"qmatind和 "qmatval用于指定矩阵 Q 的非零系数。 The meaning of these vectors is identical to the meaning of the corresponding vectors matbeg, matcnt, matind and matval, which are used to specify the structure of A in a call to CPXXcopylp/CPXcopylp.
此函数复制时,Q 必须是对称的。 因此,如果代数格式的二次系数为 2x1x2,那么 x2 应该在 x1 的列表中,x1 应该在 x2 的列表中,在每个条目中系数将为 1.0。 请参见相应示例 C 程序以查看如何实现对称需求。
0.5。使用此例程构建或修改模型时,可在应用程序开发期间验证结果是否符合通过调用 CPXcheckcopyquad 预期得到的结果。
如何存取数组
假设 CPLEX 想要访问 "j列中的条目。 这些假设由数组条目给出:
qmatval[qmatbeg[j]],..,qmatval[qmatbeg[j]+qmatcnt[j]-1]
对应列/索引条目为:
qmatind[qmatbeg[j]],..,qmatind[qmatbeg[j]+qmatcnt[j]-1
qmatind[k] 中的条目无需按列顺序来排列。 不允许单列内的 qmatind 中存在重复的条目。 请注意,仅具有线性目标项的任何列 j 具有 qmatcnt[j] = 0,在 qmatind 和 qmatval 中不具有条目。
参数
- env
- 一个指向
CPXXopenCPLEX/CPXopenCPLEX所返回 CPLEX 环境的指针。 - lp
- 一个指向
CPXXcreateprob/CPXcreateprob所返回 CPLEX 问题对象的指针。 - qmatbeg
- 一个数组,其
qmatcnt、qmatind和qmatval定义二次系数矩阵。 - qmatcnt
- 一个数组,其
qmatbeg、qmatind和qmatval定义二次系数矩阵。 - qmatind
- 一个数组,其
qmatbeg、qmatcnt和qmatval定义二次系数矩阵。 - qmatval
- 一个数组,其
qmatbeg、qmatcnt和qmatind定义二次系数矩阵。 数组qmatbeg和qmatcnt的长度至少应该为CPXgetnumcols(env,lp)。 数组qmatind和qmatval的长度至少应该为qmatbeg[numcols-1]+qmatcnt[numcols-1]。 CPLEX 仅需要数组qmatval中按列分组的非零系数。 每一列的非零元素都必须按顺序存储在数组中,"qmatbeg[j]包含j列的起始索引,"qmatcnt[j]包含 "j列的条目数。 请注意,"qmatbeg的各组成部分必须按升序排列。 对于每个k,qmatind[k]均指示对应系数qmatval[k]的列号。 这些数组按以上所述存取。
返回
如果例程成功,那么例程会返回零,而如果发生错误,那么会返回非零。示例
status = CPXcopyquad (env, lp, qmatbeg, qmatcnt, qmatind,
qmatval);