CPXXcopylp 和 CPXcopylp
例程 CPXXcopylp/CPXcopylp 用于将定义 LP 问题的数据复制到 CPLEX 问题对象。
int CPXXcopylp( CPXCENVptr 环境, CPXLPptr lp, CPXDIM 数, CPXDIM numrows, int 逆向感应, double const * 客观, double const * 根部, char const * 感觉到, CPXNNZ const * 锍, CPXDIM const * matcnt, CPXDIM const * 蓐, double const * matval, double const * 磅, double const * ub, double const * rngval )
int CPXcopylp( CPXCENVptr 环境, CPXLPptr lp, int 数, int numrows, int 逆向感应, double const * 客观, double const * 根部, char const * 感觉到, int const * 锍, int const * matcnt, int const * 蓐, double const * matval, double const * 磅, double const * ub, double const * rngval )
描述
例程 CPXXcopylp/CPXcopylp 用于将定义 LP 问题的数据复制到 CPLEX 问题对象。 CPXXcopylp/CPXcopylp 的自变量定义目标函数、约束矩阵、右侧以及变量的界限。 调用 CPXXcopylp/CPXcopylp 将破坏与此问题对象关联的任何现有数据。
例程 CPXXcopylp/CPXcopylp 不复制名称。 更全面的例程 CPXXcopylpwnames/CPXcopylpwnames 可代替 CPXXcopylp/CPXcopylp 来用于复制具有关联名称的线性程序。
传递到 CPXXcopylp/CPXcopylp 的自变量定义线性程序。 因为这些自变量将复制到由 CPLEX 维护的本地数组内,所以可以在调用 CPXXcopylp/CPXcopylp 之后修改或释放通过 CPXXcopylp/CPXcopylp 传递的 LP 问题数据,而不影响 CPLEX 问题对象的状态。
objsense |
= 1 |
(CPX_MIN) 最小化 |
objsense |
= -1 |
(CPX_MAX) 最大化 |
sense[i] |
'L' |
<= 约束 |
sense[i] |
'E' |
= 约束 |
sense[i] |
'G' |
>= 约束 |
sense[i] |
'R' |
具有范围的约束 |
数组 matbeg、matcnt、matind 和 matval 按如下进行存取。 假设 CPLEX 想要访问某列 "j中的条目。 这些假设由数组条目给出:
matval[matbeg[j]],.., matval[matbeg[j]+matcnt[j]-1]
对应的行索引为:
matind[matbeg[j]],.., matind[matbeg[j]+matcnt[j]-1]
matind 中的条目无需按行顺序来排列。 不允许单列内的 matind 中存在重复的条目。 数组 matbeg 和 matind 的长度应至少为 numcols。 数组 matind 和 matval 的长度应至少为 matbeg[numcols-1]+matcnt[numcols-1]。
如果 numcols 或 numrows 之一为 0(零),那么数组 matbeg 和 matcnt 可为 NULL;即,如果矩阵的某个维度为 0(零)且不能包含任何系数。
使用此例程来构建或修改问题时,可以通过在应用程序开发期间调用 CPXcheckcopylp 来验证结果是否符合预期。
参数
- env
- 一个指向
CPXXopenCPLEX/CPXopenCPLEX所返回 CPLEX 环境的指针。 - lp
- 一个指向
CPXXcreateprob/CPXcreateprob所返回 CPLEX 问题对象的指针。 - numcols
- 一个整数,指定约束矩阵中的列数,即相当于,指定问题对象中变量的数量。
- numrows
- 一个整数,指定约束矩阵中的行数(不包括目标函数或变量界限)。
- objsense
- 一个整数,指定问题是最小化问题还是最大化问题。
- objective
- 一个长度至少为
numcols的数组,其中包含目标函数系数。 - rhs
- 一个长度至少为
numrows的数组,其中包含约束矩阵中各约束的右侧值。 - sense
- 一个长度至少为
numrows的数组,其中包含约束矩阵中各约束的感知。 - matbeg
- 一个数组,它与
matval、matcnt和matind一起定义约束矩阵。 - matcnt
- 一个数组,它与
matbeg、matval和matind一起定义约束矩阵。 - matind
- 一个数组,它与
matbeg、matcnt和matval一起定义约束矩阵。 - matval
- 一个数组,它与
matbeg、matcnt和matind一起定义约束矩阵。 CPLEX 只需知道非零系数。 这些在数组matval中按列进行分组。 每一列的非零元素都必须按顺序存储在数组中,"matbeg[j]包含 "j列的起始索引,"matcnt[j]包含 "j列的条目数。matbeg的各组成部分必须按升序排列。 对于每个 k,matind[k]均指定对应系数matval[k]的行号。 - lb
- 一个长度至少为
numcols的数组,其中包含各变量的下限。 设置为小于或等于常量-CPX_INFBOUND的值的任何下限都会被视为负无穷大。CPX_INFBOUND在头文件cpxconst.h中定义。 - ub
- 一个长度至少为
numcols的数组,其中包含各变量的上限。 设置为大于或等于常量CPX_INFBOUND的值的任何上限都会被视为无穷大。CPX_INFBOUND在头文件cpxconst.h中定义。 - rngval
- 一个长度至少为
numrows的数组,其中包含每个具有范围的约束的范围值。 Ranged rows are those designated by'R'in thesensearray. 如果行没有范围,那么将忽略rngval数组条目。 如果 "rngval[i]0,则 "i行的活动属于 "[rhs[i],rhs[i]+rngval[i]],如果 "rngval[i]=0,then"i"行的活动属于 "[rhs[i]+rngval[i],rhs[i]]。 此自变量可为 NULL。
返回
如果此例程成功,那么会返回 0,而如果发生错误,那么会返回非零。示例
status = CPXcopylp (env, lp, numcols, numrows, objsen, obj, rhs,
sense, matbeg, matcnt, matind, matval, lb,
ub, rngval);
另请参阅《CPLEX 用户手册》和标准版中的示例 "lpex1.c。