C API 参考手册
杉数优化求解器提供了适用于高级应用场景的C语言API库函数。
本章节提供在 copt.h 中定义的常量、函数、参数、属性的文档。
常量
COPT有三种类型的常量。
用来构建模型的,比如优化方向,约束类型等;
用来查询求解结果的,比如API函数返回值,基、解值等;
用来监视求解进程的,比如回调函数的触发条件。
优化方向
在不同的优化场景中,可能需要最大化或者最小化一个目标函数。 为此,我们提供了两种优化方向常数:
COPT_MINIMIZE最小化目标函数
COPT_MAXIMIZE最大化目标函数
当读取一个文件时,优化方向会自动设置。
此外,可以调用 COPT_SetObjSense 手动设置优化方向。
无边界
在COPT中,我们使用一个很大的量表达无边界的情况。
这个量可以通过 COPT_DBLPARAM_INFBOUND 参数设置。
而这个参数的默认值,以常数提供:
COPT_INFINITY代表无边界的量的默认值(
1e30)
未定义
在COPT中,我们使用另一个很大的量表达数据未定义的情况。 例如,初始解文件(.mst)中省略的变量的赋值。这个量, 以常数提供:
COPT_UNDEFINED代表数据未定义(
1e40)
约束类型
注意: COPT支持使用约束类型来定义约束,但不推荐。 我们推荐直接使用上下边界来定义约束。
在优化领域最初兴起的时候,人们往往用约束类型(sense)来定义一个约束。 常见的类型有:
COPT_LESS_EQUAL形如 \(g(x) \leq b\) 的约束
COPT_GREATER_EQUAL形如 \(g(x) \geq b\) 的约束
COPT_EQUAL形如 \(g(x) = b\) 的约束
此外,还有两种用的较少的类型
COPT_FREE无边界约束的表达式
COPT_RANGE同时有上下边界的,形如 \(l \leq g(x) \leq u\) 的约束
请参考
COPT_LoadProb函数的文档,以了解如何使用COPT_RANGE来定义同时有上下界的约束。
变量类型
变量类型指的是一个变量是连续变量、二进制变量或者整数变量。
COPT_CONTINUOUS连续变量
COPT_BINARY二进制变量
COPT_INTEGER整数变量
SOS约束类型
SOS约束(Special Ordered Set)是一类限制一组变量取值的特殊约束。目前,COPT支持两种SOS约束, 一是SOS1约束,该类型约束中指定的一组变量至多有一个变量可取非零值,二是SOS2约束,该类型约束中 指定的一组变量至多有两个变量可取非零值,且取非零值的变量顺序要求相邻。SOS约束中的变量类型可取 连续变量、二进制变量和整数变量。
COPT_SOS_TYPE1SOS1约束
COPT_SOS_TYPE2SOS2约束
Indicator约束类型
Indicator约束是COPT中表示逻辑关系的条件约束,用于刻画0-1变量 \(y\) 的取值和线性约束 \(a^{T}x \leq b\) 是否被满足的关系。 目前,COPT支持三种Indicator约束:
COPT_INDICATOR_IFIf-Then条件:
如果 \(y=f\) ,则线性约束满足;
如果 \(y\ne f\) ,则线性约束无效(可以被违反)。
COPT_INDICATOR_ONLYIFOnly-If条件:
如果线性约束 \(a^{T}x \leq b\) 满足,则 \(y=f\) ;
如果线性约束 \(a^{T}x \leq b\) 不满足,则 \(y\) 可以取值为0或1。
COPT_INDICATOR_IFANDONLYIFIf-and-Only-If条件:
线性约束 \(a^{T}x \leq b\) 和 \(y=f\) 必须同时满足,或者同时不满足。
二阶锥约束类型
二阶锥约束是一类特殊的二次约束,COPT支持两种二阶锥约束:
COPT_CONE_QUAD标准二阶锥。
数学形式为:
COPT_CONE_RQUAD旋转二阶锥。
数学形式为:
指数锥约束类型
COPT支持两种类型的指数锥约束:
COPT_EXPCONE_PRIMAL: 原始指数锥
COPT_EXPCONE_DUAL: 对偶指数锥
基状态
对于一个有 \(n\) 个变量、\(m\) 个约束的优化模型, 它在内部计算时,\(m\) 个约束会被当做 \(m\) 个松弛变量看待。 这样一共就有 \(n+m\) 个变量了。
当使用单纯形法求解模型时,它会把 \(n\) 个变量固定在其有限边界上, 并计算另外 \(m\) 个变量的取值。 这 \(m\) 个计算取值的变量叫做 基 变量, 而另外那 \(n\) 个变量叫做 非基 变量。 单纯形法的求解过程,以及最终的解,都可以用变量的基状态来表达。
COPT中的变量基状态有:
COPT_BASIS_LOWER非基变量,取值下边界。
COPT_BASIS_BASIC基变量。
COPT_BASIS_UPPER非基变量,取值上边界。
COPT_BASIS_SUPERBASIC非基变量,但取值非上下边界。
COPT_BASIS_FIXED非基变量,固定在它唯一的边界(上下边界相等)。
LP的解状态
求解线性规划模型之后,其解的状态可以叫做LP的解状态。
这个值可以通过 COPT_INTATTR_LPSTATUS 属性获取。
LP的解状态的可能取值为:
COPT_LPSTATUS_UNSTARTED尚未开始求解。
COPT_LPSTATUS_OPTIMAL找到了最优解。
COPT_LPSTATUS_INFEASIBLE模型是无解的。
COPT_LPSTATUS_UNBOUNDED目标函数在优化方向没有边界。
COPT_LPSTATUS_NUMERICAL求解遇到数值问题。
COPT_LPSTATUS_TIMEOUT在时间限制到达前未能完成求解。
COPT_LPSTATUS_UNFINISHED求解终止。但是由于数值问题,求解器无法给出结果。
COPT_LPSTATUS_IMPRECISE求解结果不准确。
COPT_LPSTATUS_INTERRUPTED用户中止。
COPT_LPSTATUS_ITERLIMIT在迭代数限制到达前未能完成求解。
MIP的解状态
求解整数规划模型之后,其解的状态叫做MIP的解状态。这个值可以通过 COPT_INTATTR_MIPSTATUS
属性获取。
MIP的解状态的可能取值为:
COPT_MIPSTATUS_UNSTARTED尚未开始求解。
COPT_MIPSTATUS_OPTIMAL找到了最优解。
COPT_MIPSTATUS_INFEASIBLE模型是无解的。
COPT_MIPSTATUS_UNBOUNDED目标函数在优化方向没有边界。
COPT_MIPSTATUS_INF_OR_UNB模型无解或目标函数在优化方向没有边界。
COPT_MIPSTATUS_NODELIMIT在节点限制到达前未能完成求解。
COPT_MIPSTATUS_TIMEOUT在时间限制到达前未能完成求解。
COPT_MIPSTATUS_UNFINISHED求解终止。但是由于数值问题,求解器无法给出结果。
COPT_MIPSTATUS_INTERRUPTED用户中止。
回调函数的触发条件
COPT_CBCONTEXT_INCUMBENT当发现MIP当前最优解时,触发回调函数。
COPT_CBCONTEXT_MIPRELAX当发现MIP线性松弛解时,触发回调函数。
COPT_CBCONTEXT_MIPSOL当发现MIP可行解时,触发回调函数。
COPT_CBCONTEXT_MIPNODE当处理完成MIP节点并求解LP松弛问题完成时,触发回调函数。
非线性表达式操作符
COPT_NL_PLUS加法操作符。
COPT_NL_MINUS减法操作符。
COPT_NL_MULT乘法操作符。
COPT_NL_DIV除法操作符。
COPT_NL_POW幂函数操作符。
COPT_NL_SQRT平方根函数操作符。
COPT_NL_EXP自然指数函数操作符。
COPT_NL_LOG自然对数函数操作符。
COPT_NL_LOG10以10为底的对数函数操作符。
COPT_NL_NEG取负函数操作符。
COPT_NL_ABS绝对值函数操作符。
COPT_NL_FLOOR向下取整函数操作符。
COPT_NL_CEIL向上取整函数操作符。
COPT_NL_SIN正弦函数操作符。
COPT_NL_COS余弦函数操作符。
COPT_NL_TAN正切函数操作符。
COPT_NL_SINH双曲正弦函数操作符。
COPT_NL_COSH双曲余弦函数操作符。
COPT_NL_TANH双曲正切函数操作符。
COPT_NL_ASIN反正弦函数操作符。
COPT_NL_ACOS反余弦函数操作符。
COPT_NL_ATAN反正切函数操作符。
COPT_NL_ASINH反双曲正弦函数操作符。
COPT_NL_ACOSH反双曲余弦函数操作符。
COPT_NL_ATANH反双曲正切函数操作符。
COPT_NL_ATAN2四象限反正切函数操作符。
COPT_NL_SUM求和函数操作符。
COPT_NL_GET常量获取操作符。
API函数的返回值
当一个API函数的调用完成之时,它会返回一个整数返回值。 这个值的数值,代表这次函数调用是否成功或失败,以及为何失败。
可能的函数返回值有:
COPT_RETCODE_OK调用成功。
COPT_RETCODE_MEMORY调用失败:内存分配失败。
COPT_RETCODE_FILE调用失败:文件读写失败。
COPT_RETCODE_INVALID调用失败:非法数据。
COPT_RETCODE_LICENSE调用失败:授权检测失败。 在这种情况下,请接着调用
COPT_GetLicenseMsg以获取具体原因。COPT_RETCODE_INTERNAL调用失败:内部错误。
COPT_RETCODE_THREAD调用失败:线程操作错误。
COPT_RETCODE_SERVER调用失败:远程服务器错误。
COPT_RETCODE_NONCONVEX调用失败:模型非凸。
COPT_RETCODE_MEMORY_GPU调用失败:GPU内存分配失败。
客户端配置参数
对于浮动和集群服务器的客户端,用户可以通过调用接口函数设置客户端配置参数,目前提供的配置参数有:
COPT_CLIENT_CLUSTER远程服务器的IP地址。
COPT_CLIENT_FLOATING令牌服务器的IP地址。
COPT_CLIENT_PASSWORD远程服务器的密码。
COPT_CLIENT_PORT令牌服务器的通信端口。
COPT_CLIENT_WAITTIME客户端连接等待时间。
其他常量
COPT_BUFFSIZE定义了获取文本信息的时候,所用到的数组的推荐长度。 可在调用
COPT_GetBanner、COPT_GetRetcodeMsg等函数时使用。
属性
在 C API中,提供获取相关属性取值的2个函数如下,具体请参考 C API函数:获取属性章节 。
COPT_GetIntAttr:获取整数属性取值COPT_GetDblAttr:获取浮点型属性取值
注意:在C API 中,以属性 Cols 为例,属性名称可以有两种形式:COPT_INTATTR_COLS 或 "Cols"
优化模型相关属性
注意: Double这个词的准确翻译应是双精度浮点数。下文为了简便,称之为浮点数。
COPT_INTATTR_COLS或"Cols"整数属性。
变量(系数矩阵列)的个数。
COPT_INTATTR_PSDCOLS或"PSDCols"整数属性。
半定变量的个数。
COPT_INTATTR_ROWS或"Rows"整数属性。
约束(系数矩阵行)的个数。
COPT_INTATTR_ELEMS或"Elems"整数属性。
系数矩阵的非零元素个数。
COPT_INTATTR_QELEMS或"QElems"整数属性。
二次目标函数中非零二次项个数。
COPT_INTATTR_PSDELEMS或"PSDElems"整数属性。
目标函数中半定项个数。
COPT_INTATTR_SYMMATS或"SymMats"整数属性。
模型中对称矩阵的个数。
COPT_INTATTR_BINS或"Bins"整数属性。
二进制变量(列)的个数。
COPT_INTATTR_INTS或"Ints"整数属性。
整数变量(列)的个数。
COPT_INTATTR_SOSS或"Soss"整数属性。
SOS约束的个数。
COPT_INTATTR_CONES或"Cones"整数属性。
二阶锥约束的个数。
COPT_INTATTR_EXPCONES或"ExpCones"整数属性。
指数锥约束的个数。
COPT_INTATTR_AFFINECONES或"AffineCones"整数属性。
仿射锥约束的个数。
COPT_INTATTR_QCONSTRS或"QConstrs"整数属性。
二次约束的个数。
COPT_INTATTR_PSDCONSTRS或"PSDConstrs"整数属性。
半定约束的个数。
COPT_INTATTR_LMICONSTRS或"LMIConstrs"整数属性。
LMI约束的个数。
COPT_INTATTR_INDICATORS或"Indicators"整数属性。
Indicator约束的个数。
COPT_INTATTR_OBJSENSE或"ObjSense"整数属性。
优化方向。
COPT_DBLATTR_OBJCONST或"ObjConst"浮点数属性。
目标函数的常数部分。
COPT_INTATTR_HASQOBJ或"HasQObj"整数属性。
模型是否包含二次项目标函数。
COPT_INTATTR_HASPSDOBJ或"HasPSDObj"整数属性。
模型的目标函数是否包含半定项。
COPT_INTATTR_ISMIP或"IsMIP"整数属性。
模型是否为整数规划模型。
COPT_INTATTR_NLELEMS或"NLElems"整数属性。
模型中非线性表达式目标项的数目。
COPT_INTATTR_NLCONSTRS或"NLConstrs"整数属性。
模型中非线性表达式约束的数目。
COPT_INTATTR_HASNLOBJ或"HasNLObj"整数属性。
模型中是否存在非线性表达式目标。
COPT_INTATTR_MULTIOBJS或"MultiObjs"整数属性。
多目标模型中目标函数的数目。
求解结果相关属性
COPT_INTATTR_LPSTATUS或"LpStatus"整数属性。
线性规划求解状态。请参考相关的求解状态常数文档 常量:LP的解状态。
COPT_INTATTR_MIPSTATUS或"MipStatus"整数属性。
整数规划求解状态。请参考相关的求解状态常数文档 常量:MIP的解状态。
COPT_INTATTR_SIMPLEXITER或"SimplexIter"整数属性。
单纯形法迭代循环数。
COPT_INTATTR_BARRIERITER或"BarrierIter"整数属性。
内点法迭代循环数。
COPT_INTATTR_NODECNT或"NodeCnt"整数属性。
分支定界搜索的节点数。
COPT_INTATTR_POOLSOLS或"PoolSols"整数属性。
解池中的解的数目。
COPT_INTATTR_TuneResults或"TuneResults"整数属性。
参数调优结果的数目。
COPT_INTATTR_HASLPSOL或"HasLpSol"整数属性。
是否可以提供线性规划的解值。
COPT_INTATTR_HASBASIS或"HasBasis"整数属性。
是否可以提供线性规划的基。
COPT_INTATTR_HASDUALFARKAS或"HasDualFarkas"整数属性。
当线性规划问题无可行解时,是否返回对偶Farkas(也叫做对偶极射线)。
COPT_INTATTR_HASPRIMALRAY或"HasPrimalRay"整数属性。
当线性规划问题无界时,是否返回主元射线(也叫做极射线)。
COPT_INTATTR_HASMIPSOL或"HasMipSol"整数属性。
是否存在整数解。
COPT_INTATTR_IISCOLS或"IISCols"整数属性。
组成IIS的变量边界的数目。
COPT_INTATTR_IISROWS或"IISRows"整数属性。
组成IIS的约束的数目。
COPT_INTATTR_IISSOSS或"IISSOSs"整数属性。
组成IIS的SOS约束的数目。
COPT_INTATTR_IISINDICATORS或"IISIndicators"整数属性。
组成IIS的Indicator约束的数目。
COPT_INTATTR_HASIIS或"HasIIS"整数属性。
是否存在IIS。
COPT_INTATTR_HASFEASRELAXSOL或"HasFeasRelaxSol"整数属性。
是否存在可行化松弛结果。
COPT_INTATTR_ISMINIIS或"IsMinIIS"整数属性。
计算出的IIS是否为极小。
COPT_INTATTR_HASSENSITIVITY或"HasSensitivity"整数属性。
是否存在线性规划的灵敏度分析结果。
COPT_DBLATTR_LPOBJVAL或"LpObjval"浮点数属性。
线性规划目标函数值。
COPT_DBLATTR_BESTOBJ或"BestObj"浮点数属性。
整数规划求解结束时最好的目标函数值。
COPT_DBLATTR_BESTBND或"BestBnd"浮点数属性。
整数规划求解结束时最好的下界。
COPT_DBLATTR_BESTGAP或"BestGap"浮点数属性。
整数规划求解结束时最好的相对容差。
COPT_DBLATTR_FEASRELAXOBJ或"FeasRelaxObj"浮点数属性。
可行化松弛值。
COPT_DBLATTR_SOLVINGTIME或"SolvingTime"浮点数属性。
求解所使用的时间(秒)。
信息
信息常数包括模型信息和求解结果相关信息。
在C API中,提供获取变量和约束信息的函数,具体请参考 C API函数:获取模型信息章节
注意: Double这个词的准确翻译应是双精度浮点数。下文为了简便,称之为浮点数。
模型相关信息
COPT_DBLINFO_OBJ或"Obj"浮点数信息。
变量(列)的目标函数系数。
COPT_DBLINFO_LB或"LB"浮点数信息。
变量(列)或者约束(行)的下界。
COPT_DBLINFO_UB或"UB"浮点数信息。
变量(列)或者约束(行)的上界。
求解和灵敏度分析结果相关信息
COPT_DBLINFO_VALUE或"Value"浮点数信息。
变量(列)的取值。
COPT_DBLINFO_SLACK或"Slack"浮点数信息。
松弛变量的取值,也叫做约束的活跃程度(activities)。仅适用于线性规划模型。
COPT_DBLINFO_DUAL或"Dual"浮点数信息。
对偶变量的取值。仅适用于线性规划模型。
COPT_DBLINFO_REDCOST或"RedCost"浮点数信息。
变量的Reduced cost。仅适用于线性规划模型。
COPT_DBLINFO_SAOBJLOW或"SAObjLow"浮点数信息。
表示在当前最优基解仍保持最优的前提下,变量的目标函数系数所允许降低到的最小值。
COPT_DBLINFO_SAOBJUP或"SAObjUp"浮点数信息。
表示在当前最优基解仍保持最优的前提下,变量的目标函数系数所允许增加到的最大值。
COPT_DBLINFO_SALBLOW或"SALBLow"浮点数信息。
表示在当前最优基解仍保持最优的前提下,变量或约束下界所允许降低到的最小值。
COPT_DBLINFO_SALBUP或"SALBUp"浮点数信息。
表示在当前最优基解仍保持最优的前提下,变量或约束下界所允许增加到的最大值。
COPT_DBLINFO_SAUBLOW或"SAUBLow"浮点数信息。
表示在当前最优基解仍保持最优的前提下,变量或约束上界所允许降低到的最小值。
COPT_DBLINFO_SAUBUP或"SAUBUp"浮点数信息。
表示在当前最优基解仍保持最优的前提下,变量或约束上界所允许增加到的最大值。
对偶Farkas和主元射线
进阶话题。
当线性规划问题无可行解或者无界时, 求解器可以返回对偶Farkas(也叫做对偶极射线) 或者主元射线(也叫做极射线)作为证明。
COPT_DBLINFO_DUALFARKAS或"DualFarkas"浮点数信息。
线性规划问题无可行解时,线性约束的对偶Farkas(也叫做对偶极射线)。 请设置
"ReqFarkasRay"这一参数, 以确保求解器可以返回对偶Farkas。对偶Farkas的作用可以用形如 \(Ax = 0 \text{ and } l \leq x \leq u\) 的线性规划约束解释。 当该线性规划无可行解时,使用对偶Farkas向量 \(y\) 可以证明线性约束系统存在冲突: \(\max y^TAx < y^T b = 0\)。 如何计算 \(\max y^TAx\): 使用向量 \(\hat{a} = y^TA\),当 \(\hat{a}_i < 0\) 时选择 \(x_i = l_i\) 或者 \(\hat{a}_i > 0\) 时选择 \(x_i = u_i\) , 可以计算出表达式 \(y^TAx\) 的最大可能取值。
有些应用依赖于另一种等价的线性系统冲突证明: \(\min \bar{y}^TAx > \bar{y}^T b = 0\)。 对于此种情况,可以对求解器返回的对偶Farkas取负值实现,即 \(\bar{y}=-y\)。
在极端情况下,求解器可能无法返回有效的对偶Farkas。 例如当线性规划问题的不可行性微乎其微时。 此时,我们建议用FeasRelax功能研究或者修复线性规划的不可行性。
COPT_DBLINFO_PRIMALRAY或"PrimalRay"浮点数信息。
线性规划问题无界时,变量的主元射线(也叫做极射线)。 请设置
"ReqFarkasRay"这一参数,以确保求解器可以返回主元射线。对于一个求解最小值的线性规划问题 \(\min c^T x, Ax = b \text{ and } x \geq 0\), 主元射线向量 \(r\) 满足以下条件: \(r \geq 0, Ar = 0\) 以及 \(c^T r < 0\)。
可行化松弛结果相关信息
COPT_DBLINFO_RELAXLB或"RelaxLB"浮点数信息。
变量(列)或者约束(行)下界的可行化松弛量。
COPT_DBLINFO_RELAXUB或"RelaxUB"浮点数信息。
变量(列)或者约束(行)上界的可行化松弛量。
COPT_DBLINFO_RELAXVALUE或"RelaxValue"浮点数信息。
可行化松弛模型中原始模型变量(列)的解。
Callback相关信息
COPT_CBINFO_BESTOBJor"BestObj"浮点数信息。
当前最优目标函数值。
COPT_CBINFO_BESTBNDor"BestBnd"浮点数信息。
当前最优目标下界。
COPT_CBINFO_HASINCUMBENTor"HasIncumbent"整数信息。
当前是否有最优可行解。
COPT_CBINFO_INCUMBENTor"Incumbent"浮点数信息。
当前最优可行解。
COPT_CBINFO_MIPCANDIDATEor"MipCandidate"浮点数信息。
当前可行解。
COPT_CBINFO_MIPCANDOBJor"MipCandObj"浮点数信息。
当前可行解对应的目标函数值。
COPT_CBINFO_RELAXSOLUTIONor"RelaxSolution"浮点数信息。
当前LP松弛问题的解。
COPT_CBINFO_RELAXSOLOBJor"RelaxSolObj"浮点数信息。
当前LP松弛问题的目标函数值。
COPT_CBINFO_NODESTATUSor"NodeStatus"整数数信息。
当前节点LP松弛问题的求解状态。可取值请参考:一般常数章节:解状态(部分) ,除去
NODELIMIT,UNSTARTED,INF_OR_UNB,其他均为其可能取值。
参数
限制和容差
注意
Tolerance有时会翻译为公差或者容差。本文档采用容差这个译法。
Double这个词的准确翻译应该是双精度浮点数。下文为了简便,称之为浮点数。
COPT_DBLPARAM_TIMELIMIT或"TimeLimit"浮点数参数。
优化求解的时间限制(秒)。
默认值 1e20
最小值 0
最大值 1e20
COPT_DBLPARAM_SOLTIMELIMIT或"SolTimeLimit"浮点数参数。
找到原始可行解的时间限制(秒)。
默认值 1e20
最小值 0
最大值 1e20
COPT_INTPARAM_NODELIMIT或"NodeLimit"整数参数。
整数规划求解的节点数限制。
默认值 -1(自动选择)
最小值 -1(自动选择)
最大值
INT_MAXCOPT_INTPARAM_BARITERLIMIT或"BarIterLimit"整数参数。
内点法求解时的迭代数限制。
默认值 500
最小值 0
最大值
INT_MAXCOPT_INTPARAM_NLPITERLIMIT或"NLPIterLimit"整数参数。
非线性求解器迭代数目限制。
默认值 1e4
最小值 0
最大值
INT_MAXCOPT_INTPARAM_MIPNLPITERLIMIT或"MipNLPIterLimit"整数参数。
在 MIP 求解中,调用非线性规划(NLP)模块作为启发式求解时的迭代次数上限。
默认值 100
最小值 -1(表示不限制迭代次数)
最大值
INT_MAXCOPT_DBLPARAM_MATRIXTOL或"MatrixTol"浮点数参数。
输入矩阵的系数容差。
默认值 1e-10
最小值 0
最大值 1e-7
COPT_DBLPARAM_FEASTOL或"FeasTol"浮点数参数。
变量、约束取值的可行性容差。
默认值 1e-6
最小值 1e-9
最大值 1e-4
COPT_DBLPARAM_DUALTOL或"DualTol"浮点数参数。
对偶解的可行性容差。
默认值 1e-6
最小值 1e-9
最大值 1e-4
COPT_DBLPARAM_INTTOL或"IntTol"浮点数参数。
变量的整数解容差。
默认值 1e-6
最小值 1e-9
最大值 1e-1
COPT_DBLPARAM_PDLPTOL或"PDLPTol"浮点数参数。
一阶算法(PDLP)的收敛容差。
默认值 1e-6
最小值 1e-12
最大值 1e-4
COPT_DBLPARAM_NLPTOL或"NLPTol"浮点数参数。
非线性规划的最优相对容差。
默认值 1e-8
最小值 1e-13
最大值 1e-3
COPT_DBLPARAM_RELGAP或"RelGap"浮点数参数。
整数规划的最优相对容差。
默认值 1e-4
最小值 0
最大值
DBL_MAXCOPT_DBLPARAM_ABSGAP或"AbsGap"浮点数参数。
整数规划的最优绝对容差。
默认值 1e-6
最小值 0
最大值
DBL_MAX
预求解相关
COPT_INTPARAM_PRESOLVE或"Presolve"整数参数。
预求解的强度。
默认值 -1
可选值
-1: 自动选择。
0: 关闭。
1: 少量快速。
2: 正常。
3: 多多益善。
4: 无限制,直至无法改变模型(可能非常耗时)。
COPT_INTPARAM_SCALING或"Scaling"整数参数。
是否在求解一个模型前,调整系数矩阵的数值(Scaling)。
默认值 -1
可选值
-1: 自动选择。
0: 不调整。
1: 调整系数矩阵的数值。
COPT_INTPARAM_DUALIZE或"Dualize"整数参数。
是否构建并求解对偶模型。
默认值 -1
可选值
-1: 自动选择。
0: 不构建对偶模型。
1: 构建对偶模型。
线性规划相关
COPT_INTPARAM_LPMETHOD或"LpMethod"整数参数。
求解线性规划问题的算法。
默认值 -1
可选值
-1: 自动选择。
对于线性规划问题,选择对偶单纯形法;
对于混合整数线性规划问题,选择对偶单纯形法或内点法之一。
1: 对偶单纯形法。
2: 内点法。
3: 直接Crossover。
4: 并发求解(同时启动单纯形法与内点法求解)。
5: 基于稀疏和数值范围等特征自动选择单纯形法或者内点法。
6: 使用一阶算法(PDLP) 求解。
注意:
目前,COPT的GPU模式仅支持求解线性规划问题,并且需要选择使用一阶算法(PDLP)进行求解。如需开启,请设置 LpMethod=6 。
COPT_INTPARAM_DUALPRICE或"DualPrice"整数参数。
选定对偶单纯形法的Pricing算法。
默认值 -1
可选值
-1: 自动选择。
0: 使用Devex算法。
1: 使用对偶最陡边算法。
COPT_INTPARAM_DUALPERTURB或"DualPerturb"整数参数。
是否允许对偶单纯形算法使用目标函数摄动。
默认值 -1
可选值
-1: 自动选择。
0: 无摄动。
1: 允许目标函数摄动。
COPT_INTPARAM_BARHOMOGENEOUS或"BarHomogeneous"整数参数。
是否使用齐次自对偶方法。
默认值 -1
可选值
-1: 自动选择。
0: 不使用。
1: 使用。
COPT_INTPARAM_BARORDER或"BarOrder"整数参数。
内点法矩阵排列算法。
默认值 -1
可选值
-1: 自动选择。
0: Approximate Minimum Degree(AMD) 算法。
1: Nested Dissection(ND1)算法。
2: Modified Nested Dissection(ND2)算法。
COPT_INTPARAM_BARSTART或"BarStart"整数参数。
内点法寻找初始点的算法。
默认值 -1
可选值
-1: 自动选择。
0: Simple算法。
1: Mehrotra算法。
2: Modified Mehrotra算法。
COPT_INTPARAM_CROSSOVER或"Crossover"整数参数。
是否使用Crossover。
默认值 1
可选值
-1: 自动选择。仅在当前线性规划的解不满足容差时使用。
0: 不使用。
1: 使用。
COPT_INTPARAM_REQFARKASRAY或"ReqFarkasRay"整数参数。
进阶话题。 当线性规划问题无可行解或者无界时, 是否计算对偶Farkas(也叫做对偶极射线)或者主元射线(也叫做极射线)。
默认值 0
可选值
0: 不计算。
1: 计算。
COPT_INTPARAM_REQSENSITIVITY或"ReqSensitivity"整数参数。
当线性规划问题有最优基解(使用单纯形法求解,或使用其他算法求解+Crossover)时,是否计算灵敏度分析。
默认值 0
可选值
0: 不计算。
1: 计算。
半定规划相关
COPT_INTPARAM_SDPMETHOD或"SDPMethod"整数参数。
求解半定规划问题的算法。
默认值 -1
可选值
-1: 自动选择。
0: 原始-对偶内点法。
1: 交替方向乘子法。
2: 对偶内点法。
整数规划相关
COPT_INTPARAM_CUTLEVEL或"CutLevel"整数参数。
生成割平面的强度。
默认值 -1
可选值
-1: 自动选择。
0: 关闭。
1: 少量快速。
2: 正常。
3: 多多益善。
COPT_INTPARAM_ROOTCUTLEVEL或"RootCutLevel"整数参数。
根节点生成割平面的强度。
默认值 -1
可选值
-1: 自动选择。
0: 关闭。
1: 少量快速。
2: 正常。
3: 多多益善。
COPT_INTPARAM_TREECUTLEVEL或"TreeCutLevel"整数参数。
搜索树生成割平面的强度。
默认值 -1
可选值
-1: 自动选择。
0: 关闭。
1: 少量快速。
2: 正常。
3: 多多益善。
COPT_INTPARAM_ROOTCUTROUNDS或"RootCutRounds"整数参数。
根节点生成割平面的次数。
默认值 -1(自动选择)
最小值 -1(自动选择)
最大值
INT_MAXCOPT_INTPARAM_NODECUTROUNDS或"NodeCutRounds"整数参数。
搜索树节点生成割平面的次数。
默认值 -1(自动选择)
最小值 -1(自动选择)
最大值
INT_MAXCOPT_INTPARAM_HEURLEVEL或"HeurLevel"整数参数。
启发式算法的强度。
默认值 -1
可选值
-1: 自动选择。
0: 关闭。
1: 少量快速。
2: 正常。
3: 多多益善。
COPT_INTPARAM_PREROOTHEURLEVEL或"PreRootHeurLevel"整数参数。
在进入根节点求解前的启发式算法的强度。
默认值 -1
可选值
-1: 自动选择。
0: 关闭。
1: 少量快速。
2: 正常。
3: 多多益善。
COPT_INTPARAM_ROUNDINGHEURLEVEL或"RoundingHeurLevel"整数参数。
Rounding启发式算法的强度。
默认值 -1
可选值
-1: 自动选择。
0: 关闭。
1: 少量快速。
2: 正常。
3: 多多益善。
COPT_INTPARAM_DIVINGHEURLEVEL或"DivingHeurLevel"整数参数。
Diving启发式算法的强度。
默认值 -1
可选值
-1: 自动选择。
0: 关闭。
1: 少量快速。
2: 正常。
3: 多多益善。
COPT_INTPARAM_FAPHEURLEVEL或"FAPHeurLevel"整数参数。
Fix-and-propagate启发式算法的强度。
默认值 -1
可选值
-1: 自动选择。
0: 关闭。
1: 少量快速。
2: 正常。
3: 多多益善。
4: 高强度。
COPT_INTPARAM_STRONGBRANCHING或"StrongBranching"整数参数。
Strong Branching的强度。
默认值 -1
可选值
-1: 自动选择。
0: 关闭。
1: 少量快速。
2: 正常。
3: 多多益善。
COPT_INTPARAM_CONFLICTANALYSIS或"ConflictAnalysis"整数参数。
是否使用冲突分析。
默认值 -1
可选值
-1: 自动选择。
0: 不使用。
1: 使用。
COPT_INTPARAM_MIPSTARTMODE或"MipStartMode"整数参数。
处理初始解的方式。
默认值 -1
可选值
-1: 自动选择。
0: 不使用任何初始解。
1: 仅使用完整且可行的初始解。
2: 仅使用可行的初始解(若初始解不完整,通过求解子MIP来补全)。
COPT_INTPARAM_MIPSTARTNODELIMIT或"MipStartNodeLimit"整数参数。
补全不完整的初始解时,求解的子MIP的节点数限制。
默认值 -1(自动选择)
最小值 -1(自动选择)
最大值
INT_MAXCOPT_INTPARAM_LINEARIZEINDICATORS或"LinearizeIndicators"整数参数。
是否强制将Indicator约束线性化。
默认值 0
可选值
0: 不强制将Indicator约束线性化。
1: 强制将Indicator约束线性化。
(注:启用该选项后,所有Indicator约束都将被转换为等价的线性约束)
COPT_INTPARAM_LINEARIZESOS或"LinearizeSos"整数参数。
是否强制将SOS约束线性化。
默认值 0
可选值
0: 不强制将SOS约束线性化。
1: 强制将SOS约束线性化。
(注:启用该选项后,所有SOS约束都将被转换为等价的线性约束)
COPT_INTPARAM_MIPREPAIR或"MipRepair"整数参数。
当 MIP 求解出现数值问题时,选择可行解的修复策略。
默认值 -1
可选值
-1: 仅在求解时间有剩余时尝试修复。
0: 不尝试修复。
1: 在当前求解时间限制的基础上,额外延长时间并尝试修复(少量快速)。
2: 在当前求解时间限制的基础上,额外延长时间并尝试修复(正常)。
3: 在当前求解时间限制的基础上,额外延长时间并尝试修复(多多益善)。
非线性规划相关
COPT_INTPARAM_NONCONVEX或"NonConvex"整数参数。
非凸模型的处理方式。
默认值 -1
可选值
-1: 自动选择。
0: 报告模型非凸并退出求解。
1: 寻找局部最优解。
COPT_INTPARAM_NLPMUUPDATE或"NLPMuUpdate"整数参数。
非线性求解器障碍参数更新策略。
默认值 -1
可选值
-1: 自动选择。
0: 单调递减。
1: 自适应变化。
COPT_INTPARAM_NLPLINSCALE或"NLPLinScale"整数参数。
非线性求解器线性系统缩放策略。
默认值 -1
可选值
-1: 自动选择。
0: 不缩放。
1: 始终缩放。
并行计算相关
COPT_INTPARAM_THREADS或"Threads"整数参数。
问题求解使用的线程数。
默认值 -1(自动选择)
最小值 -1(自动选择)
最大值 128
COPT_INTPARAM_BARTHREADS或"BarThreads"整数参数。
内点法使用的线程数。若值为-1,则线程数由参数
Threads决定。默认值 -1
最小值 -1
最大值 128
COPT_INTPARAM_SIMPLEXTHREADS或"SimplexThreads"整数参数。
对偶单纯形法使用的线程数。若值为-1,则线程数由参数
Threads决定。默认值 -1
最小值 -1
最大值 128
COPT_INTPARAM_CROSSOVERTHREADS或"CrossoverThreads"整数参数。
Crossover使用的线程数。若值为-1,则线程数由参数
Threads决定。默认值 -1
最小值 -1
最大值 128
COPT_INTPARAM_MIPTASKS或"MipTasks"整数参数。
MIP求解使用的任务数。
默认值 -1(自动选择)
最小值 -1(自动选择)
最大值 256
IIS计算相关
COPT_INTPARAM_IISMETHOD或"IISMethod"整数参数。
计算IIS的方法。
默认值 -1
可选值
-1: 自动选择。
0: 计算结果质量优先。
1: 计算效率优先。
可行化松弛计算相关
COPT_INTPARAM_FEASRELAXMODE或"FeasRelaxMode"整数参数。
计算可行化松弛的方法。
默认值 0
可选值
0: 最小化加权冲突值。
1: 计算最小化加权冲突下的原始模型最优可行化松弛。
2: 最小化冲突数目。
3: 计算最小化冲突数目下的原始模型最优可行化松弛。
4: 最小化加权平方冲突值。
5: 计算最小化加权平方冲突下的原始模型最优可行化松弛。
参数调优相关
COPT_DBLPARAM_TUNETIMELIMIT或"TuneTimeLimit"浮点数参数。
参数调优的时间限制。若取值为0,则表示由求解器自动设置。
默认值 0
最小值 0
最大值 1e20
COPT_DBLPARAM_TUNETARGETTIME或"TuneTargetTime"浮点数参数。
参数调优的时间目标。
默认值 1e-2
最小值 0
最大值
DBL_MAX
COPT_DBLPARAM_TUNETARGETRELGAP或"TuneTargetRelGap"浮点数参数。
参数调优的最优相对容差目标。
默认值 1e-4
最小值 0
最大值
DBL_MAX
COPT_INTPARAM_TUNEMETHOD或"TuneMethod"整数参数。
参数调优的方法。
默认值 -1
可选值
-1: 自动选择。
0: 贪婪搜索策略。
1: 更广泛的搜索策略。
COPT_INTPARAM_TUNEMODE或"TuneMode"整数参数。
参数调优的模式。
默认值 -1
可选值
-1: 自动选择。
0: 求解时间。
1: 最优相对容差。
2: 目标函数值。
3: 目标函数值下界。
COPT_INTPARAM_TUNEMEASURE或"TuneMeasure"整数参数。
参数调优结果计算方式。
默认值 -1
可选值
-1: 自动选择。
0: 计算平均值。
1: 计算最大值。
COPT_INTPARAM_TUNEPERMUTES或"TunePermutes"整数参数。
参数调优每组参数模型计算次数。若取值为0,则表示由求解器自动设置。
默认值 0
最小值 0
最大值
INT_MAX
COPT_INTPARAM_TUNEOUTPUTLEVEL或"TuneOutputLevel"整数参数。
参数调优日志输出强度。
默认值 2
可选值
0: 不显示。
1: 仅输出改进参数的摘要。
2: 输出每次调优尝试的摘要。
3: 输出每次调优尝试的详细日志。
回调函数相关
COPT_INTPARAM_LAZYCONSTRAINTSor"LazyConstraints"整数参数。
是否将惰性约束加入模型中。
默认值 -1
可选值
-1: 自动选择。
0: 否。
1: 是。
注意:
该参数仅对MIP模型有效。
GPU计算相关
COPT_INTPARAM_GPUMODE或"GPUMode"整数参数。
GPU求解模式的使用方式。
默认值 -1
可选值
-1: 自动选择。一阶算法(PDLP)默认尝试使用GPU,内点法默认使用CPU。
0: 强制使用CPU模式。
1: 尝试使用GPU标准模式。
2: 对于内点法,在求解线性规划时会尝试使用GPU高性能模式,可能导致更高的内存占用;
对于一阶算法(PDLP),与
GPUMode=1相同(即也尝试使用GPU标准模式)。COPT_INTPARAM_GPUDEVICE或"GPUDevice"整数参数。
使用指定编号的GPU(当运行机器有多个GPU存在的情形下)。
默认值 -1(自动选择)
最小值 -1(自动选择)
最大值
INT_MAX
多目标优化相关
COPT_DBLPARAM_MULTIOBJTIMELIMIT或"MultiObjTimeLimit"浮点数参数。
多目标模型求解的时间限制(秒)。
默认值 1e20
最小值 0
最大值 1e20
COPT_INTPARAM_MULTIOBJPARAMMODE或"MultiObjParamMode"整数参数。
多目标优化中,各目标对应模型在求解时优化参数的使用模式。
默认值 0
可选值
0: 一致使用COPT模型的优化参数。
1: 使用各自目标对应模型的优化参数。
其它参数
COPT_INTPARAM_LOGGING或"Logging"整数参数。
是否显示求解日志。
默认值 1
可选值
0: 不显示求解日志。
1: 显示求解日志。
COPT_INTPARAM_LOGLEVEL或"LogLevel"整数参数。
控制求解日志的详细程度。
默认值 2
可选值
2: 打印基础的求解日志信息。
3: 除基础求解信息外,额外打印内存消耗信息(适用于 MIP 问题)。
COPT_INTPARAM_LOGTOCONSOLE或"LogToConsole"整数参数。
是否显示求解日志到控制台。
默认值 1
可选值
0: 不显示求解日志到控制台。
1: 显示求解日志到控制台。
API 函数
API函数的文档按照功能进行分组。
全部API函数的返回值都是整数,可能的取值及其含义请参考常量部分的文档。
创建求解环境和模型
COPT_CreateEnvConfig
概要
int COPT_CreateEnvConfig(copt_env_config **p_config)描述
创建一个COPT客户端配置。
参量
p_config指向COPT客户端配置的输出指针。
COPT_DeleteEnvConfig
概要
int COPT_DeleteEnvConfig(copt_env_config **p_config)描述
删除COPT客户端配置。
参量
p_config指向COPT客户端配置的输入指针。
COPT_SetEnvConfig
概要
int COPT_SetEnvConfig(copt_env_config *config, const char *name, const char *value)描述
设置COPT客户端配置参数。
参量
configCOPT客户端配置。
name客户端配置参数名。
value客户端配置参数值。
COPT_CreateEnv
概要
int COPT_CreateEnv(copt_env **p_env)描述
创建一个COPT求解环境。
调用这个函数是使用COPT的第一件事情。 这个函数会检查授权文件,如果成功,则可以进一步的创建COPT模型。 如果检查失败,则可以调用
COPT_GetLicenseMsg来获取更多信息,以便找出问题所在。参量
p_env指向COPT求解环境的输出指针。
COPT_CreateEnvWithPath
概要
int COPT_CreateEnvWithPath(const char *licDir, copt_env **p_env)描述
创建一个COPT求解环境,授权文件路径为参数
licDir指定的路径。调用这个函数是使用COPT的第一件事情。 这个函数会检查授权文件,如果成功,则可以进一步的创建COPT模型。 如果检查失败,则可以调用
COPT_GetLicenseMsg来获取更多信息,以便找出问题所在。参量
licDir授权文件路径。
p_env指向COPT求解环境的输出指针。
COPT_CreateEnvWithConfig
概要
int COPT_CreateEnvWithConfig(copt_env_config *config, copt_env **p_env)描述
创建一个COPT求解环境,客户端配置由参数
config指定。调用这个函数是使用COPT的第一件事情。 这个函数会检查客户端参数配置,如果成功,则可以进一步的创建COPT模型。 如果检查失败,则可以调用
COPT_GetLicenseMsg来获取更多信息,以便找出问题所在。参量
config客户端配置。
p_env指向COPT求解环境的输出指针。
COPT_DeleteEnv
概要
int COPT_DeleteEnv(copt_env **p_env)描述
删除COPT求解环境。
参量
p_env指向COPT求解环境的输入指针。
COPT_GetLicenseMsg
概要
int COPT_GetLicenseMsg(copt_env *env, char *buff, int buffSize)描述
返回一个C语言风格的字符串,说明授权文件检查相关信息。
请在调用
COPT_CreateEnv失败时使用这个函数。参量
envCOPT求解环境。
buff用以获取字符串的数组。
buffSize上述数组的大小。
COPT_CreateProb
概要
int COPT_CreateProb(copt_env *env, copt_prob **p_prob)描述
创建一个空的COPT模型。
参量
envCOPT求解环境。
p_prob指向COPT模型的输出指针。
COPT_CreateCopy
概要
int COPT_CreateCopy(copt_prob *src_prob, copt_prob **p_dst_prob)描述
创建一个现有COPT模型的深拷贝。
注意: 模型的求解参数设置也将被拷贝,若用户希望使用不同的参数求解拷贝后的模型, 则需要对拷贝后的模型调用
COPT_ResetParam函数, 将求解参数重置为默认设置后再进行自定义设置。参量
src_prob待拷贝COPT模型。
p_dst_prob指向新创建COPT模型的输出指针。
COPT_ClearProb
概要
int COPT_ClearProb(copt_prob *prob)描述
清除COPT模型数据(不包括回调函数)。
参量
probCOPT模型。
COPT_DeleteProb
概要
int COPT_DeleteProb(copt_prob **p_prob)描述
删除COPT模型。
参量
p_prob指向COPT模型的输入指针。
构造和修改模型
COPT_LoadProb
概要
int COPT_LoadProb(
copt_prob *prob,
int nCol,
int nRow,
int iObjSense,
double dObjConst,
const double *obj,
const int *colMatBeg,
const int *colMatCnt,
const int *colMatIdx,
const double *colMatElem,
const char *colType,
const double *colLower,
const double *colUpper,
const char *rowSense,
const double *rowBound,
const double *rowUpper,
char const *const *colNames,
char const *const *rowNames)描述
通过多个数组,加载一个COPT模型。
参量
probCOPT模型。
nCol变量数(系数矩阵列数)。
nRow约束数(系数矩阵行数)。
iObjSense优化方向。可能的取值有
COPT_MAXIMIZE或COPT_MINIMIZE。
dObjConst目标函数的常数项。
obj变量的目标函数系数。
colMatBeg, colMatCnt, colMatIdx和colMatElem以列压缩存储格式定义系数矩阵。 我们在 其他信息 中提供了一个使用列压缩存储格式的例子 供参考。
如果
colMatCnt为NULL, 则colMatBeg需要有nCol+1元素, 且指向第i列的开始和终止指针分别使用colMatBeg[i]和colMatBeg[i+1]定义。如果提供了
colMatCnt, 则 指向第i列的开始和终止指针分别使用colMatBeg[i]和colMatBeg[i] + colMatCnt[i]定义。
colType变量类型。
如果不提供这个数组,则所有的变量都是连续变量。
colLowerandcolUpper变量的上下边界。
如果不提供下边界
colLower,下边界都将是0。如果不提供上边界
colUpper,则变量都无上边界。
rowSense约束类型。
请参考常量部分的文档,了解COPT所支持的约束类型。
如果不提供
rowSense这个数组, 那么rowBound和rowUppe会被当做 约束的上下边界。这是我们推荐的定义约束的方式。如果提供了
rowSense则rowBound和rowUppe会被当做RHS和 range 。 在此情况下,rowUpper数组仅在有COPT_RANGE约束类型的时候会用到,且在此时,上下界分别为下界
rowBound[i] - fabs(rowUpper[i])上界
rowBound[i]
rowBound约束的下界或RHS。
rowUpper约束的上界或 range 。
colNamesandrowNames变量和约束的名字。可以不提供。
其他信息
列压缩存储(compressed column storage, CCS)格式,是一种常见的存储稀疏矩阵的格式。 我们再次演示如何用此格式来存储这个4列3行的示例矩阵。
// 仅使用colMatBeg
colMatBeg[5] = { 0, 1, 3, 5, 6};
colMatIdx[6] = { 0, 0, 1, 1, 2, 2};
colMatElem[6] = {1.1, 1.2, 2.2, 2.3, 3.3, 3.4};
// 同时用到colMatBeg和colMatCnt
// 星号(*)部分是用不到的数据
colMatBeg[4] = { 0, 1, 5, 7};
colMatCnt[4] = { 1, 2, 2, 1};
colMatIdx[6] = { 0, 0, 1, 1, 2, *, *, 2};
colMatElem[6] = {1.1, 1.2, 2.2, 2.3, 3.3, *, *, 3.4};
COPT_AddCol
概要
int COPT_AddCol(
copt_prob *prob,
double dColObj,
int nColMatCnt,
const int *colMatIdx,
const double *colMatElem,
char cColType,
double dColLower,
double dColUpper,
const char *colName)描述
添加一个变量(列)。
参量
probCOPT模型。
dColObj变量的目标函数系数。
nColMatCnt此列系数矩阵中的非零元素的数量。
colMatIdx此列系数矩阵中的非零元素的行编号。
colMatElem此列系数矩阵中的非零元素的数值。
cColType变量类型。
dColLoweranddColUpper变量的上下边界。
colName变量的名字。可以传入
NULL。
COPT_AddPSDCol
概要
int COPT_AddPSDCol(copt_prob *prob, int colDim, const char *name)描述
添加一个半定变量。
参量
probCOPT模型。
colDim新添加的半定变量维度。
name新添加的半定变量名字。可以传入
NULL。
COPT_AddRow
概要
int COPT_AddRow(
copt_prob *prob,
int nRowMatCnt,
const int *rowMatIdx,
const double *rowMatElem,
char cRowSense,
double dRowBound,
double dRowUpper,
const char *rowName)描述
添加一个约束(行)。
参量
probCOPT模型。
nRowMatCnt此行系数矩阵中的非零元素的数量。
rowMatIdx此行系数矩阵中的非零元素的列编号。
rowMatElem此行系数矩阵中的非零元素的数值。
cRowSense约束类型。
请参考常量部分的文档,了解COPT所支持的约束类型。
如果
cRowSense是 0, 则dRowBound和dRowUpper会被当做 约束的上下边界。这是我们推荐的定义约束的方式。如果
cRowSense是有意义的量, 则dRowBound和dRowUpper会被当做RHS 和 range 。 在此情况下,dRowUpper仅在约束为COPT_RANGE类型时才会用到。且在此时,上下界分别为下界
dRowBound - dRowUpper上界
dRowBound
dRowBound约束的下界或RHS。
dRowUpper约束的上界或 range 。
rowName约束的名字。可以传入
NULL。
COPT_AddCols
概要
int COPT_AddCols(
copt_prob *prob,
int nAddCol,
const double *colObj,
const int *colMatBeg,
const int *colMatCnt,
const int *colMatIdx,
const double *colMatElem,
const char *colType,
const double *colLower,
const double *colUpper,
char const *const *colNames)描述
添加
nAddCol个变量(列)。参量
probCOPT模型。
nAddCol新添加的变量数(系数矩阵列数)。
colObj新变量的目标函数系数。
colMatBeg, colMatCnt, colMatIdx和colMatElem以列压缩存储格式提供系数矩阵。 有关列压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
colType新变量类型。如果不提供这个数组,则所有的变量都是连续变量。
colLower和colUpper新变量的上下边界。
如果不提供下边界
colLower,下边界都将是0。如果不提供上边界
colUpper,则新变量都无上边界。
colNames新变量的名字。可以传入
NULL。
COPT_AddPSDCols
概要
int COPT_AddPSDCols(
copt_prob *prob,
int nAddCol,
const int* colDims,
char const *const *names)描述
添加
nAddCol个半定变量。参量
probCOPT模型。
nAddCol新添加的半定变量个数。
colDims新添加的半定变量维度。
names新添加的半定变量名字。可以传入
NULL。
COPT_AddRows
概要
int COPT_AddRows(
copt_prob *prob,
int nAddRow,
const int *rowMatBeg,
const int *rowMatCnt,
const int *rowMatIdx,
const double *rowMatElem,
const char *rowSense,
const double *rowBound,
const double *rowUpper,
char const *const *rowNames)描述
添加
nAddRow个新约束(行)。参量
probCOPT模型。
nAddRow新添加的约束数(系数矩阵行数)。
rowMatBeg, rowMatCnt, rowMatIdx和rowMatElem以行压缩存储格式提供系数矩阵。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
rowSense新约束类型。
请参考常量部分的文档,了解COPT所支持的约束类型。
如果不提供
rowSense这个数组, 那么rowBound和rowUpper会被当做 约束的上下边界。这是我们推荐的定义约束的方式。如果提供了
rowSense则rowBound和rowUpper会被当做RHS 和 range 。 在此情况下,rowUpper数组仅在有COPT_RANGE约束类型的时候会用到,且在此时,上下界分别为下界
rowBound[i] - fabs(rowUpper[i])上界
rowBound[i]
rowBound新约束的下界或RHS。
rowUpper新约束的上界或 range 。
rowNames新约束的名字。可以传入
NULL。
COPT_AddSOSs
概要
int COPT_AddSOSs(
copt_prob *prob,
int nAddSOS,
const int *sosType,
const int *sosMatBeg,
const int *sosMatCnt,
const int *sosMatIdx,
const double *sosMatWt)描述
添加
nAddSOS个SOS约束。若sosMatWt为NULL,则COPT在内部自动生成。 注意: 若模型包含SOS约束,则模型为整数规划模型。参量
probCOPT模型。
nAddSOS新添加的SOS约束个数。
sosTypeSOS约束的类型。
sosMatBeg, sosMatCnt, sosMatIdx和sosMatWt以行压缩存储格式提供SOS约束的成员。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
sosMatWtSOS约束中各成员的权重。可以为
NULL。
COPT_AddCones
概要
int COPT_AddCones(
copt_prob *prob,
int nAddCone,
const int *coneType,
const int *coneBeg,
const int *coneCnt,
const int *coneIdx)描述
添加
nAddCone个二阶锥约束。参量
probCOPT模型。
nAddCone新添加的二阶锥约束个数。
coneType二阶锥约束的类型。
coneBeg, coneCnt, coneIdx以行压缩存储格式提供二阶锥约束的成员。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
COPT_AddExpCones
概要
int COPT_AddExpCones(
copt_prob *prob,
int nAddCone,
const int *coneType,
const int *coneIdx)描述
添加
nAddCone个指数锥约束。参量
probCOPT模型。
nAddCone新添加的指数锥约束个数。
coneType指数锥约束的类型。
coneIdx构成指数锥约束的变量的下标数组。
COPT_AddAffineCone
概要
int COPT_AddAffineCone(
copt_prob *prob,
int coneType,
int nConeDim,
int nAlphaDim,
const double *alphaElem,
const int *psdBeg,
const int *psdCnt,
const int *psdColIdx,
const int *psdMatIdx,
const int *rowMatBeg,
const int *rowMatCnt,
const int *rowMatIdx,
const double *rowMatElem,
const double *rowConst,
const char *name)描述
添加仿射锥约束。
参量
probCOPT模型。
coneType
nConeDim仿射锥的维度。
nAlphaDim预留参数,暂未使用。
alphaElem预留参数,暂未使用。
psdBeg, psdCnt, psdColIdx, psdMatIdx表示仿射锥中的半定项。
psdBeg表示每个仿射锥项中半定项的起始位置,psdCnt表示半定项的数目,psdColIdx表示半定变量的下标,psdMatIdx表示对称矩阵的下标。
rowMatBeg, rowMatCnt, rowMatIdx, rowMatElem表示仿射锥中的线性项。
以行压缩存储格式提供系数矩阵。有关稀疏矩阵的压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
rowConst仿射锥中的常数项。
name仿射锥的名称。
COPT_AddQConstr
概要
int COPT_AddQConstr(
copt_prob *prob,
int nRowMatCnt,
const int *rowMatIdx,
const int *rowMatElem,
int nQMatCnt,
const int *qMatRow,
const int *qMatCol,
const double *qMatElem,
char cRowSense,
double dRowBound,
const char *name)描述
添加一个二次约束。
注意: 目前仅支持求解凸二次约束。
参量
probCOPT模型。
nRowMatCnt二次约束中非零线性项的数目。
rowMatIdx二次约束中非零线性项系数的列下标。
rowMatElem二次约束中非零线性项的系数。
nQMatCnt二次约束中非零二次项的数目。
qMatRow二次约束中非零二次项的行下标。
qMatCol二次约束中非零二次项的列下标。
qMatElem二次约束中非零二次项的系数。
cRowSense二次约束的类型。可选取值为:
COPT_LESS_EQUAL和COPT_GREATER_EQUAL。
dRowBound二次约束的右端项。
name二次约束的名字。可以传入
NULL。
COPT_AddPSDConstr
概要
int COPT_AddPSDConstr(
copt_prob *prob,
int nRowMatCnt,
const int *rowMatIdx,
const int *rowMatElem,
int nColCnt,
const int *psdColIdx,
const int *symMatIdx,
char cRowSense,
double dRowBound,
double dRowUpper,
const char *name)描述
添加一个半定约束。
参量
probCOPT模型。
nRowMatCnt半定约束中非零线性项的数目。
rowMatIdx半定约束中非零线性项系数的列下标。
rowMatElem半定约束中非零线性项的系数。
nColCnt半定约束中半定项的数目。
psdColIdx半定约束中半定项的半定变量下标。
symMatIdx二次约束中半定项的对称矩阵下标。
cRowSense半定约束的类型。
请参考常量部分的文档,了解COPT所支持的约束类型。
如果
cRowSense是 0, 则dRowBound和dRowUpper会被当做约束的上下边界。这是我们推荐的定义约束的方式。如果
cRowSense是有意义的量, 则dRowBound和dRowUpper会被当做RHS 和 range 。 在此情况下,dRowUpper仅在约束为COPT_RANGE类型时才会用到。且在此时,上下界分别为下界
dRowBound - dRowUpper上界
dRowBound
dRowBound半定约束的下界或者右端项。
dRowUpper半定约束的上界或 range 。
name半定约束的名字。可以传入
NULL。
COPT_AddLMIConstr
概要
int COPT_AddLMIConstr(
copt_prob *prob,
int nDim,
int nLMIMatCnt,
const int *colIdx,
const int *symMatIdx,
int constMatIdx,
const char *name)描述
添加一个LMI约束。
参量
probCOPT模型。
nDimLMI约束中对称矩阵的维度。
nLMIMatCntLMI约束中系数对称矩阵的个数。
colIdxLMI约束中标量变量的下标。
symMatIdxLMI约束中系数对称矩阵的下标。
constMatIdxLMI约束中常数项对称矩阵的下标。
nameLMI约束的名称。可以传入
NULL。
COPT_AddIndicator
概要
int COPT_AddIndicator(
copt_prob *prob,
int binColIdx,
int binColVal,
int nRowMatCnt,
const int *rowMatIdx,
const double *rowMatElem,
char cRowSense, double dRowBound)描述
添加一个Indicator约束。
注意: 若模型包含Indicator约束,则模型为整数规划模型。
参量
probCOPT模型。
binColIdx二进制类型Indicator变量(列)的下标。
binColVal二进制类型Indicator变量(列)的取值。
nRowMatCnt线性约束(行)系数矩阵中的非零元素的数量。
rowMatIdx线性约束(行)系数矩阵中的非零元素的列编号。
rowMatElem线性约束(行)系数矩阵中的非零元素的数值。
cRowSense线性约束(行)类型。可选取值为:
COPT_EQUAL、COPT_LESS_EQUAL和COPT_GREATER_EQUAL。
dRowBound线性约束(行)的右端项。
COPT_AddIndicators
概要
int COPT_AddIndicators(
copt_prob *prob,
int nInd,
int *indType,
int *binColIdx,
int *binColVal,
const int *rowMatBeg,
const int *RowMatCnt,
const int *rowMatIdx,
const double *rowMatElem,
double *cRowSense,
double *dRowBound,
char const *const indNames);描述
添加
nInd个新的Indicator约束。注意: 若模型包含Indicator约束,则模型为整数规划模型。
参量
probCOPT模型。
nIndIndicator约束的个数。
indTypeIndicator约束的类型。可取值请参考 Indicator约束类型 。
binColIdx二进制类型Indicator变量(列)的下标。
binColVal二进制类型Indicator变量(列)的取值。
rowMatBeg, rowMatCnt, rowMatIdx和rowMatElem以行压缩存储格式提供线性约束(行)系数矩阵。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
cRowSense线性约束(行)类型。可选取值为:
COPT_EQUAL、COPT_LESS_EQUAL和COPT_GREATER_EQUAL。
dRowBound线性约束(行)的右端项。
indNamesIndicator约束的名称。
COPT_AddSymMat
概要
int COPT_AddSymMat(copt_prob *prob, int ndim, int nelem, int *rows, int *cols, double *elems)描述
添加一个对称矩阵(传入下三角部分即可)。
参量
probCOPT模型。
ndim对称矩阵的维度。
nelem对称矩阵的非零元数目。
rows对称矩阵非零元素的行下标。
cols对称矩阵非零元素的列下标。
elems对称矩阵的非零元素。
COPT_AddNLConstr
概要
int COPT_AddNLConstr(
copt_prob *prob,
int nToken,
int nTokenElem,
const int *token,
const double *tokenElem,
int nRowMatCnt,
const int *rowMatIdx,
const double *rowMatElem,
char cRowSense,
double dRowBound,
double dRowUpper,
const char *name)描述
添加一个非线性表达式约束,目前仅支持前缀输入。
参量
probCOPT模型指针。
nToken表达式中的操作符数目。
nTokenElem表达式中的常量数目。
token表达式中的操作符数组。
tokenElem表达式中的常量数组。
nRowMatCnt约束中线性项的数目。
rowMatIdx约束中线性项的下标。
rowMatElem约束中线性项的系数。
cRowSense约束类型。
请参考常量部分的文档,了解COPT所支持的约束类型。
如果
cRowSense是 0, 则dRowBound和dRowUpper会被当做 约束的上下边界。这是我们推荐的定义约束的方式。如果
cRowSense是有意义的量, 则dRowBound和dRowUpper会被当做RHS 和 range 。 在此情况下,dRowUpper仅在约束为COPT_RANGE类型时才会用到。且在此时,上下界分别为下界
dRowBound - dRowUpper上界
dRowBound
dRowBound约束的下界或RHS。
dRowUpper约束的上界或 range 。
name约束的名称,可传入
NULL。
COPT_AddNLConstrs
概要
int COPT_AddNLConstrs(
copt_prob *prob,
int nConstrs,
const int *tokenBeg,
const int *tokenCnt,
const int *tokenElemBeg,
const int *tokenElemCnt,
const int *token,
const double *tokenElem,
const int *rowMatBeg,
const int *rowMatCnt,
const int *rowMatIdx,
const double *rowMatElem,
const char *rowSense,
const double *rowBound,
const double *rowUpper,
char const *const *rowNames)描述
添加一组非线性表达式约束。目前仅支持前缀输入。
参量
probCOPT模型指针。
nConstrs约束的数目。
tokenBeg表达式中的操作符起始位置数组。
tokenCnt表达式中的操作符数目数组。
tokenElemBeg表达式中的常量起始位置数组。
tokenElemCnt表达式中的常量数目数组。
token表达式中的操作符数组。
tokenElem表达式中的常量数组。
rowMatBeg, rowMatCnt, rowMatIdx和rowMatElem以行压缩存储格式提供系数矩阵。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
rowSense新约束类型。
请参考常量部分的文档,了解COPT所支持的约束类型。
如果不提供
rowSense这个数组, 那么rowBound和rowUpper会被当做 约束的上下边界。这是我们推荐的定义约束的方式。如果提供了
rowSense则rowBound和rowUpper会被当做RHS 和 range 。 在此情况下,rowUpper数组仅在有COPT_RANGE约束类型的时候会用到,且在此时,上下界分别为下界
rowBound[i] - fabs(rowUpper[i])上界
rowBound[i]
rowBound新约束的下界或RHS。
rowUpper新约束的上界或 range 。
rowNames新约束的名称。可以传入
NULL。
COPT_DelCols
概要
int COPT_DelCols(copt_prob *prob, int num, const int *list)描述
删除
num个变量(列)。参量
probCOPT模型。
num要删除的变量个数。
list要删除的变量下标列表。
COPT_DelPSDCols
概要
int COPT_DelPSDCols(copt_prob *prob, int num, const int *list)描述
删除
num个半定变量。参量
probCOPT模型。
num要删除的半定变量个数。
list要删除的半定变量下标列表。
COPT_DelRows
概要
int COPT_DelRows(copt_prob *prob, int num, const int *list)描述
删除
num个约束(行)。参量
probCOPT模型。
num要删除的约束个数。
list要删除的约束下标列表。
COPT_DelSOSs
概要
int COPT_DelSOSs(copt_prob *prob, int num, const int *list)描述
删除
num个SOS约束 。参量
probCOPT模型。
num要删除的SOS约束个数。
list要删除的SOS约束下标列表。
COPT_DelCones
概要
int COPT_DelCones(copt_prob *prob, int num, const int *list)描述
删除
num个二阶锥约束 。参量
probCOPT模型。
num要删除的二阶锥约束个数。
list要删除的二阶锥约束下标列表。
COPT_DelExpCones
概要
int COPT_DelExpCones(copt_prob *prob, int num, const int *list)描述
删除
num个指数锥约束 。参量
probCOPT模型。
num要删除的指数锥约束个数。
list要删除的指数锥约束下标列表。
COPT_DelAffineCones
概要
int COPT_DelAffineCones(copt_prob *prob, int num, const int *list)描述
删除
num个仿射锥约束。参量
probCOPT模型。
num要删除的仿射锥约束个数。
list要删除的仿射锥约束下标列表。
COPT_DelQConstrs
概要
int COPT_DelQConstrs(copt_prob *prob, int num, const int *list)描述
删除
num个二次约束 。参量
probCOPT模型。
num要删除的二次约束个数。
list要删除的二次约束下标列表。
COPT_DelPSDConstrs
概要
int COPT_DelPSDConstrs(copt_prob *prob, int num, const int *list)描述
删除
num个半定约束 。参量
probCOPT模型。
num要删除的半定约束个数。
list要删除的半定约束下标列表。
COPT_DelLMIConstrs
概要
int COPT_DelLMIConstrs(copt_prob *prob, int num, const int *list)描述
删除
num个LMI约束 。参量
probCOPT模型。
num要删除的LMI约束个数。
list要删除的LMI约束下标列表。
COPT_DelIndicators
概要
int COPT_DelIndicators(copt_prob *prob, int num, const int *list)描述
删除
num个Indicator约束 。参量
probCOPT模型。
num要删除的Indicator约束个数。
list要删除的Indicator约束下标列表。
COPT_DelNLConstrs
概要
int COPT_DelNLConstrs(copt_prob *prob, int num, const int *list)描述
删除
num个非线性表达式约束 。参量
probCOPT模型。
num要删除的非线性表达式约束个数。
list要删除的非线性表达式约束下标列表。
COPT_DelQuadObj
概要
int COPT_DelQuadObj(copt_prob *prob)描述
删除二次目标函数中的二次项。
参量
probCOPT模型。
COPT_DelNLObj
概要
int COPT_DelNLObj(copt_prob *prob)描述
删除目标函数中非线性表达式项。
参量
probCOPT模型。
COPT_DelPSDObj
概要
int COPT_DelPSDObj(copt_prob *prob)描述
删除目标函数中的半定项。
参量
probCOPT模型。
COPT_SetElem
概要
int COPT_SetElem(copt_prob *prob, int iCol, int iRow, double newElem)描述
设置指定行列对应的系数。
注意: 若
newElem的值小于或者等于参数MatrixTol的值, 则将被设置为0。参量
probCOPT模型。
iCol列的下标。
iRow行的下标。
newElem待设置的新系数。
COPT_SetElems
概要
int COPT_SetElems(copt_prob *prob, int nelem, const int *cols, const int *rows, const double *elems)描述
批量设置指定行列对应的系数。
注意: 列和行的索引对不能重复出现。
参量
probCOPT模型。
nelem待设置的新系数个数。
cols列的下标。
rows行的下标。
elems待设置的新系数取值。
COPT_SetPSDElem
概要
int COPT_SetPSDElem(copt_prob *prob, int iCol, int iRow, int newIdx)描述
设置指定半定约束中半定项的对称矩阵下标。
参量
probCOPT模型。
iCol半定变量的下标。
iRow半定约束的下标。
newIdx待设置的对称矩阵新下标。
COPT_SetLMIElem
概要
int COPT_SetLMIElem(copt_prob *prob, int iCol, int iRow, int newIdx)描述
设置指定LMI约束中指定变量的系数对称矩阵下标。
参量
probCOPT模型。
iCol标量变量的下标。
iRowLMI约束的下标。
newIdx指向新的系数对称矩阵下标的指针。
COPT_SetObjSense
概要
int COPT_SetObjSense(copt_prob *prob, int iObjSense)描述
设定(修改)优化方向。
参量
probCOPT模型。
iObjSense优化方向。可能的取值有
COPT_MAXIMIZE或COPT_MINIMIZE。
COPT_SetObjConst
概要
int COPT_SetObjConst(copt_prob *prob, double dObjConst)描述
设定目标函数的常数项。
参量
probCOPT模型。
dObjConst目标函数的常数项。
COPT_SetColObj/Type/Lower/Upper/Names
概要
int COPT_SetColObj(copt_prob *prob, int num, const int *list, const double *obj)
int COPT_SetColType(copt_prob *prob, int num, const int *list, const char *type)
int COPT_SetColLower(copt_prob *prob, int num, const int *list, const double *lower)
int COPT_SetColUpper(copt_prob *prob, int num, const int *list, const double *upper)
int COPT_SetColNames(copt_prob *prob, int num, const int *list, char const *const *names)描述
以上五个函数,分别修改
num个变量(列)的目标函数参数
变量类型
下边界
上边界
名字
参量
probCOPT模型。
num要修改的变量个数。
list要修改的变量列表。
obj列表中出现的各个变量的新目标函数参数。
types列表中出现的各个变量的新类型。
lower列表中出现的各个变量的新下界。
upper列表中出现的各个变量的新上界。
names列表中出现的各个变量的新名字。
COPT_SetPSDColNames
概要
int COPT_SetPSDColNames(copt_prob *prob, int num, const int *list, char const *const *names)描述
修改
num个半定变量的名字。参量
probCOPT模型。
num要修改的半定变量个数。
list要修改的半定变量下标列表。
names列表中出现的各个半定变量的新名字。
COPT_SetRowLower/Upper/Names
概要
int COPT_SetRowLower(copt_prob *prob, int num, const int *list, const double *lower)
int COPT_SetRowUpper(copt_prob *prob, int num, const int *list, const double *upper)
int COPT_SetRowNames(copt_prob *prob, int num, const int *list, char const *const *names)描述
以上三个函数,分别修改
num个约束(行)的下边界
上边界
名字
参量
probCOPT模型。
num要修改的约束个数。
list要修改的约束列表。
lower列表中出现的各个约束的新下界。
upper列表中出现的各个约束的新上界。
names列表中出现的各个约束的新名字。
COPT_SetQConstrSense/Rhs/Names
概要
int COPT_SetQConstrSense(copt_prob *prob, int num, const int *list, const char *sense)
int COPT_SetQConstrRhs(copt_prob *prob, int num, const int *list, const double *rhs)
int COPT_SetQConstrNames(copt_prob *prob, int num, const int *list, char const *const *names)描述
以上三个函数, 分别修改
num个二次约束的类型
右端项
名字
参量
probCOPT模型。
num要修改的二次约束个数。
list要修改的二次约束列表。
sense列表中出现的各个二次约束的新类型。
rhs列表中出现的各个二次约束的新右端项。
names列表中出现的各个二次约束的新名字。
COPT_SetPSDConstrLower/Upper/Names
概要
int COPT_SetPSDConstrLower(copt_prob *prob, int num, const int *list, const double *lower)
int COPT_SetPSDConstrUpper(copt_prob *prob, int num, const int *list, const double *upper)
int COPT_SetPSDConstrNames(copt_prob *prob, int num, const int *list, char const *const *names)描述
以上三个函数,分别修改
num个半定约束的下边界
上边界
名字
参量
probCOPT模型。
num要修改的半定约束个数。
list要修改的半定约束下标列表。
lower列表中出现的各个半定约束的新下界。
upper列表中出现的各个半定约束的新上界。
names列表中出现的各个半定约束的新名字。
COPT_SetLMIConstrRhs
概要
int COPT_SetLMIConstrRhs(copt_prob *prob, int num, const int *list, const int *newIdx)描述
修改
num个LMI约束的常数项对称矩阵。参量
probCOPT模型。
num要修改的LMI约束个数。
list要修改的LMI约束下标列表。
newIdx待设置的常数项对称矩阵新下标。
COPT_SetLMIConstrNames
概要
int COPT_SetLMIConstrNames(copt_prob *prob, int num, const int *list, char const *const *names)描述
修改
num个LMI约束的名称。参量
probCOPT模型。
num要修改的LMI约束个数。
list要修改的LMI约束下标列表。
names列表中出现的各个LMI约束的新名称。
COPT_SetIndicatorNames
概要
int COPT_SetIndicatorNames(copt_prob *prob, int num, const int *list, char const *const *names)描述
修改
num个Indicator约束(行)的名称。参量
probCOPT模型。
num要修改的Indicator约束个数。
list要修改的Indicator约束下标列表。
names列表中出现的各个Indicator约束的新名称。
COPT_SetAffineConeNames
概要
int COPT_CALL COPT_SetAffineConeNames(copt_prob *prob, int num, const int *list, char const *const *names)描述
修改
num个仿射锥的名称。参量
probCOPT模型。
num要修改的仿射锥个数。
list要修改的仿射锥下标列表。
names列表中出现的各个仿射锥的新名字。
COPT_SetNLConstrLower/Upper/Names
概要
int COPT_SetNLConstrLower(copt_prob *prob, int num, const int *list, const double *lower)
int COPT_SetNLConstrUpper(copt_prob *prob, int num, const int *list, const double *upper)
int COPT_SetNLConstrNames(copt_prob *prob, int num, const int *list, char const *const *names)描述
以上三个函数,分别修改
num个非线性表达式约束的下边界
上边界
名称
参量
probCOPT模型。
num要修改的非线性表达式约束个数。
list要修改的非线性表达式约束列表。
lower列表中出现的各个非线性表达式约束的新下界。
upper列表中出现的各个非线性表达式约束的新上界。
names列表中出现的各个非线性表达式约束的新名称。
COPT_ReplaceColObj
概要
int COPT_ReplaceColObj(copt_prob *prob, int num, const int *list, const double *obj)描述
使用指定的参数构成的目标函数替换之前的目标函数。
参量
probCOPT模型。
num要修改的变量个数。
list要修改的变量列表。
obj列表中出现的各个变量的新目标函数参数。
COPT_ReplacePSDObj
概要
int COPT_ReplacePSDObj(copt_prob *prob, int num, const int *list, const int *idx)描述
使用指定的半定项替换目标函数中的半定项。
参量
probCOPT模型。
num要修改的半定项数目。
list要修改的半定变量列表。
idx列表中出现的各个半定变量的对称矩阵新下标。
COPT_SetQuadObj
概要
int COPT_SetQuadObj(copt_prob *prob, int num, int *qRow, int *qCol, double *qElem)描述
设置二次目标函数中的二次项。
参量
probCOPT模型。
num二次目标函数中非零二次项数目。
qRow二次目标函数中非零二次项行下标。
qCol二次目标函数中非零二次项列下标。
qElem二次目标函数中非零二次项系数。
COPT_SetNLObj
概要
int COPT_SetNLObj(copt_prob *prob, int nToken, int nTokenElem, const int *token, const double *tokenElem)描述
设置非线性目标函数中的非线性表达式项。
参量
probCOPT模型。
nToken表达式中的操作符数目。
nTokenElem表达式中的常量数目。
token表达式中的操作符数组。
tokenElem表达式中的常量数组。
COPT_SetPSDObj
概要
int COPT_SetPSDObj(copt_prob *prob, int iCol, int newIdx)描述
设置目标函数中的半定项。
参量
probCOPT模型。
iCol目标函数中半定项的半定变量下标。
newIdx目标函数中半定项的对称矩阵下标。
读入与输出模型
COPT_ReadMps
概要
int COPT_ReadMps(copt_prob *prob, const char *mpsfilename)描述
从MPS文件中读取模型。
参量
probCOPT模型。
mpsfilenameMPS文件路径。
COPT_ReadLp
概要
int COPT_ReadLp(copt_prob *prob, const char *lpfilename)描述
从LP文件中读取模型。
参量
probCOPT模型。
lpfilenameLP文件路径。
COPT_ReadSDPA
概要
int COPT_ReadSDPA(copt_prob *prob, const char *sdpafilename)描述
从SDPA文件中读取模型。
参量
probCOPT模型。
sdpafilenameSDPA文件路径。
COPT_ReadCbf
概要
int COPT_ReadCbf(copt_prob *prob, const char *cbffilename)描述
从CBF文件中读取模型。
参量
probCOPT模型。
cbffilenameCBF文件路径。
COPT_ReadBin
概要
int COPT_ReadBin(copt_prob *prob, const char *binfilename)描述
从COPT二进制文件中读取模型。
参量
probCOPT模型。
binfilenameCOPT二进制文件路径。
COPT_ReadBlob
概要
int COPT_ReadBlob(copt_prob *prob, void *blob, COPT_INT64 len)描述
从COPT序列化数据中读取模型。
参量
probCOPT模型。
blob序列化数据。
len序列化数据长度。
COPT_WriteMps
概要
int COPT_WriteMps(copt_prob *prob, const char *mpsfilename)描述
把内部的COPT模型写出到MPS格式文件中。
参量
probCOPT模型。
mpsfilenameMPS格式文件路径。
COPT_WriteMpsStr
概要
int COPT_WriteMpsStr(copt_prob *prob, char *str, int nStrSize, int *pReqSize)描述
把内部的COPT模型以MPS格式写出到字符流中。
参量
probCOPT模型。
strMPS格式模型字符流。
nStrSize字符流缓冲区的大小。
pReqSize保存模型的字符流最小空间大小。
COPT_WriteLp
概要
int COPT_WriteLp(copt_prob *prob, const char *lpfilename)描述
把内部的COPT模型写出到LP格式文件中。
参量
probCOPT模型。
lpfilenameLP格式文件路径。
COPT_WriteCbf
概要
int COPT_WriteCbf(copt_prob *prob, const char *cbffilename)描述
把内部的COPT模型写出到CBF格式文件中。
参量
probCOPT模型。
cbffilenameCBF格式文件路径。
COPT_WriteBin
概要
int COPT_WriteBin(copt_prob *prob, const char *binfilename)描述
把内部的COPT模型写出到COPT二进制格式文件中。
参量
probCOPT模型。
binfilenameCOPT二进制格式文件路径。
COPT_WriteNL
概要
int COPT_WriteNL(copt_prob *prob, const char *nlfilename)描述
把内部的COPT模型写出到NL格式文件中。
参量
probCOPT模型。
nlfilenameNL格式文件路径。
COPT_WriteBlob
概要
int COPT_WriteBlob(copt_prob *prob, int tryCompress, void **p_blob, COPT_INT64 *pLen)描述
把内部的COPT模型写出到COPT序列化数据中。
参量
probCOPT模型。
tryCompress是否尝试压缩数据。
p_blob指向序列化数据的输出指针。
pLen指向序列化数据的长度的指针。
求解和获取解
COPT_SolveLp
概要
int COPT_SolveLp(copt_prob *prob)描述
求解线性规划模型、二阶锥规划模型、二次规划模型、二次约束规划模型或半定规划模型。 若模型为整数规划模型,则忽略变量的整数限制,以及SOS约束和Indicator约束, 将其作为连续模型求解。
参量
probCOPT模型。
COPT_Solve
概要
int COPT_Solve(copt_prob *prob)描述
求解线性规划、二阶锥规划、二次规划、二次约束规划、半定规划或者整数规划模型。
参量
probCOPT模型。
COPT_GetSolution
概要
int COPT_GetSolution(copt_prob *prob, double *colVal)描述
获取整数规划模型的解。
参量
probCOPT模型。
colVal变量的取值。
COPT_GetPoolObjVal
概要
int COPT_GetPoolObjVal(copt_prob *prob, int iSol, double *p_objVal)描述
获取解池中第
iSol个解的目标函数值。参量
probCOPT模型。
iSol解的索引。
p_objVal指向目标函数值的指针。
COPT_GetPoolSolution
概要
int COPT_GetPoolSolution(copt_prob *prob, int iSol, int num, const int *list, double *colVal)描述
获取解池中第
iSol个解。参量
probCOPT模型。
iSol解的索引。
num获取解的变量(列)的个数。
list获取解的变量(列)的下标列表。可以为
NULL。
colVal返回获取的解的数组。
COPT_GetLpSolution
概要
int COPT_GetLpSolution(copt_prob *prob, double *value, double *slack, double *rowDual, double *redCost)描述
获取线性规划、二阶锥规划、二次规划、二次约束规划和半定规划中变量的解。
注意: 对于半定规划,获取半定变量的解请使用
COPT_GetPSDColInfo函数。参量
probCOPT模型。
value变量的取值。可以为
NULL。
slack松弛变量的取值。也叫做约束的活跃程度(activities)。 可以为
NULL。
rowDual对偶变量的取值。可以为
NULL。
redCost变量的Reduced cost。可以为
NULL。
COPT_SetLpSolution
概要
int COPT_SetLpSolution(copt_prob *prob, double *value, double *slack, double *rowDual, double *redCost)描述
设置线性规划的解。
参量
probCOPT模型。
value变量的取值。
slack松弛变量的取值。
rowDual对偶变量的取值。
redCost变量的Reduced cost。
COPT_GetBasis
概要
int COPT_GetBasis(copt_prob *prob, int *colBasis, int *rowBasis)描述
获取线性规划的基状态。
参量
probCOPT模型。
colBasis和rowBasis分别是变量和约束的基状态。 请参考常量部分关于基状态的种类及其含义。
COPT_SetBasis
概要
int COPT_SetBasis(copt_prob *prob, const int *colBasis, const int *rowBasis)描述
设置线性规划的基。 使用这个函数可以热启动线性优化。
参量
probCOPT模型。
colBasis和rowBasis分别是变量和约束的基状态。 请参考常量部分关于基状态的种类及其含义。
COPT_SetSlackBasis
概要
int COPT_SetSlackBasis(copt_prob *prob)描述
设置线性规划的基为松弛基。 线性规划默认的起始点就是松弛基。使用这个函数,可以使线性规划重置为其默认起点。
参量
probCOPT模型。
COPT_Reset
概要
int COPT_Reset(copt_prob *prob, int iClearAll)描述
重置模型中存储的求解结果,使下次求解重新开始。当
iClearAll为1时, 清除初始解等其它信息。参量
probCOPT模型。
iClearAll是否清除其它信息。
COPT_ReadSol
概要
int COPT_ReadSol(copt_prob *prob, const char *solfilename)描述
从结果文件中读取变量的取值。对于整数规划,可以作为整数规划的初始解。
注意: 调用该函数时,变量的默认取值为0,即任何不完整的解会被自动用零补全。
参量
probCOPT模型。
solfilename求解结果文件路径。
COPT_ReadJsonSol
概要
int COPT_ReadJsonSol(copt_prob *prob, const char *solfilename)描述
从文件中读取JSON格式的完整解。
参量
probCOPT模型。
solfilename求解结果文件路径。
COPT_WriteSol
概要
int COPT_WriteSol(copt_prob *prob, const char *solfilename)描述
将模型的求解结果写到文件中。
参量
probCOPT模型。
solfilename求解结果文件路径。
COPT_WriteJsonSol
概要
int COPT_WriteJsonSol(copt_prob *prob, const char *solfilename)描述
将模型的求解结果写出到
".json"文件中。参量
probCOPT模型。
solfilename求解结果文件路径。
COPT_WritePoolSol
概要
int COPT_WritePoolSol(copt_prob *prob, int iSol, const char *solfilename)描述
将指定的解池中的解写到文件中。仅适用于整数规划模型。
参量
probCOPT模型。
iSol解池中解的索引。
solfilename求解结果文件路径。
COPT_WriteBasis
概要
int COPT_WriteBasis(copt_prob *prob, const char *basfilename)描述
把COPT内部的线性规划的基状态写出到文件中。
参量
probCOPT模型。
basfilename基状态文件路径。
COPT_ReadBasis
概要
int COPT_ReadBasis(copt_prob *prob, const char *basfilename)描述
从文件中读取线性规划的基状态。 使用这个函数可以热启动线性优化。
参量
probCOPT模型。
basfilename基状态文件路径。
获取模型信息
COPT_GetCols
概要
int COPT_GetCols(
copt_prob *prob,
int nCol,
const int *list,
int *colMatBeg,
int *colMatCnt,
int *colMatIdx,
double *colMatElem,
int nElemSize,
int *pReqSize)描述
按列的方式获取模型的系数矩阵。
一般来说,用户需要连续调用两次该函数完成系数矩阵抽取操作。 首先,将
colMatBeg,colMatCnt,colMatIdx和colMatElem传入NULL,通过pReqSize返回由nCol和list指定的系数矩阵非零元 个数,然后对列压缩格式矩阵参量分配合理的空间,并再次调用该函数获取指定的系数矩阵。 若传入的系数矩阵长度不够,则返回前nElemSize个长度的非零系数, 并通过pReqSize返回需要的最小数组长度。 若list为NULL,则返回前nCol个列对应的系数矩阵。参量
probCOPT模型。
nCol待获取的列的个数。
list待获取的列的下标列表。可以为
NULL。
colMatBeg, colMatCnt, colMatIdx和colMatElem以列压缩存储格式提供系数矩阵。 有关列压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
nElemSize传入非零系数数组的长度。
pReqSize指向待获取的列包含的非零系数的总数目的指针。可以为
NULL。
COPT_GetPSDCols
概要
int COPT_GetPSDCols(copt_prob *prob, int nCol, int *list, int* colDims, int *colLens)描述
获取指定半定变量的维度与展开长度。
参量
probCOPT模型。
nCol指定的半定变量个数。
list指定的半定变量下标列表。
colDims指定的半定变量维度。
colLens指定的半定变量展开长度。
COPT_GetRows
概要
int COPT_GetRows(
copt_prob *prob,
int nRow,
const int *list,
int *rowMatBeg,
int *rowMatCnt,
int *rowMatIdx,
double *rowMatElem,
int nElemSize,
int *pReqSize)描述
按行的方式获取模型的系数矩阵。
一般来说,用户需要连续调用两次该函数完成系数矩阵抽取操作。 首先,将
rowMatBeg,rowMatCnt,rowMatIdx和rowMatElem传入NULL,通过pReqSize返回由nRow和list指定的系数矩阵非零元 个数,然后对行压缩格式矩阵参量分配合理的空间,并再次调用该函数获取指定的系数矩阵。 若传入的系数矩阵长度不够,则返回前nElemSize个长度的非零系数, 并通过pReqSize返回需要的最小数组长度。 若list为NULL,则返回前nRow个行对应的系数矩阵。参量
probCOPT模型。
nRow待获取的行的个数。
list待获取的行的下标列表。可以为
NULL。
rowMatBeg, rowMatCnt, rowMatIdx和rowMatElem以行压缩存储格式提供系数矩阵。 有关行压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
nElemSize传入非零系数数组的长度。
pReqSize指向待获取的行包含的非零系数的总数目的指针。可以为
NULL。
COPT_GetElem
概要
int COPT_GetElem(copt_prob *prob, int iCol, int iRow, double *p_elem)描述
获取指定行列对应的系数。
参量
probCOPT模型。
iCol列的下标。
iRow行的下标。
p_elem指向待获取系数的指针。
COPT_GetPSDElem
概要
int COPT_GetPSDElem(copt_prob *prob, int iCol, int iRow, int *p_idx)描述
获取指定半定约束中指定半定项的对称矩阵下标。
参量
probCOPT模型。
iCol半定变量的下标。
iRow半定约束的下标。
p_idx指向待获取对称矩阵下标的指针。
COPT_GetLMIElem
概要
int COPT_GetLMIElem(copt_prob *prob, int iCol, int iRow, int *p_idx)描述
获取指定LMI约束中指定变量的系数对称矩阵下标。
参量
probCOPT模型。
iCol标量变量的下标。
iRowLMI约束的下标。
p_idx指向待获取系数对称矩阵下标的指针。
COPT_GetSymMat
概要
int COPT_GetSymMat(
copt_prob *prob,
int iMat,
int *p_nDim,
int *p_nElem,
int *rows,
int *cols,
double *elems)描述
获取指定的对称矩阵。
一般来说,用户需要连续调用两次该函数完成对称矩阵的抽取操作。 首先,将
rows,cols和elems传入NULL, 通过p_nDim和p_nElem返回对称矩阵的维度与非零元个数, 然后为对称矩阵参量rows,cols和elems分配合理的空间, 并再次调用该函数获取指定的对称矩阵。参量
probCOPT模型。
iMat对称矩阵的下标。
p_nDim指向对称矩阵维度的指针。
p_nElem指向对称矩阵非零元数目的指针。
rows对称矩阵非零元素行索引下标。
cols对称矩阵非零元素列索引下标。
elems对称矩阵的非零元素。
COPT_GetQuadObj
概要
int COPT_GetQuadObj(copt_prob* prob, int* p_nQElem, int* qRow, int* qCol, double* qElem)描述
获取目标函数中的非零二次项。
参量
probCOPT模型。
p_nQElem指向非零二次项数目的指针。
qRow非零二次项的行下标。
qCol非零二次项的列下标。
qElem非零二次项系数。
COPT_GetPSDObj
概要
int COPT_GetPSDObj(copt_prob *prob, int iCol, int *p_idx)描述
获取目标函数中的指定半定项。
参量
probCOPT模型。
iCol半定变量的下标。
p_idx指向对称矩阵下标的指针。
COPT_GetNLObj
概要
int COPT_GetNLObj(
copt_prob *prob,
int *p_nToken,
int *p_nTokenElem,
int *token,
double *tokenElem)描述
获取目标函数中的非线性表达式项。
参量
probCOPT模型指针。
p_nToken指向表达式中操作符数目的指针。
p_nTokenElem指向表达式中常量数目的指针。
token表达式中的操作符数组。
tokenElem表达式中的常量数组。
COPT_GetSOSs
概要
int COPT_GetSOSs(
copt_prob *prob,
int nSos,
const int *list,
int *sosMatBeg,
int *sosMatCnt,
int *sosMatIdx,
double *sosMatElem,
int nElemSize,
int *pReqSize)描述
获取模型的SOS约束矩阵。
一般来说,用户需要连续调用两次该函数完成SOS约束矩阵抽取操作。 首先,将
sosMatBeg,sosMatCnt,sosMatIdx和sosMatElem传入NULL,通过pReqSize返回由nSos和list指定的SOS约束矩阵 非零元个数,然后对行压缩格式矩阵参量分配合理的空间,并再次调用该函数获取指定的SOS约束矩阵。 若传入的SOS约束矩阵长度不够,则返回前nElemSize个长度的非零系数, 并通过pReqSize返回需要的最小数组长度。 若list为NULL,则返回前nSos个行对应的SOS约束矩阵。参量
probCOPT模型。
nSos待获取的SOS约束的个数。
list待获取的SOS约束的下标列表。可以为
NULL。
sosMatBeg, sosMatCnt, sosMatIdx和sosMatElem以行压缩存储格式提供SOS约束矩阵。 有关行压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
nElemSize传入非零系数数组的长度。
pReqSize指向待获取的行包含的非零系数的总数目的指针。可以为
NULL。
COPT_GetCones
概要
int COPT_GetCones(
copt_prob *prob,
int nCone,
const int *list,
int *coneBeg,
int *coneCnt,
int *coneIdx,
int nElemSize,
int *pReqSize)描述
获取模型的二阶锥约束矩阵。
一般来说,用户需要连续调用两次该函数完成二阶锥约束矩阵抽取操作。 首先,将
coneBeg,coneCnt和coneIdx传入NULL,通过pReqSize返回由nCone和list指定的二阶锥约束矩阵变量下标个数,然后对行压缩格式矩阵参量 分配合理的空间,并再次调用该函数获取指定的二阶锥约束矩阵。 若传入的二阶锥约束矩阵长度不够,则返回前nElemSize个长度的变量下标,并通过pReqSize返回需要的最小数组长度。 若list为NULL,则返回前nCone个行对应的二阶锥约束矩阵。参量
probCOPT模型。
nCone待获取的二阶锥约束的个数。
list待获取的二阶锥约束的下标列表。可以为
NULL。
coneBeg, coneCnt, coneIdx以行压缩存储格式提供二阶锥约束矩阵。 有关行压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
nElemSize传入变量下标数组的长度。
pReqSize指向待获取指数锥所包含的变量下标总数目的指针。可以为
NULL。
COPT_GetExpCones
概要
int COPT_GetExpCones(
copt_prob *prob,
int nCone,
const int *list,
int *coneType,
int *coneIdx,
int nElemSize,
int *pReqSize)描述
获取模型的指数锥约束的数组。
一般来说,用户需要连续调用两次该函数完成指数锥约束数组抽取操作。
首先,将
coneIdx传入NULL,通过pReqSize返回由nCone和list指定的指数锥约束数组的下标个数,然后对数组参量 分配合理的空间,并再次调用该函数获取指定的指数锥约束数组。 若传入的指数锥约束数组长度不够,则返回前nElemSize个长度的变量下标数组,并通过pReqSize返回需要的最小数组长度。 若list为NULL,则返回前nCone个行对应的指数锥约束数组。参量
probCOPT模型。
nCone待获取的指数锥约束的个数。
list待获取的指数锥约束的下标列表。可以为
NULL。
coneType指数锥约束的类型。可取值请参考 指数锥约束类型 。
coneIdx构成指数锥的变量的下标的数组。
nElemSize传入变量下标数组的长度。
pReqSize指向待获取指数锥所包含的变量下标总数目的指针。可以为
NULL。
COPT_GetAffineCone
概要
int COPT_GetAffineCone(
copt_prob *prob,
int affConeIdx,
int *coneType,
int *nConeDim,
int *nAlphaDim,
double *alphaElem,
int *psdBeg,
int *psdCnt,
int *psdColIdx,
int *psdMatIdx,
int nPsdElemSize,
int *pPsdReqSize,
int *rowMatBeg,
int *rowMatCnt,
int *rowMatIdx,
double *rowMatElem,
double *rowConst,
int nElemSize,
int *pReqSize)描述
获取模型的仿射锥约束的数组。
一般来说,用户需要连续调用两次该函数完成仿射锥约束数组抽取操作。
首先,将
affConeIdx传入NULL,通过pReqSize返回由nConeDim和list指定的仿射锥约束数组的下标个数,然后对数组参量 分配合理的空间,并再次调用该函数获取指定的仿射锥约束数组。若传入的仿射锥约束数组长度不够,则返回前
nElemSize个长度的变量下标数组,并通过pReqSize返回需要的最小数组长度。 若list为NULL,则返回前nConeDim个行对应的仿射锥约束数组。参量
probCOPT模型。
affConeIdx仿射锥的下标。
coneType
nConeDim仿射锥的维度。
nAlphaDim预留参数,暂未使用。
alphaElem预留参数,暂未使用。
psdBeg, psdCnt, psdColIdx, psdMatIdx表示仿射锥中的半定项。
psdBeg表示每个仿射锥项中半定项的起始位置,psdCnt表示半定项的数目,psdColIdx表示半定变量的下标,psdMatIdx表示对称矩阵的下标。首先通过 pPsdReqSize 返回半定项的数目,nPsdElemSize 是待获取的半定项的数目。
rowMatBeg, rowMatCnt, rowMatIdx, rowMatElem表示仿射锥中的线性项。
以行压缩存储格式提供系数矩阵。有关稀疏矩阵的压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
rowConst仿射锥中的常数项。
nElemSize传入变量下标数组的长度。
pReqSize指向待获取仿射锥所包含的变量下标总数目的指针。可以为
NULL。
COPT_GetQConstr
概要
int COPT_GetQConstr(
copt_prob *prob,
int qConstrIdx,
int *qMatRow,
int *qMatCol,
double *qMatElem,
int nQElemSize,
int *pQReqSize,
int *rowMatIdx,
double *rowMatElem,
char *cRowSense,
double *dRowBound,
int nElemSize,
int *pReqSize)描述
获取模型的二次约束。
一般来说,用户需要连续调用两次该函数完成二次约束的抽取操作。 首先,将
qMatRow,qMatCol和qMatElem传入NULL, 通过pQReqSize返回由qConstrIdx指定的二次约束的非零二次项个数, 将rowMatIdx和rowMatElem传入NULL, 通过pReqSize返回由qConstrIdx指定的二次约束的非零线性项个数, 然后对二次项和线性项系数参量分配合理的空间,并再次调用该函数获取指定的二次约束。 若传入的二次项系数向量长度不够,则返回前nQElemSize个长度的非零二次项系数, 并通过pQReqSize返回需要的最小数组长度;若传入的线性项系数向量长度不够, 则返回前nElemSize个长度的非零线性项系数,并通过pReqSize返回需要的最小数组长度。参量
probCOPT模型。
qConstrIdx二次约束的下标。
qMatRow二次约束中非零二次项的行下标。
qMatCol二次约束中非零二次项的列下标。
qMatElem二次约束中非零二次项系数。
nQElemSize传入的非零二次项系数数组长度。
pQReqSize指向待获取的二次约束包含的非零二次项的总数目的指针。可以为
NULL。
rowMatIdx二次约束中非零线性项系数的下标。
rowMatElem二次约束中的非零线性项系数。
cRowSense二次约束的类型。
dRowBound二次约束的右端项。
nElemSize传入非零线性项系数数组的长度。
pReqSize指向待获取的二次约束包含的非零线性项系数的总数目的指针。可以为
NULL。
COPT_GetPSDConstr
概要
int COPT_GetPSDConstr(
copt_prob *prob,
int psdConstrIdx,
int *psdColIdx,
int *symMatIdx,
int nColSize,
int *pColReqSize,
int *rowMatIdx,
double *rowMatElem,
double *dRowLower,
double *dRowUpper,
int nElemSize,
int *pReqSize)描述
获取模型的半定约束。
一般来说,用户需要连续调用两次该函数完成半定约束的抽取操作。 首先,将
psdColIdx和symMatIdx传入NULL, 通过pColReqSize返回由psdConstrIdx指定的半定约束的半定项个数, 将rowMatIdx和rowMatElem传入NULL, 通过pReqSize返回由qConstrIdx指定的半定约束的非零线性项个数, 然后对半定项和线性项系数参量分配合理的空间,并再次调用该函数获取指定的半定约束。 若传入的半定项向量长度不够,则返回前nColSize个长度的半定项系数, 并通过pColReqSize返回需要的最小数组长度;若传入的线性项系数向量长度不够, 则返回前nElemSize个长度的非零线性项系数,并通过pReqSize返回需要的最小数组长度。参量
probCOPT模型。
psdConstrIdx半定约束的下标。
psdColIdx半定变量的下标。
symMatIdx对称矩阵的下标。
nColSize传入的半定项数组长度。
pColReqSize指向待获取的半定约束中半定项的总数目的指针。可以为
NULL。
rowMatIdx半定约束中非零线性项系数的下标。
rowMatElem半定约束中的非零线性项系数。
dRowLower指向半定约束下界的指针。
dRowUpper指向半定约束上界的指针。
nElemSize传入非零线性项系数数组的长度。
pReqSize指向待获取的半定约束包含的非零线性项系数的总数目的指针。可以为
NULL。
COPT_GetLMIConstr
概要
int COPT_GetLMIConstr(
copt_prob *prob,
int lmiConstrIdx,
int *nDim,
int *nLMILen,
int *colIdx,
int *symMatIdx,
int *constMatIdx,
int nElemSize,
int *pReqSize)描述
获取模型中指定下标的LMI约束。
参量
probCOPT模型。
lmiConstrIdxLMI约束的下标。
nDim指向LMI约束中对称矩阵维度的指针。
nLMILen指向展开后的LMI约束长度的指针。
colIdxLMI约束中标量变量的下标。
symMatIdxLMI约束中系数对称矩阵的下标。
constMatIdx指向LMI约束中常数项对称矩阵下标的指针。
nElemSize传入非零系数数组的长度。
pReqSize指向待获取的LMI约束包含的非零线性项系数的总数目的指针。可以为
NULL。
COPT_GetIndicator
概要
int COPT_GetIndicator(
copt_prob *prob,
int rowIdx,
int *binColIdx,
int *binColVal,
int *nRowMatCnt,
int *rowMatIdx,
double *rowMatElem,
char *cRowSense,
double *dRowBound,
int nElemSize,
int *pReqSize)描述
获取模型的Indicator约束。
一般来说,用户需要连续调用两次该函数完成Indicator约束的抽取操作。 首先,将
nRowMatCnt,rowMatIdx和rowMatElem传入NULL, 通过pReqSize返回由rowIdx指定的Indicator约束的非零元个数, 然后对约束系数参量分配合理的空间,并再次调用该函数获取指定的Indicator约束。 若传入的Indicator约束系数向量长度不够,则返回前nElemSize个长度的非零系数, 并通过pReqSize返回需要的最小数组长度。参量
probCOPT模型。
rowIdxIndicator约束(行)的下标。
binColIdx二进制类型Indicator变量(列)的下标。
binColVal二进制类型Indicator变量(列)的取值。
nRowMatCnt线性约束(行)系数向量中非零元素的数量。
rowMatIdx线性约束(行)系数向量中非零元素的下标。
rowMatElem线性约束(行)系数向量中的非零元素。
cRowSense线性约束(行)的类型。
dRowBound线性约束(行)的右端项。
nElemSize传入非零系数数组的长度。
pReqSize指向待获取的行包含的非零系数的总数目的指针。可以为
NULL。
COPT_GetIndicators
概要
int COPT_GetIndicators(
copt_prob *prob,
int nInd,
int *list,
int *indType,
int *binColIdx,
int *binColVal,
int *rowMatBeg,
int *rowMatCnt,
int *rowMatIdx,
double *rowMatElem,
char *cRowSense,
double *dRowBound,
int nElemSize,
int *pReqSize)描述
获取模型中多个Indicator约束。
一般来说,用户需要连续调用两次该函数完成Indicator约束矩阵的抽取操作。 首先,将
rowMatBeg,rowMatCnt,rowMatIdx和rowMatElem传入NULL,通过pReqSize返回由nInd和list指定的Indicator约束矩阵非零元 个数,然后对行压缩格式矩阵参量分配合理的空间,并再次调用该函数获取指定的Indicator约束矩阵。若传入的Indicator约束矩阵长度不够,则返回前
nElemSize个长度的非零系数, 并通过pReqSize返回需要的最小数组长度。 若list为NULL,则返回前nInd个行对应的Indicator约束矩阵。参量
probCOPT模型。
nIndIndicator约束的个数。
list待获取Indicator约束(行)的下标列表。
indType待获取Indicator约束的类型。可取值详见:Indicator约束类型 。
binColIdx二进制类型Indicator变量(列)的下标。
binColVal二进制类型Indicator变量(列)的取值。
rowMatBeg, rowMatCnt, rowMatIdx和rowMatElem以行压缩存储格式提供系数矩阵。 有关行压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
cRowSense线性约束(行)的类型。
dRowBound线性约束(行)的右端项。
nElemSize传入非零系数数组的长度。
pReqSize指向待获取的行包含的非零系数的总数目的指针。可以为
NULL。
COPT_GetNLConstr
概要
int COPT_GetNLConstr(
copt_prob *prob,
int nlConstrIdx,
int *token,
double *tokenElem,
int nToken,
int nTokenElem,
int *pReqToken,
int *pReqTokenElem,
int *rowMatIdx,
double *rowMatElem,
double *dRowLower,
double *dRowUpper,
int nElemSize,
int *pReqElemSize)描述
获取指定下标的非线性表达式约束。
参量
probCOPT模型指针。
nlConstrIdx约束的下标。
token表达式的操作符数组。
tokenElem表达式的常量数组。
nToken表达式中的操作符数目。
nTokenElem表达式中的常量数目。
pReqToken指向表达式中操作符数目的指针。
pReqTokenElem指向表达式中常量数目的指针。
rowMatIdx约束中的线性项下标。
rowMatElem约束中的线性项系数。
dRowLower指向约束下界的指针。
dRowUpper指向约束上界的指针。
nElemSize约束中的线性项数目。
pReqElemSize指向线性项数目的指针。
COPT_GetColIdx
概要
int COPT_GetColIdx(copt_prob *prob, const char *colName, int *p_iCol)描述
根据变量(列)的名字获取其在COPT内部的下标。
参量
probCOPT模型。
colName变量(列)的名字。
p_iCol指向变量(列)在COPT内部下标的指针。
COPT_GetPSDColIdx
概要
int COPT_GetPSDColIdx(copt_prob *prob, const char *psdColName, int *p_iPSDCol)描述
根据半定变量的名字获取其在COPT内部的下标。
参量
probCOPT模型。
psdColName半定变量的名字。
p_iPSDCol指向半定变量在COPT内部下标的指针。
COPT_GetRowIdx
概要
int COPT_GetRowIdx(copt_prob *prob, const char *rowName, int *p_iRow)描述
根据约束(行)的名字获取其在COPT内部的下标。
参量
probCOPT模型。
rowName约束(行)的名字。
p_iRow指向约束(行)在COPT内部下标的指针。
COPT_GetQConstrIdx
概要
int COPT_GetQConstrIdx(copt_prob *prob, const char *qConstrName, int *p_iQConstr)描述
根据二次约束的名字获取其在COPT内部的下标。
参量
probCOPT模型。
qConstrName二次约束的名字。
p_iQConstr指向二次约束在COPT内部下标的指针。
COPT_GetPSDConstrIdx
概要
int COPT_GetPSDConstrIdx(copt_prob *prob, const char *psdConstrName, int *p_iPSDConstr)描述
根据半定约束的名字获取其在COPT内部的下标。
参量
probCOPT模型。
psdConstrName半定约束的名字。
p_iPSDConstr指向半定约束在COPT内部下标的指针。
COPT_GetLMIConstrIdx
概要
int COPT_GetLMIConstrIdx(copt_prob *prob, const char *lmiConstrName, int *p_iLMIConstr)描述
根据LMI约束名称获取其在COPT内部的下标。
参量
probCOPT模型。
lmiConstrNameLMI约束的名称。
p_iLMIConstr指向LMI约束在COPT内部下标的指针。
COPT_GetIndicatorIdx
概要
int COPT_GetIndicatorIdx(copt_prob *prob, const char *indicatorName, int *p_iIndicator)描述
根据Indicator约束的名称获取其在COPT内部的下标。
参量
probCOPT模型。
indicatorNameIndicator约束的名称。
p_iIndicator指向Indicator约束在COPT内部下标的指针。
COPT_GetAffineConeIdx
概要
int COPT_GetAffineConeIdx(copt_prob *prob, const char *affConeName, int *p_iAffCone)描述
根据仿射锥的名称获取其在COPT内部的下标。
参量
probCOPT模型。
affConeName仿射锥的名称。
p_iAffCone指向仿射锥在COPT内部下标的指针。
COPT_GetNLConstrIdx
概要
int COPT_GetNLConstrIdx(copt_prob *prob, const char *nlConstrName, int *p_iNLConstr)描述
根据名字获取非线性表达式约束的下标。
参量
probCOPT模型。
nlConstrName非线性表达式约束的名字。
p_iNLConstr指向非线性表达式约束在COPT内部下标的指针。
COPT_GetColInfo
概要
int COPT_GetColInfo(copt_prob *prob, const char *infoName, int num, const int *list, double *info)描述
获取变量(列)的信息。若
list为NULL,则返回前num个变量(列)的信息。参量
probCOPT模型。
infoName信息的名字。请查看 信息 章节了解目前支持的信息类型。
num获取信息的变量(列)个数。
list获取信息的变量(列)的下标列表。可以为
NULL。
info返回获取的信息的数组。
COPT_GetPSDColInfo
概要
int COPT_GetPSDColInfo(copt_prob *prob, const char *infoName, int iCol, double *info)描述
获取半定变量的信息。
参量
COPT_GetRowInfo
概要
int COPT_GetRowInfo(copt_prob *prob, const char *infoName, int num, const int *list, double *info)描述
获取约束(行)的信息。若
list为NULL,则返回前num个约束(行)的信息。参量
probCOPT模型。
infoName信息的名字。请查看 信息 章节了解目前支持的信息类型。
num获取信息的约束(行)个数。
list获取信息的约束(行)的下标列表。可以为
NULL。
info返回获取的信息的数组。
COPT_GetQConstrInfo
概要
int COPT_GetQConstrInfo(copt_prob *prob, const char *infoName, int num, const int *list, double *info)描述
获取二次约束的信息。若
list为NULL,则返回前num个二次约束的信息。参量
probCOPT模型。
infoName信息的名字。请查看 信息 章节了解目前支持的信息类型。
num获取信息的二次约束个数。
list获取信息的二次约束的下标列表。可以为
NULL。
info返回获取的信息的数组。
COPT_GetPSDConstrInfo
概要
int COPT_GetPSDConstrInfo(copt_prob *prob, const char *infoName, int num, const int* list, double *info)描述
获取半定约束的信息。若
list为NULL,则返回前num个半定约束的信息。参量
probCOPT模型。
infoName信息的名字。请查看 信息 章节了解目前支持的信息类型。
num获取信息的半定约束个数。
list获取信息的半定约束的下标列表。可以为
NULL。
info返回获取的信息的数组。
COPT_GetLMIConstrInfo
概要
int COPT_GetLMIConstrInfo(copt_prob *prob, const char *infoName, int iLMI, double *info)描述
获取LMI约束的一组信息。
参量
probCOPT模型。
infoName信息的名称。可取值为:
COPT_DBLINFO_SLACK和COPT_DBLINFO_DUAL。
iLMI待获取信息的LMI约束的下标。
info返回获取的信息的数组。
COPT_GetNLConstrInfo
概要
int COPT_GetNLConstrInfo(copt_prob *prob, const char *infoName, int num, const int *list, double *info)描述
获取非线性表达式约束的信息。若
list为NULL, 则返回前num个非线性表达式约束的信息。参量
probCOPT模型。
infoName信息的名称。目前支持获取非线性表达式约束的信息有:
"LB"、"UB"和"Slack"。
num获取信息的非线性表达式约束个数。
list获取信息的非线性表达式约束的下标列表。可以为
NULL。
info返回获取的信息的数组。
COPT_GetColType
概要
int COPT_GetColType(copt_prob *prob, int num, const int *list, char *type)描述
获取变量(列)的类型。若
list为NULL,则返回前num个变量(列)的类型。参量
probCOPT模型。
num变量(列)的个数。
list变量(列)的下标列表。可以为
NULL。
type返回的变量(列)的类型数组。
COPT_GetColBasis
概要
int COPT_GetColBasis(copt_prob *prob, int num, const int *list, int *colBasis)描述
获取变量(列)的基状态。若
list为NULL,则返回前num个变量(列)的基状态。参量
probCOPT模型。
num变量(列)的个数。
list变量(列)的下标列表。可以为
NULL。
colBasis返回的变量(列)的基状态数组。
COPT_GetRowBasis
概要
int COPT_GetRowBasis(copt_prob *prob, int num, const int *list, int *rowBasis)描述
获取约束(行)的基状态。若
list为NULL,则返回前num个约束(行)的基状态。参量
probCOPT模型。
num约束(行)的个数。
list约束(行)的下标列表。可以为
NULL。
rowBasis返回的约束(行)的基状态数组。
COPT_GetQConstrSense
概要
int COPT_GetQConstrSense(copt_prob *prob, int num, const int *list, char *sense)描述
获取二次约束的类型。若
list为NULL,则返回前num个二次约束的类型。参量
probCOPT模型。
num二次约束的个数。
list二次约束的下标列表。可以为
NULL。
sense返回的二次约束类型数组。
COPT_GetQConstrRhs
概要
int COPT_GetQConstrRhs(copt_prob *prob, int num, const int *list, double *rhs)描述
获取二次约束的右端项。若
list为NULL,则返回前num个二次约束的右端项。参量
probCOPT模型。
num二次约束的个数。
list二次约束的下标列表。可以为
NULL。
rhs返回的二次约束右端项。
COPT_GetColName
概要
int COPT_GetColName(copt_prob *prob, int iCol, char *buff, int buffSize, int *pReqSize)描述
根据变量(列)的下标获取其名字。若
buff参量有效长度不够, 且将待获取名字的前buffSize长度的子串返回,且通过pReqSize返回完全存储 待获取名字需要的字符串长度。 若buff参量为NULL,则可以通过pReqSize返回待获取名字的字符串长度。参量
probCOPT模型。
iCol变量(列)的下标。
buff用以获取字符串的数组。
buffSize上述数组的大小。
pReqSize指向存储待获取名字的最小字符串长度的指针。可以为
NULL。
COPT_GetPSDColName
概要
int COPT_GetPSDColName(copt_prob *prob, int iPSDCol, char *buff, int buffSize, int *pReqSize)描述
根据半定变量的下标获取其名字。若
buff参量有效长度不够, 且将待获取名字的前buffSize长度的子串返回,且通过pReqSize返回完全存储 待获取名字需要的字符串长度。 若buff参量为NULL,则可以通过pReqSize返回待获取名字的字符串长度。参量
probCOPT模型。
iPSDCol半定变量的下标。
buff用以获取字符串的数组。
buffSize上述数组的大小。
pReqSize指向存储待获取名字的最小字符串长度的指针。可以为
NULL。
COPT_GetRowName
概要
int COPT_GetRowName(copt_prob *prob, int iRow, char *buff, int buffSize, int *pReqSize)描述
根据约束(行)的下标获取其名字。若
buff参量有效长度不够, 且将待获取名字的前buffSize长度的子串返回,且通过pReqSize返回完全存储 待获取名字需要的字符串长度。若buff参量为NULL,则可以通过pReqSize返回待获取名字的字符串长度。参量
probCOPT模型。
iRow约束(行)的下标。
buff用以获取字符串的数组。
buffSize上述数组的大小。
pReqSize指向存储待获取名字的最小字符串长度的指针。可以为
NULL。
COPT_GetQConstrName
概要
int COPT_GetQConstrName(copt_prob *prob, int iQConstr, char *buff, int buffSize, int *pReqSize)描述
根据二次约束的下标获取其名字。若
buff参量有效长度不够, 且将待获取名字的前buffSize长度的子串返回,且通过pReqSize返回完全存储 待获取名字需要的字符串长度。若buff参量为NULL,则可以通过pReqSize返回待获取名字的字符串长度。参量
probCOPT模型。
iQConstr`二次约束的下标。
buff用以获取字符串的数组。
buffSize上述数组的大小。
pReqSize指向存储待获取名字的最小字符串长度的指针。可以为
NULL。
COPT_GetPSDConstrName
概要
int COPT_GetPSDConstrName(copt_prob *prob, int iPSDConstr, char *buff, int buffSize, int *pReqSize)描述
根据半定约束的下标获取其名字。若
buff参量有效长度不够, 且将待获取名字的前buffSize长度的子串返回,且通过pReqSize返回完全存储 待获取名字需要的字符串长度。若buff参量为NULL,则可以通过pReqSize返回待获取名字的字符串长度。参量
probCOPT模型。
iPSDConstr`半定约束的下标。
buff用以获取字符串的数组。
buffSize上述数组的大小。
pReqSize指向存储待获取名字的最小字符串长度的指针。可以为
NULL。
COPT_GetLMIConstrName
概要
int COPT_CALL COPT_GetLMIConstrName(copt_prob *prob, int iLMIConstr, char *buff, int buffSize, int *pReqSize)描述
根据LMI约束的下标获取其名字。若
buff参量有效长度不够, 且将待获取名字的前buffSize长度的子串返回,且通过pReqSize返回完全存储 待获取名字需要的字符串长度。若buff参量为NULL,则可以通过pReqSize返回待获取名字的字符串长度。参量
probCOPT模型。
iLMIConstrLMI约束的下标。
buff用以获取字符串的数组。
buffSize上述数组的大小。
pReqSize指向存储待获取名字的最小字符串长度的指针。可以为
NULL。
COPT_GetIndicatorName
概要
int COPT_GetIndicatorName(copt_prob *prob, int iIndicator, char *buff, int buffSize, int *pReqSize)描述
根据Indicator约束的下标获取其名称。若
buff参量有效长度不够, 且将待获取名字的前buffSize长度的子串返回,且通过pReqSize返回完全存储 待获取名字需要的字符串长度。若buff参量为NULL,则可以通过pReqSize返回待获取名字的字符串长度。参量
probCOPT模型。
iIndicatorIndicator约束的下标。
buff用以获取字符串的数组。
buffSize上述数组的大小。
pReqSize指向存储待获取名称的最小字符串长度的指针。可以为
NULL。
COPT_GetAffineConeName
概要
int COPT_GetAffineConeName(copt_prob *prob, int iAffCone, char *buff, int buffSize, int *pReqSize)描述
根据仿射锥的下标获取其名称。若
buff参量有效长度不够, 且将待获取名字的前buffSize长度的子串返回,且通过pReqSize返回完全存储 待获取名字需要的字符串长度。若buff参量为NULL,则可以通过pReqSize返回待获取名字的字符串长度。参量
probCOPT模型。
iAffCone仿射锥的下标。
buff用以获取字符串的数组。
buffSize上述数组的大小。
pReqSize指向存储待获取名称的最小字符串长度的指针。可以为
NULL。
COPT_GetNLConstrName
概要
int COPT_GetNLConstrName(copt_prob *prob, int iNLConstr, char *buff, int buffSize, int *pReqSize)描述
根据非线性表达式约束的下标获取其名字。若
buff参量有效长度不够, 则将待获取名字的前buffSize长度的子串返回,且通过pReqSize返回完全存储 待获取名字需要的字符串长度。若
buff参量为NULL,则可以通过pReqSize返回待获取名字的字符串长度。参量
probCOPT模型。
iNLConstr`非线性表达式约束的下标。
buff用以获取字符串的数组。
buffSize上述数组的大小。
pReqSize指向存储待获取名字的最小字符串长度的指针。可以为
NULL。
COPT_GetLMIConstrRhs
概要
int COPT_GetLMIConstrRhs(copt_prob *prob, int num, const int *list, int *constMatIdx)描述
获取
num个LMI约束的常数项对称矩阵。参量
probCOPT模型。
num待获取的LMI约束的个数。
list待获取的LMI约束下标数组。
constMatIdx待获取的LMI约束中常数项对称矩阵下标数组。
设置和获取参数
COPT_SetIntParam
概要
int COPT_SetIntParam(copt_prob *prob, const char *paramName, int intParam)描述
设置一个整数参数。
参量
probCOPT模型。
paramName整数参数的名字。
intParam整数参数的取值。
COPT_GetIntParam, COPT_GetIntParamDef/Min/Max
概要
int COPT_GetIntParam(copt_prob *prob, const char *paramName, int *p_intParam)
int COPT_GetIntParamDef(copt_prob *prob, const char *paramName, int *p_intParam)
int COPT_GetIntParamMin(copt_prob *prob, const char *paramName, int *p_intParam)
int COPT_GetIntParamMax(copt_prob *prob, const char *paramName, int *p_intParam)描述
以上四个函数,分别可以获取一个整数参数的
当前值
默认值
最小值
最大值
参量
probCOPT模型。
paramName整数参数的名字。
p_intParam指向整数参数的值的指针。
COPT_SetDblParam
概要
int COPT_SetDblParam(copt_prob *prob, const char *paramName, double dblParam)描述
设置一个(双精度)浮点数参数。
参量
probCOPT模型。
paramName浮点数参数的名字。
dblParam浮点数参数的取值。
COPT_GetDblParam, COPT_GetDblParamDef/Min/Max
概要
int COPT_GetDblParam(copt_prob *prob, const char *paramName, double *p_dblParam)
int COPT_GetDblParamDef(copt_prob *prob, const char *paramName, double *p_dblParam)
int COPT_GetDblParamMin(copt_prob *prob, const char *paramName, double *p_dblParam)
int COPT_GetDblParamMax(copt_prob *prob, const char *paramName, double *p_dblParam)描述
以上四个函数,分别可以获取一个(双精度)浮点数参数的
当前值
默认值
最小值
最大值
参量
probCOPT模型。
paramName浮点数参数的名字。
p_dblParam指向浮点数参数的值的指针。
COPT_ResetParam
概要
int COPT_ResetParam(copt_prob *prob)描述
将模型的参数设置重置为默认设置。
参量
probCOPT模型。
COPT_WriteParam
概要
int COPT_WriteParam(copt_prob *prob, const char *parfilename)描述
把用户设置过的所有参数写出到文件中。 这个函数会把所有当前值和默认值不同的参数写到文件中。
参量
probCOPT模型。
parfilename参数文件路径。
COPT_WriteParamStr
概要
int COPT_WriteParamStr(copt_prob *prob, char *str, int nStrSize, int *pReqSize)描述
把用户设置过的所有参数写出到字符流中。
参量
probCOPT模型。
str参数设置字符流。
nStrSize字符流缓冲区的大小。
pReqSize保存参数设置的字符流最小空间大小。
COPT_ReadParam
概要
int COPT_ReadParam(copt_prob *prob, const char *parfilename)描述
从文件中读取参数,并在COPT中设置这些参数。
参量
probCOPT模型。
parfilename参数文件路径。
COPT_ReadParamStr
概要
int COPT_ReadParamStr(copt_prob *prob, const char *strParam)描述
从字符流中读取参数设置,并在COPT中设置这些参数。
参量
probCOPT模型。
strParam参数设置字符流。
获取属性
COPT_GetIntAttr
概要
int COPT_GetIntAttr(copt_prob *prob, const char *attrName, int *p_intAttr)描述
获取一个整数属性的值。
参量
probCOPT模型。
attrName整数属性的名字。
p_intAttr指向整数属性的取值的指针。
COPT_GetDblAttr
概要
int COPT_GetDblAttr(copt_prob *prob, const char *attrName, int *p_dblAttr)描述
获取一个(双精度)浮点数属性的值。
参量
probCOPT模型。
attrName浮点数属性的名字。
p_dblAttr指向浮点数属性的取值的指针。
日志函数
COPT_SetLogFile
概要
int COPT_SetLogFile(copt_prob *prob, char *logfilename)描述
设置求解日志文件。
参量
probCOPT模型。
logfilenameCOPT求解日志文件。
COPT_SetLogCallback
概要
int COPT_SetLogCallback(copt_prob *prob, void (*logcb)(char *msg, void *userdata), void *userdata)描述
设置求解日志Callback函数。
参量
probCOPT模型。
logcb求解日志Callback函数。
userdata用户自定义数据。该数据将无修改地传递给求解日志Callback函数。
整数规划初始解功能函数
COPT_AddMipStart
概要
int COPT_AddMipStart(copt_prob *prob, int num, const int *list, double *colVal)描述
添加整数规划初始解信息。若
list为NULL,则添加前num个变量(列) 的初始解信息。每调用一次该函数,即添加一组初始解信息。参量
probCOPT模型。
num待添加初始解信息的变量(列)个数。
list待添加初始解信息的变量(列)的下标列表。可以为
NULL。
colVal初始解信息数组。
COPT_ReadMst
概要
int COPT_ReadMst(copt_prob *prob, const char *mstfilename)描述
从初始解文件中读取变量的取值,作为整数规划的初始解。
参量
probCOPT模型。
mstfilename初始解文件路径。
COPT_WriteMst
概要
int COPT_WriteMst(copt_prob *prob, const char *mstfilename)描述
将整数规划模型的求解结果或者已有的初始解信息写到初始解文件中。
参量
probCOPT模型。
mstfilename初始解文件路径。
非线性规划初始解功能函数
COPT_SetNLPrimalStart
概要
int COPT_SetNLPrimalStart(copt_prob *prob, int num, const int *list, double *colVal)描述
设置非线性规划初始解信息。若
list为NULL,则设置前num个变量(列) 的初始解信息。参量
probCOPT模型。
num待设置初始解信息的变量(列)个数。
list待设置初始解信息的变量(列)的下标列表。可以为
NULL。
colVal初始解信息数组。
不可行模型IIS计算功能函数
COPT_ComputeIIS
概要
int COPT_ComputeIIS(copt_prob *prob)描述
计算不可行模型的IIS (Irreducible Inconsistent Subsystem) 。
参量
probCOPT模型。
COPT_WriteIIS
概要
int COPT_WriteIIS(copt_prob *prob, const char *iisfilename)描述
把计算得到的IIS模型写出到文件中。
参量
probCOPT模型。
iisfilenameIIS模型文件路径。
COPT_GetColLowerIIS
概要
int COPT_GetColLowerIIS(copt_prob *prob, int num, const int *list, int *colLowerIIS)描述
获取变量下边界的IIS状态。若
list为NULL,则返回前num个变量下边界的IIS状态。参量
probCOPT模型。
num变量的个数。
list变量的下标列表。可以为
NULL。
colLowerIIS返回的变量下边界的IIS状态数组。
COPT_GetColUpperIIS
概要
int COPT_GetColUpperIIS(copt_prob *prob, int num, const int *list, int *colUpperIIS)描述
获取变量上边界的IIS状态。若
list为NULL,则返回前num个变量上边界的IIS状态。参量
probCOPT模型。
num变量的个数。
list变量的下标列表。可以为
NULL。
colUpperIIS返回的变量上边界的IIS状态数组。
COPT_GetRowLowerIIS
概要
int COPT_GetRowLowerIIS(copt_prob *prob, int num, const int *list, int *rowLowerIIS)描述
获取约束下边界的IIS状态。若
list为NULL,则返回前num个约束下边界的IIS状态。参量
probCOPT模型。
num约束的个数。
list约束的下标列表。可以为
NULL。
rowLowerIIS返回的约束下边界的IIS状态数组。
COPT_GetRowUpperIIS
概要
int COPT_GetRowUpperIIS(copt_prob *prob, int num, const int *list, int *rowUpperIIS)描述
获取约束上边界的IIS状态。若
list为NULL,则返回前num个约束上边界的IIS状态。参量
probCOPT模型。
num约束的个数。
list约束的下标列表。可以为
NULL。
rowUpperIIS返回的约束上边界的IIS状态数组。
COPT_GetSOSIIS
概要
int COPT_GetSOSIIS(copt_prob *prob, int num, const int *list, int *sosIIS)描述
获取SOS约束的IIS状态。若
list为NULL, 则返回前num个SOS约束的IIS状态。参量
probCOPT模型。
numSOS约束的个数。
listSOS约束的下标列表。可以为
NULL。
sosIIS返回的SOS约束的IIS状态数组。
COPT_GetIndicatorIIS
概要
int COPT_GetIndicatorIIS(copt_prob *prob, int num, const int *list, int *indicatorIIS)描述
获取Indicator约束的IIS状态。若
list为NULL, 则返回前num个Indicator约束的IIS状态。参量
probCOPT模型。
numIndicator约束的个数。
listIndicator约束的下标列表。可以为
NULL。
indicatorIIS返回的Indicator约束的IIS状态数组。
可行化松弛计算功能函数
COPT_FeasRelax
概要
int COPT_FeasRelax(copt_prob *prob, double *colLowPen, double *colUppPen, double *rowBndPen, double *rowUppPen)描述
计算不可行模型的可行松弛。
参量
probCOPT模型。
colLowPen变量下界的惩罚因子。若为
NULL,则表示不松弛变量下界;若colLowPen中惩罚因子为COPT_INFINITY, 则表示不松弛相应变量的下界。
colUppPen变量上界的惩罚因子。若为
NULL,则表示不松弛变量上界;若colUppPen中惩罚因子为COPT_INFINITY, 则表示不松弛相应变量的下界。
rowBndPen约束边界的惩罚因子。若为
NULL,则表示不松弛约束边界;若rowBndPen中惩罚因子为COPT_INFINITY, 则表示不松弛相应约束的边界。
rowUppPen约束上边界的惩罚因子。若模型中存在双边约束,且
rowUppPen不为NULL,则表示约束上边界的惩罚因子; 若rowUppPen中惩罚因子为COPT_INFINITY,则表示不松弛相应约束的上边界。注意: 一般情况下,设置
rowUppPen为NULL即可。
COPT_WriteRelax
概要
int COPT_WriteRelax(copt_prob *prob, const char *relaxfilename)描述
把计算得到的可行化松弛模型写出到文件中。
参量
probCOPT模型。
relaxfilename可行化松弛模型文件路径。
参数调优功能函数
COPT_Tune
概要
int COPT_Tune(copt_prob *prob)描述
对模型进行参数调优。
参量
probCOPT模型。
COPT_LoadTuneParam
概要
int COPT_LoadTuneParam(copt_prob *prob, int idx)描述
加载指定编号的参数调优结果到模型。
参量
probCOPT模型。
idx参数调优结果的编号。
COPT_ReadTune
概要
int COPT_ReadTune(copt_prob *prob, const char *tunefilename)描述
从调优文件中读取待调优参数组合到模型。
参量
probCOPT模型。
tunefilename调优文件名。
COPT_WriteTuneParam
概要
int COPT_WriteTuneParam(copt_prob *prob, int idx, const char *parfilename)描述
输出指定编号的参数调优结果到参数文件中。
参量
probCOPT模型。
idx参数调优结果的编号。
parfilename参数文件名。
COPT_ReadOrd
概要
int COPT_ReadOrd(copt_prob *prob, const char *ordfilename)描述
按照分支顺序文件格式读取当前模型的变量分支优先级,以复用既定的分支策略。
参量
probCOPT模型。
ordfilename分支顺序文件名。
COPT_WriteOrd
概要
int COPT_WriteOrd(copt_prob *prob, const char *ordfilename)描述
将当前模型的变量分支优先级导出到分支顺序文件(ORD格式),以便保存和复用分支策略。
参量
probCOPT模型。
ordfilenameORD格式文件路径。
回调功能函数
Callback功能函数只要在指定的Callback Context中才能被调用,对应关系罗列如下:
Context |
Methods |
|---|---|
COPT_CBCONTEXT_INCUMBENT |
|
COPT_CBCONTEXT_MIPSOL |
COPT_AddCallbackLazyConstr, COPT_AddCallbackLazyConstrs, COPT_AddCallbackSolution, COPT_GetCallbackInfo |
COPT_CBCONTEXT_MIPRELAX |
COPT_AddCallbackUserCut, COPT_AddCallbackUserCuts, COPT_AddCallbackSolution, COPT_GetCallbackInfo |
COPT_CBCONTEXT_MIPNODE |
COPT_AddLazyConstr
概要
int COPT_AddLazyConstr(
copt_prob *prob,
int nRowMatCnt,
const int *rowMatIdx,
const double *rowMatElem,
char cRowSense,
double dRowBound,
double dRowUpper,
const char *rowName)描述
向模型中添加一个惰性约束。
参量
probCOPT模型。
nRowMatCnt惰性约束系数矩阵中的非零元素的数量。
rowMatIdx惰性约束系数矩阵中的非零元素的列编号。
rowMatElem惰性约束系数矩阵中的非零元素的数值。
cRowSense惰性约束类型。
可取值详见 常量:约束类型
如果
cRowSense是 0, 则dRowBound和dRowUpper会被当做 约束的上下边界。这是我们推荐的定义约束的方式。如果
cRowSense是有意义的量, 则dRowBound和dRowUpper会被当做RHS 和 range 。 在此情况下,dRowUpper仅在约束为COPT_RANGE类型时才会用到。且在此时,上下界分别为:下界
dRowBound - dRowUpper上界
dRowBound
dRowBound惰性约束的下界或RHS。
dRowUpper惰性约束的上界或 range 。
rowName惰性约束的名称。可以传入
NULL。
COPT_AddLazyConstrs
概要
int COPT_AddLazyConstrs(
copt_prob *prob,
int nAddRow,
const int *rowMatBeg,
const int *rowMatCnt,
const int *rowMatIdx,
const double *rowMatElem,
const char *rowSense,
const double *rowBound,
const double *rowUpper,
char const *const *rowNames)描述
向模型中批量添加多个惰性约束。
参量
probCOPT模型。
nAddRow新添加的惰性约束个数(系数矩阵行数)。
rowMatBeg, rowMatCnt, rowMatIdx和rowMatElem以行压缩存储格式提供惰性约束的系数矩阵。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
rowSense惰性约束类型。
可取值详见 常量:约束类型
如果
cRowSense是 0, 则dRowBound和dRowUpper会被当做 约束的上下边界。这是我们推荐的定义约束的方式。如果
cRowSense是有意义的量, 则dRowBound和dRowUpper会被当做RHS 和 range 。 在此情况下,dRowUpper仅在约束为COPT_RANGE类型时才会用到。且在此时,上下界分别为:下界
dRowBound - dRowUpper上界
dRowBound
rowBound惰性约束的下界或RHS。
rowUpper惰性约束的上界或 range 。
rowNames惰性约束的名称。可以传入
NULL。
COPT_AddUserCut
概要
int COPT_AddUserCut(
copt_prob* prob,
int nRowMatCnt,
const int* rowMatIdx,
const double* rowMmatElem,
char cRowSense,
double dRowBound,
double dRowUpper,
const char* rowName)描述
向模型中添加一个割平面。
参量
probCOPT模型。
nRowMatCnt割平面系数矩阵中的非零元素的数量。
rowMatIdx割平面系数矩阵中的非零元素的列编号。
rowMmatElem割平面系数矩阵中的非零元素的数值。
cRowSense割平面约束类型。
可取值详见 常量:约束类型
如果
cRowSense是 0, 则dRowBound和dRowUpper会被当做 约束的上下边界。这是我们推荐的定义约束的方式。如果
cRowSense是有意义的量, 则dRowBound和dRowUpper会被当做RHS 和 range 。 在此情况下,dRowUpper仅在约束为COPT_RANGE类型时才会用到。且在此时,上下界分别为下界
dRowBound - dRowUpper上界
dRowBound
dRowBound割平面约束的下界或RHS。
dRowUpper割平面约束的上界或 range 。
rowName割平面的名称。可以传入
NULL。
COPT_AddUserCuts
概要
int COPT_CALL COPT_AddUserCuts(
copt_prob *prob,
int nAddRow,
const int *rowMatBeg,
const int *rowMatCnt,
const int *rowMatIdx,
const double *rowMatElem,
const char *rowSense,
const double *rowBound,
const double *rowUpper,
char const *const *rowNames)描述
向模型中批量添加多个割平面。
参量
probCOPT模型。
nAddRow新添加的割平面个数(系数矩阵行数)。
rowMatBeg, rowMatCnt, rowMatIdx和rowMatElem以行压缩存储格式提供割平面的系数矩阵。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
rowSense割平面约束类型。
可取值详见 常量:约束类型
如果
cRowSense是 0, 则dRowBound和dRowUpper会被当做 约束的上下边界。这是我们推荐的定义约束的方式。如果
cRowSense是有意义的量, 则dRowBound和dRowUpper会被当做RHS 和 range 。 在此情况下,dRowUpper仅在约束为COPT_RANGE类型时才会用到。且在此时,上下界分别为:下界
dRowBound - dRowUpper上界
dRowBound
rowBound割平面约束的下界或RHS。
rowUpper割平面约束的上界或 range 。
rowNames割平面的名称。可以传入
NULL。
COPT_SetCallback
概要
int COPT_SetCallback(
copt_prob *prob,
int (COPT_CALL *cb)(copt_prob *prob, void *cbdata, int cbctx, void *userdata),
int cbctx,
void *userdata)描述
在COPT模型中,设置用户自定义的回调函数。
参量
COPT_GetCallbackInfo
概要
int COPT_GetCallbackInfo(void *cbdata, const char* cbinfo, void *p_val)描述
获取指定的回调信息值。
参量
cbdataCOPT 传递给回调的
cbdata参数。此参数必须未经修改地从用户定义的回调函数传递到
COPT_GetCallbackInfo()。
cbinfo待获取的回调信息名称。可取值详见 信息:Callback相关信息 。
p_val指向回调信息值的指针。
COPT_AddCallbackSolution
概要
int COPT_AddCallbackSolution(void *cbdata, const double *sol, double* p_objval)描述
为指定变量设置自定义的可行解。
参量
cbdataCOPT 传递给回调的
cbdata参数。此参数必须未经修改地从用户定义的回调函数传递到
COPT_AddCallbackSolution()。
sol可行解的向量。
p_objval指向可行解目标函数值的指针。
COPT_AddCallbackUserCut
概要
int COPT_AddCallbackUserCut(
void *cbdata,
int nRowMatCnt,
const int *rowMatIdx,
const double *rowMatElem,
char cRowSense,
double dRowRhs)描述
向模型中添加一个割平面。
参量
cbdataCOPT 传递给回调的
cbdata参数。此参数必须未经修改地从用户定义的回调函数传递到
COPT_AddCallbackUserCut()。
nRowMatCnt割平面系数矩阵中的非零元素的数量。
rowMatIdx割平面系数矩阵中的非零元素的列编号。
rowMatElem割平面系数矩阵中的非零元素的数值。
cRowSense割平面约束类型。支持
COPT_LESS_EQUAL,COPT_GREATER_EQUAL,COPT_EQUAL和COPT_FREE。通过回调函数添加的割平面仅支持单边。
dRowRhs割平面约束的RHS。
COPT_AddCallbackUserCuts
概要
int COPT_AddCallbackUserCuts(
void *cbdata,
int nAddRow,
const int *rowMatBeg,
const int *rowMatCnt,
const int *rowMatIdx,
const double *rowMatElem,
const char *rowSense,
const double *rowRhs)描述
向模型中批量添加多个割平面。
参量
cbdataCOPT 传递给回调的
cbdata参数。此参数必须未经修改地从用户定义的回调函数传递到
COPT_AddCallbackUserCuts()。
nAddRow新添加的割平面个数(系数矩阵行数)。
rowMatBeg, rowMatCnt, rowMatIdx和rowMatElem以行压缩存储格式提供割平面约束的系数矩阵。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
rowSense割平面约束类型。支持
COPT_LESS_EQUAL,COPT_GREATER_EQUAL,COPT_EQUAL和COPT_FREE。通过回调函数添加的割平面仅支持单边。
rowRhs割平面约束的RHS。
COPT_AddCallbackLazyConstr
概要
int COPT_AddCallbackLazyConstr(
void *cbdata,
int nRowMatCnt,
const int *rowMatIdx,
const double *rowMatElem,
char cRowSense,
double dRowRhs)描述
向模型中添加一个惰性约束。
参量
cbdataCOPT 传递给回调的
cbdata参数。此参数必须未经修改地从用户定义的回调函数传递到
COPT_AddCallbackLazyConstr()。
nRowMatCnt惰性约束系数矩阵中的非零元素的数量。
当
nRowMatCnt<=0时,则表示MIP可行解会被直接拒绝,此时无需添加惰性约束。
rowMatIdx惰性约束系数矩阵中的非零元素的列编号。
rowMatElem惰性约束系数矩阵中的非零元素的数值。
cRowSense惰性约束类型。支持
COPT_LESS_EQUAL,COPT_GREATER_EQUAL,COPT_EQUAL和COPT_FREE。通过回调函数添加的惰性约束仅支持单边。
dRowRhs惰性约束的RHS。
COPT_AddCallbackLazyConstrs
概要
int COPT_AddCallbackLazyConstrs(
void *cbdata,
int nAddRow,
const int *rowMatBeg,
const int *rowMatCnt,
const int *rowMatIdx,
const double *rowMatElem,
const char *rowSense,
const double *rowRhs)描述
向模型中批量添加多个惰性约束。
参量
cbdataCOPT 传递给回调的
cbdata参数。此参数必须未经修改地从用户定义的回调函数传递到
COPT_AddCallbackLazyConstrs()。
nAddRow新添加的惰性约束个数(系数矩阵行数)。
当
nAddRow<=0时,则表示MIP可行解会被直接拒绝,此时无需添加惰性约束。
rowMatBeg, rowMatCnt, rowMatIdx和rowMatElem以行压缩存储格式提供惰性约束的系数矩阵。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见
COPT_LoadProb的 其他信息 。
rowSense惰性约束类型。支持
COPT_LESS_EQUAL,COPT_GREATER_EQUAL,COPT_EQUAL和COPT_FREE。通过回调函数添加的惰性约束仅支持单边。
rowRhs惰性约束的RHS。
其他API函数
COPT_GetRetcodeMsg
概要
int COPT_GetRetcodeMsg(int code, char *buff, int buffSize)描述
获取解释COPT返回值的字符串。
参量
code函数返回值。
buff用以获取字符串的数组。
buffSize上述数组的大小。
COPT_Interrupt
概要
int COPT_Interrupt(copt_prob *prob)描述
中断当前求解的模型。
参量
probCOPT模型。
多目标模型相关函数
COPT_MultiObjSetColObj
概要
int COPT_MultiObjSetColObj(
copt_prob *prob,
int iObj,
int num,
const int *list,
const double *colObj)描述
设置多目标优化模型中指定编号目标函数中的线性目标。
注意:此设置为覆盖操作。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
num线性目标系数的数目。
list线性目标系数的下标。
colObj线性目标系数。
COPT_MultiObjGetColObj
概要
int COPT_MultiObjGetColObj(
copt_prob *prob,
int iObj,
int num,
const int *list,
double *colObj)描述
获取多目标优化模型中指定编号目标函数中的线性目标。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
num线性目标系数的数目。
list线性目标系数的下标。
colObj线性目标系数。
COPT_MultiObjDelColObj
概要
int COPT_MultiObjDelColObj(
copt_prob *prob,
int iObj)描述
删除多目标优化模型中指定编号目标函数中的线性目标。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
COPT_MultiObjSetObjSense
概要
int COPT_MultiObjSetObjSense(
copt_prob *prob,
int iObj,
int iObjSense)描述
设置多目标优化模型中指定编号目标函数中的优化方向。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
iObjSense目标函数的优化方向。可能的取值有
COPT_MAXIMIZE或COPT_MINIMIZE。
COPT_MultiObjSetObjConst
概要
int COPT_MultiObjSetObjConst(
copt_prob *prob,
int iObj,
double dObjConst)描述
设置多目标优化模型中指定编号目标函数中的常数项。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
dObjConst目标函数的常数项。
COPT_MultiObjSetObjParam
概要
int COPT_MultiObjSetObjParam(
copt_prob *prob,
int iObj,
const char *paramName,
double dblParam)描述
设置多目标优化模型中指定编号的目标函数的参数。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
paramName目标函数的参数名称。
可取值为:
COPT_MULTIOBJ_PRIORITY,COPT_MULTIOBJ_WEIGHT,COPT_MULTIOBJ_ABSTOL,COPT_MULTIOBJ_RELTOL。
dblParam目标函数的参数值。
COPT_MultiObjGetObjParam
概要
int COPT_MultiObjGetObjParam(
copt_prob *prob,
int iObj,
const char *paramName,
double *p_dblParam)描述
获取多目标优化模型中指定编号的目标函数的参数。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
paramName目标函数的参数名称。
可取值为:
COPT_MULTIOBJ_PRIORITY,COPT_MULTIOBJ_WEIGHT,COPT_MULTIOBJ_ABSTOL,COPT_MULTIOBJ_RELTOL。
p_dblParam指向目标函数参数值的指针。
COPT_MultiObjResetObjParam
概要
int COPT_MultiObjResetObjParam(
copt_prob *prob,
int iObj)描述
重置多目标优化模型中指定编号的目标函数所有参数为默认值。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
COPT_MultiObjSetIntParam
概要
int COPT_MultiObjSetIntParam(
copt_prob *prob,
int iObj,
const char *paramName,
int intParam)描述
设置多目标优化中指定编号目标函数对应模型的整型求解参数。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
paramName求解参数名称。
intParam求解参数值。
COPT_MultiObjGetIntParam
概要
int COPT_MultiObjGetIntParam(
copt_prob *prob,
int iObj,
const char *paramName,
int *p_intParam)描述
获取多目标优化中指定编号目标函数对应模型的整型求解参数。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
paramName求解参数的名称。
p_intParam指向整型求解参数值的指针。
COPT_MultiObjSetDblParam
概要
int COPT_MultiObjSetDblParam(
copt_prob *prob,
int iObj,
const char *paramName,
int dblParam)描述
设置多目标优化中指定编号目标函数对应模型的浮点型求解参数。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
paramName求解参数名称。
dblParam求解参数值。
COPT_MultiObjGetDblParam
概要
int COPT_MultiObjGetDblParam(
copt_prob *prob,
int iObj,
const char *paramName,
int *p_dblParam)描述
获取多目标优化中指定编号目标函数对应模型的浮点型求解参数。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
paramName求解参数的名称。
p_dblParam指向浮点型求解参数值的指针。
COPT_MultiObjResetParam
概要
int COPT_MultiObjResetParam(
copt_prob *prob,
int iObj)描述
将多目标优化中指定编号目标函数对应模型的全部求解参数重置为默认设置。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
COPT_MultiObjGetIntAttr
概要
int COPT_MultiObjGetIntAttr(
copt_prob *prob,
int iObj,
const char *attrName,
int *p_intAttr)描述
获取多目标优化中指定编号目标函数的整型属性。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
attrName属性名称。
可取值为:
COPT_INTATTR_HASQOBJ,COPT_INTATTR_HASNLOBJ,COPT_INTATTR_OBJSENSE。
p_intAttr指向整型属性值的指针。
COPT_MultiObjGetDblAttr
概要
int COPT_MultiObjGetDblAttr(
copt_prob *prob,
int iObj,
const char *attrName,
int *p_dblAttr)描述
获取多目标优化中指定编号目标函数对应模型的浮点型属性。
参量
prob指向已创建模型的指针。
iObj目标函数的编号。
attrName属性名称。
可取值为:
COPT_DBLATTR_LPOBJVAL,COPT_DBLATTR_BESTOBJ,COPT_DBLATTR_OBJCONST。
p_dblAttr指向浮点型属性值的指针。
COPT_MultiObjGetPoolObjVal
概要
int COPT_MultiObjGetPoolObjVal(
copt_prob *prob,
int iObj,
int iSol,
double *p_objVal)描述
获取解池中第
iSol个解对应的编号iObj的目标函数的值。参量
prob指向已创建模型的指针。
iObj目标函数的编号。
iSol解池中解的编号。
p_objVal指向目标函数值的指针。