CPXXaddcolsCPXaddcols

例程 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 中约束矩阵的格式。 (请参阅该例程中 matbegmatcntmatindmatval 的描述。)
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);