CPXXaddcols 和 CPXaddcols
例程 CPXXaddcols/CPXaddcols 用于向指定 CPLEX 问题对象添加列。
int CPXXaddcols( CPXCENVptr 环境, CPXLPptr lp, CPXDIM ccnt, CPXNNZ nzcnt, double const * 对象, CPXNNZ const * cmatbeg, CPXDIM const * cmatind, double const * cmatval, double const * 磅, double const * ub, char const *const * colname )
int CPXaddcols( CPXCENVptr 环境, CPXLPptr lp, int ccnt, int nzcnt, double const * 对象, int const * cmatbeg, int const * cmatind, double const * cmatval, double const * 磅, double const * ub, char ** colname )
描述
例程 CPXXaddcols/CPXaddcols 用于向指定 CPLEX 问题对象添加列。 通过 CPXXcreateprob/CPXcreateprob 创建问题对象后,可随时调用此例程。
例程 CPXXaddcols/CPXaddcols 与例程 CPXXaddrows/CPXaddrows 非常相似。 主要区别在于,"CPXXaddcols/CPXaddcols不能在不存在的行中添加系数(即在索引大于 "CPXXgetnumrows/CPXgetnumrows返回的数值的行中添加系数);而 "CPXXaddrows/CPXaddrows可以通过使用参数 "ccnt,在索引大于 "CPXXgetnumcols/CPXgetnumcols返回的数值的列中添加系数。 (参见关于 "CPXXaddrows/CPXaddrows ccnt参数的讨论) 因此,CPXXaddcols/CPXaddcols 不具有变量 ccnt 和数组 colname。
例程 CPXXnewrows/CPXnewrows 可用于在通过 CPXXaddcols/CPXaddcols 添加新列之前添加空行。
每列的非零元素都必须存储在数组 cmatval 中从位置 cmatbeg[i] 到 cmatbeg[i+1](或者在 i=ccnt-1 的情况下,从 cmatbeg[i] 到 nzcnt-1)的顺序位置。 每个条目 cmatind[i] 均指定对应系数 cmatval[i] 的行号。 与 CPXXcopylp/CPXcopylp 不同,所有列都必须邻接,并且 cmatbeg[0] 必须为 0(零)。
使用此例程来构建或修改问题时,可以通过在应用程序开发期间调用 CPXcheckaddcols 来验证结果是否符合预期。
参数
- env
- 一个指向
CPXXopenCPLEX/CPXopenCPLEX例程所返回 CPLEX 环境的指针。 - lp
- 一个指向
CPXXcreateprob/CPXcreateprob所返回 CPLEX 问题对象的指针。 - ccnt
- 一个整数,指定要添加到约束矩阵的新列的数量。
- nzcnt
- 一个整数,指定要添加到约束矩阵的非零约束系数的数量。
- obj
- 一个长度为
ccnt的数组,其中包含新变量的目标函数系数。 可为 NULL,在此情况下,新列的目标系数设置为 0.0(零)。 - cmatbeg
- 用于指定所添加列的非零元素的数组。
- cmatind
- 用于指定所添加列的非零元素的数组。
- cmatval
- 用于指定所添加列的非零元素的数组。 格式类似于用于指定例程
CPXXcopylp/CPXcopylp中约束矩阵的格式。 (请参阅该例程中matbeg、matcnt、matind和matval的描述。) - lb
- 一个长度为
ccnt的数组,其中包含各新变量的下限。 设置为小于或等于常量-CPX_INFBOUND的值的任何下限都会被视为负无穷大。CPX_INFBOUND在头文件cpxconst.h中定义。 可为 NULL,在此情况下,新列的下限将设置为 0.0(零)。 - ub
- 一个长度为
ccnt的数组,其中包含各新变量的上限。 设置为大于或等于常量CPX_INFBOUND的值的任何上限都会被视为无穷大。CPX_INFBOUND在头文件cpxconst.h中定义。 可为 NULL,在此情况下,新列的上限将设置为CPX_INFBOUND(正无穷大)。 - colname
- 一个长度为
ccnt的数组,其中包含指向字符串(指定添加到问题对象的新变量的名称)的指针。 可为 NULL,在此情况下,如果已驻留在 CPLEX 问题对象中的列具有名称,那么将为新列分配缺省名称;否则,不会将任何名称与这些变量关联。 如果将列名传递到CPXXaddcols/CPXaddcols,但没有为现有变量分配任何名称,那么将为其创建缺省名称。
返回
如果此例程成功,那么会返回 0,而如果发生错误,那么会返回非零。示例
status = CPXaddcols (env, lp, ccnt, nzcnt, obj, cmatbeg,
cmatind, cmatval, lb, ub, newcolname);