CPXXcopylpCPXcopylp

例程 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 问题对象的状态。

表 1. objsense 的值
objsense = 1 (CPX_MIN) 最小化
objsense = -1 (CPX_MAX) 最大化

表 2. sense 的值
sense[i] 'L' <= 约束
sense[i] 'E' = 约束
sense[i] 'G' >= 约束
sense[i] 'R' 具有范围的约束

数组 matbegmatcntmatindmatval 按如下进行存取。 假设 CPLEX 想要访问某列 "j中的条目。 这些假设由数组条目给出:


matval[matbeg[j]],.., matval[matbeg[j]+matcnt[j]-1]

对应的行索引为:


matind[matbeg[j]],.., matind[matbeg[j]+matcnt[j]-1]

matind 中的条目无需按行顺序来排列。 不允许单列内的 matind 中存在重复的条目。 数组 matbegmatind 的长度应至少为 numcols。 数组 matindmatval 的长度应至少为 matbeg[numcols-1]+matcnt[numcols-1]

如果 numcolsnumrows 之一为 0(零),那么数组 matbegmatcnt 可为 NULL;即,如果矩阵的某个维度为 0(零)且不能包含任何系数。

使用此例程来构建或修改问题时,可以通过在应用程序开发期间调用 CPXcheckcopylp 来验证结果是否符合预期。

参数

env
一个指向 CPXXopenCPLEX/CPXopenCPLEX 所返回 CPLEX 环境的指针。
lp
一个指向 CPXXcreateprob/CPXcreateprob 所返回 CPLEX 问题对象的指针。
numcols
一个整数,指定约束矩阵中的列数,即相当于,指定问题对象中变量的数量。
numrows
一个整数,指定约束矩阵中的行数(不包括目标函数或变量界限)。
objsense
一个整数,指定问题是最小化问题还是最大化问题。
objective
一个长度至少为 numcols 的数组,其中包含目标函数系数。
rhs
一个长度至少为 numrows 的数组,其中包含约束矩阵中各约束的右侧值。
sense
一个长度至少为 numrows 的数组,其中包含约束矩阵中各约束的感知。
matbeg
一个数组,它与 matvalmatcntmatind 一起定义约束矩阵。
matcnt
一个数组,它与 matbegmatvalmatind 一起定义约束矩阵。
matind
一个数组,它与 matbegmatcntmatval 一起定义约束矩阵。
matval
一个数组,它与 matbegmatcntmatind 一起定义约束矩阵。 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 the sense array. 如果行没有范围,那么将忽略 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