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_TYPE1
SOS1约束
COPT_SOS_TYPE2
SOS2约束
Indicator约束类型
Indicator约束是COPT中表示逻辑关系的条件约束,用于刻画0-1变量 \(y\) 的取值和线性约束 \(a^{T}x \leq b\) 是否被满足的关系。 目前,COPT支持三种Indicator约束:
COPT_INDICATOR_IF
If-Then条件:
如果 \(y=f\) ,则线性约束满足;
如果 \(y\ne f\) ,则线性约束无效(可以被违反)。
COPT_INDICATOR_ONLYIF
Only-If条件:
如果线性约束 \(a^{T}x \leq b\) 满足,则 \(y=f\) ;
如果线性约束 \(a^{T}x \leq b\) 不满足,则 \(y\) 可以取值为0或1。
COPT_INDICATOR_IFANDONLYIF
If-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
用户中止。
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松弛问题完成时,触发回调函数。
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_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_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_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_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。仅适用于线性规划模型。
对偶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_BESTOBJ
or"BestObj"
浮点数信息。
当前最优目标函数值。
COPT_CBINFO_BESTBND
or"BestBnd"
浮点数信息。
当前最优目标下界。
COPT_CBINFO_HASINCUMBENT
or"HasIncumbent"
整数信息。
当前是否有最优可行解。
COPT_CBINFO_INCUMBENT
or"Incumbent"
浮点数信息。
当前最优可行解。
COPT_CBINFO_MIPCANDIDATE
or"MipCandidate"
浮点数信息。
当前可行解。
COPT_CBINFO_MIPCANDOBJ
or"MipCandObj"
浮点数信息。
当前可行解对应的目标函数值。
COPT_CBINFO_RELAXSOLUTION
or"RelaxSolution"
浮点数信息。
当前LP松弛问题的解。
COPT_CBINFO_RELAXSOLOBJ
or"RelaxSolObj"
浮点数信息。
当前LP松弛问题的目标函数值。
COPT_CBINFO_NODESTATUS
or"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_MAX
COPT_INTPARAM_BARITERLIMIT
或"BarIterLimit"
整数参数。
内点法求解时的迭代数限制。
默认值 500
最小值 0
最大值
INT_MAX
COPT_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_RELGAP
或"RelGap"
浮点参数。
整数规划的最优相对容差。
默认值 1e-4
最小值 0
最大值
DBL_MAX
COPT_DBLPARAM_ABSGAP
或"AbsGap"
浮点参数。
整数规划的最优绝对容差。
默认值 1e-6
最小值 0
最大值
DBL_MAX
预求解相关
COPT_INTPARAM_PRESOLVE
或"Presolve"
整数参数。
预求解的强度。
默认值 -1
可选值
-1: 自动选择。
0: 关闭。
1: 少量快速。
2: 正常。
3: 多多益善。
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(ND)算法。
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_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_MAX
COPT_INTPARAM_NODECUTROUNDS
或"NodeCutRounds"
整数参数。
搜索树节点生成割平面的次数。
默认值 -1(自动选择)
最小值 -1(自动选择)
最大值
INT_MAX
COPT_INTPARAM_HEURLEVEL
或"HeurLevel"
整数参数。
启发式算法的强度。
默认值 -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: 多多益善。
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_MAX
并行计算相关
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_LAZYCONSTRAINTS
or"LazyConstraints"
整数参数。
是否将惰性约束加入模型中。
默认值 -1
可选值
-1: 自动选择。
0: 否。
1: 是。
注意:
该参数仅对MIP模型有效。
GPU计算相关
COPT_INTPARAM_GPUMODE
或"GPUMode"
整数参数。
GPU求解模式的使用方式。
默认值 -1
可选值
-1: 自动选择。
0: 强制使用CPU模式。
1: 使用NVIDIA GPU。
COPT_INTPARAM_GPUDEVICE
或"GPUDevice"
整数参数。
使用指定编号的GPU(当运行机器有多个GPU存在的情形下)。
默认值 -1(自动选择)
最小值 -1(自动选择)
最大值
INT_MAX
COPT_DBLPARAM_PDLPTOL
或"PDLPTol"
浮点参数。
一阶算法(PDLP)的收敛容差。
默认值 1e-6
最小值 1e-12
最大值 1e-4
其它参数
COPT_INTPARAM_LOGGING
或"Logging"
整数参数。
是否显示求解日志。
默认值 1
可选值
0: 不显示求解日志。
1: 显示求解日志。
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客户端配置参数。
参量
config
COPT客户端配置。
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
失败时使用这个函数。参量
env
COPT求解环境。
buff
用以获取字符串的数组。
buffSize
上述数组的大小。
COPT_CreateProb
概要
int COPT_CreateProb(copt_env *env, copt_prob **p_prob)
描述
创建一个空的COPT模型。
参量
env
COPT求解环境。
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模型数据(不包括回调函数)。
参量
prob
COPT模型。
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模型。
参量
prob
COPT模型。
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
变量类型。
如果不提供这个数组,则所有的变量都是连续变量。
colLower
andcolUpper
变量的上下边界。
如果不提供下边界
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 。
colNames
androwNames
变量和约束的名字。可以不提供。
其他信息
列压缩存储(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)
描述
添加一个变量(列)。
参量
prob
COPT模型。
dColObj
变量的目标函数系数。
nColMatCnt
此列系数矩阵中的非零元素的数量。
colMatIdx
此列系数矩阵中的非零元素的行编号。
colMatElem
此列系数矩阵中的非零元素的数值。
cColType
变量类型。
dColLower
anddColUpper
变量的上下边界。
colName
变量的名字。可以传入
NULL
。
COPT_AddPSDCol
概要
int COPT_AddPSDCol(copt_prob *prob, int colDim, const char *name)
描述
添加一个半定变量。
参量
prob
COPT模型。
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)
描述
添加一个约束(行)。
参量
prob
COPT模型。
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
个变量(列)。参量
prob
COPT模型。
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
个半定变量。参量
prob
COPT模型。
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
个新约束(行)。参量
prob
COPT模型。
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约束,则模型为整数规划模型。参量
prob
COPT模型。
nAddSOS
新添加的SOS约束个数。
sosType
SOS约束的类型。
sosMatBeg, sosMatCnt, sosMatIdx
和sosMatWt
以行压缩存储格式提供SOS约束的成员。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见
COPT_LoadProb
的 其他信息 。
sosMatWt
SOS约束中各成员的权重。可以为
NULL
。
COPT_AddCones
概要
int COPT_AddCones(
copt_prob *prob,
int nAddCone,
const int *coneType,
const int *coneBeg,
const int *coneCnt,
const int *coneIdx)
描述
添加
nAddCone
个二阶锥约束。参量
prob
COPT模型。
nAddCone
新添加的二阶锥约束个数。
coneType
二阶锥约束的类型。
coneBeg, coneCnt, coneIdx
以行压缩存储格式提供二阶锥约束的成员。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见
COPT_LoadProb
的 其他信息 。
COPT_AddExpCones
概要
int COPT_AddExpCones(
copt_prob *prob,
int nAddCone,
const int *coneType,
const int *coneIdx)
描述
添加
nAddCone
个指数锥约束。参量
prob
COPT模型。
nAddCone
新添加的指数锥约束个数。
coneType
指数锥约束的类型。
coneIdx
构成指数锥约束的变量的下标数组。
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)
描述
添加一个二次约束。
注意: 目前仅支持求解凸二次约束。
参量
prob
COPT模型。
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)
描述
添加一个半定约束。
参量
prob
COPT模型。
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约束。
参量
prob
COPT模型。
nDim
LMI约束中对称矩阵的维度。
nLMIMatCnt
LMI约束中系数对称矩阵的个数。
colIdx
LMI约束中标量变量的下标。
symMatIdx
LMI约束中系数对称矩阵的下标。
constMatIdx
LMI约束中常数项对称矩阵的下标。
name
LMI约束的名称。可以传入
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约束,则模型为整数规划模型。
参量
prob
COPT模型。
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约束,则模型为整数规划模型。
参量
prob
COPT模型。
nInd
Indicator约束的个数。
indType
Indicator约束的类型。可取值请参考 Indicator约束类型 。
binColIdx
二进制类型Indicator变量(列)的下标。
binColVal
二进制类型Indicator变量(列)的取值。
rowMatBeg, rowMatCnt, rowMatIdx
和rowMatElem
以行压缩存储格式提供线性约束(行)系数矩阵。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见
COPT_LoadProb
的 其他信息 。
cRowSense
线性约束(行)类型。可选取值为:
COPT_EQUAL
、COPT_LESS_EQUAL
和COPT_GREATER_EQUAL
。
dRowBound
线性约束(行)的右端项。
indNames
Indicator约束的名称。
COPT_AddSymMat
概要
int COPT_AddSymMat(copt_prob *prob, int ndim, int nelem, int *rows, int *cols, double *elems)
描述
添加一个对称矩阵(传入下三角部分即可)。
参量
prob
COPT模型。
ndim
对称矩阵的维度。
nelem
对称矩阵的非零元数目。
rows
对称矩阵非零元素的行下标。
cols
对称矩阵非零元素的列下标。
elems
对称矩阵的非零元素。
COPT_DelCols
概要
int COPT_DelCols(copt_prob *prob, int num, const int *list)
描述
删除
num
个变量(列)。参量
prob
COPT模型。
num
要删除的变量个数。
list
要删除的变量下标列表。
COPT_DelPSDCols
概要
int COPT_DelPSDCols(copt_prob *prob, int num, const int *list)
描述
删除
num
个半定变量。参量
prob
COPT模型。
num
要删除的半定变量个数。
list
要删除的半定变量下标列表。
COPT_DelRows
概要
int COPT_DelRows(copt_prob *prob, int num, const int *list)
描述
删除
num
个约束(行)。参量
prob
COPT模型。
num
要删除的约束个数。
list
要删除的约束下标列表。
COPT_DelSOSs
概要
int COPT_DelSOSs(copt_prob *prob, int num, const int *list)
描述
删除
num
个SOS约束 。参量
prob
COPT模型。
num
要删除的SOS约束个数。
list
要删除的SOS约束下标列表。
COPT_DelCones
概要
int COPT_DelCones(copt_prob *prob, int num, const int *list)
描述
删除
num
个二阶锥约束 。参量
prob
COPT模型。
num
要删除的二阶锥约束个数。
list
要删除的二阶锥约束下标列表。
COPT_DelExpCones
概要
int COPT_DelExpCones(copt_prob *prob, int num, const int *list)
描述
删除
num
个指数锥约束 。参量
prob
COPT模型。
num
要删除的指数锥约束个数。
list
要删除的指数锥约束下标列表。
COPT_DelQConstrs
概要
int COPT_DelQConstrs(copt_prob *prob, int num, const int *list)
描述
删除
num
个二次约束 。参量
prob
COPT模型。
num
要删除的二次约束个数。
list
要删除的二次约束下标列表。
COPT_DelPSDConstrs
概要
int COPT_DelPSDConstrs(copt_prob *prob, int num, const int *list)
描述
删除
num
个半定约束 。参量
prob
COPT模型。
num
要删除的半定约束个数。
list
要删除的半定约束下标列表。
COPT_DelLMIConstrs
概要
int COPT_DelLMIConstrs(copt_prob *prob, int num, const int *list)
描述
删除
num
个LMI约束 。参量
prob
COPT模型。
num
要删除的LMI约束个数。
list
要删除的LMI约束下标列表。
COPT_DelIndicators
概要
int COPT_DelIndicators(copt_prob *prob, int num, const int *list)
描述
删除
num
个Indicator约束 。参量
prob
COPT模型。
num
要删除的Indicator约束个数。
list
要删除的Indicator约束下标列表。
COPT_DelQuadObj
概要
int COPT_DelQuadObj(copt_prob *prob)
描述
删除二次目标函数中的二次项。
参量
prob
COPT模型。
COPT_DelPSDObj
概要
int COPT_DelPSDObj(copt_prob *prob)
描述
删除目标函数中的半定项。
参量
prob
COPT模型。
COPT_SetElem
概要
int COPT_SetElem(copt_prob *prob, int iCol, int iRow, double newElem)
描述
设置指定行列对应的系数。
注意: 若
newElem
的值小于或者等于参数MatrixTol
的值, 则将被设置为0。参量
prob
COPT模型。
iCol
列的下标。
iRow
行的下标。
newElem
待设置的新系数。
COPT_SetElems
概要
int COPT_SetElems(copt_prob *prob, int nelem, const int *cols, const int *rows, const double *elems)
描述
批量设置指定行列对应的系数。
注意: 列和行的索引对不能重复出现。
参量
prob
COPT模型。
nelem
待设置的新系数个数。
cols
列的下标。
rows
行的下标。
elems
待设置的新系数取值。
COPT_SetPSDElem
概要
int COPT_SetPSDElem(copt_prob *prob, int iCol, int iRow, int newIdx)
描述
设置指定半定约束中半定项的对称矩阵下标。
参量
prob
COPT模型。
iCol
半定变量的下标。
iRow
半定约束的下标。
newIdx
待设置的对称矩阵新下标。
COPT_SetLMIElem
概要
int COPT_SetLMIElem(copt_prob *prob, int iCol, int iRow, int newIdx)
描述
设置指定LMI约束中指定变量的系数对称矩阵下标。
参量
prob
COPT模型。
iCol
标量变量的下标。
iRow
LMI约束的下标。
newIdx
指向新的系数对称矩阵下标的指针。
COPT_SetObjSense
概要
int COPT_SetObjSense(copt_prob *prob, int iObjSense)
描述
设定(修改)优化方向。
参量
prob
COPT模型。
iObjSense
优化方向。可能的取值有
COPT_MAXIMIZE
或COPT_MINIMIZE
。
COPT_SetObjConst
概要
int COPT_SetObjConst(copt_prob *prob, double dObjConst)
描述
设定目标函数的常数项。
参量
prob
COPT模型。
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
个变量(列)的目标函数参数
变量类型
下边界
上边界
名字
参量
prob
COPT模型。
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
个半定变量的名字。参量
prob
COPT模型。
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
个约束(行)的下边界
上边界
名字
参量
prob
COPT模型。
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
个二次约束的类型
右端项
名字
参量
prob
COPT模型。
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
个半定约束的下边界
上边界
名字
参量
prob
COPT模型。
num
要修改的半定约束个数。
list
要修改的半定约束下标列表。
lower
列表中出现的各个半定约束的新下界。
upper
列表中出现的各个半定约束的新上界。
names
列表中出现的各个半定约束的新名字。
COPT_SetLMIConstrRhs
概要
int COPT_SetLMIConstrRhs(copt_prob *prob, int num, const int *list, const int *newIdx)
描述
修改
num
个LMI约束的常数项对称矩阵。参量
prob
COPT模型。
num
要修改的LMI约束个数。
list
要修改的LMI约束下标列表。
newIdx
待设置的常数项对称矩阵新下标。
COPT_SetLMIConstrNames
概要
int COPT_SetLMIConstrNames(copt_prob *prob, int num, const int *list, char const *const *names)
描述
修改
num
个LMI约束的名称。参量
prob
COPT模型。
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约束(行)的名称。参量
prob
COPT模型。
num
要修改的Indicator约束个数。
list
要修改的Indicator约束下标列表。
names
列表中出现的各个Indicator约束的新名称。
COPT_ReplaceColObj
概要
int COPT_ReplaceColObj(copt_prob *prob, int num, const int *list, const double *obj)
描述
使用指定的参数构成的目标函数替换之前的目标函数。
参量
prob
COPT模型。
num
要修改的变量个数。
list
要修改的变量列表。
obj
列表中出现的各个变量的新目标函数参数。
COPT_ReplacePSDObj
概要
int COPT_ReplacePSDObj(copt_prob *prob, int num, const int *list, const int *idx)
描述
使用指定的半定项替换目标函数中的半定项。
参量
prob
COPT模型。
num
要修改的半定项数目。
list
要修改的半定变量列表。
idx
列表中出现的各个半定变量的对称矩阵新下标。
COPT_SetQuadObj
概要
int COPT_SetQuadObj(copt_prob *prob, int num, int *qRow, int *qCol, double *qElem)
描述
设置二次目标函数中的二次项。
参量
prob
COPT模型。
num
二次目标函数中非零二次项数目。
qRow
二次目标函数中非零二次项行下标。
qCol
二次目标函数中非零二次项列下标。
qElem
二次目标函数中非零二次项系数。
COPT_SetPSDObj
概要
int COPT_SetPSDObj(copt_prob *prob, int iCol, int newIdx)
描述
设置目标函数中的半定项。
参量
prob
COPT模型。
iCol
目标函数中半定项的半定变量下标。
newIdx
目标函数中半定项的对称矩阵下标。
读入与输出模型
COPT_ReadMps
概要
int COPT_ReadMps(copt_prob *prob, const char *mpsfilename)
描述
从MPS文件中读取模型。
参量
prob
COPT模型。
mpsfilename
MPS文件路径。
COPT_ReadLp
概要
int COPT_ReadLp(copt_prob *prob, const char *lpfilename)
描述
从LP文件中读取模型。
参量
prob
COPT模型。
lpfilename
LP文件路径。
COPT_ReadSDPA
概要
int COPT_ReadSDPA(copt_prob *prob, const char *sdpafilename)
描述
从SDPA文件中读取模型。
参量
prob
COPT模型。
sdpafilename
SDPA文件路径。
COPT_ReadCbf
概要
int COPT_ReadCbf(copt_prob *prob, const char *cbffilename)
描述
从CBF文件中读取模型。
参量
prob
COPT模型。
cbffilename
CBF文件路径。
COPT_ReadBin
概要
int COPT_ReadBin(copt_prob *prob, const char *binfilename)
描述
从COPT二进制文件中读取模型。
参量
prob
COPT模型。
binfilename
COPT二进制文件路径。
COPT_ReadBlob
概要
int COPT_ReadBlob(copt_prob *prob, void *blob, COPT_INT64 len)
描述
从COPT序列化数据中读取模型。
参量
prob
COPT模型。
blob
序列化数据。
len
序列化数据长度。
COPT_WriteMps
概要
int COPT_WriteMps(copt_prob *prob, const char *mpsfilename)
描述
把内部的COPT模型写出到MPS格式文件中。
参量
prob
COPT模型。
mpsfilename
MPS格式文件路径。
COPT_WriteMpsStr
概要
int COPT_WriteMpsStr(copt_prob *prob, char *str, int nStrSize, int *pReqSize)
描述
把内部的COPT模型以MPS格式写出到字符流中。
参量
prob
COPT模型。
str
MPS格式模型字符流。
nStrSize
字符流缓冲区的大小。
pReqSize
保存模型的字符流最小空间大小。
COPT_WriteLp
概要
int COPT_WriteLp(copt_prob *prob, const char *lpfilename)
描述
把内部的COPT模型写出到LP格式文件中。
参量
prob
COPT模型。
lpfilename
LP格式文件路径。
COPT_WriteCbf
概要
int COPT_WriteCbf(copt_prob *prob, const char *cbffilename)
描述
把内部的COPT模型写出到CBF格式文件中。
参量
prob
COPT模型。
cbffilename
CBF格式文件路径。
COPT_WriteBin
概要
int COPT_WriteBin(copt_prob *prob, const char *binfilename)
描述
把内部的COPT模型写出到COPT二进制格式文件中。
参量
prob
COPT模型。
binfilename
COPT二进制格式文件路径。
COPT_WriteBlob
概要
int COPT_WriteBlob(copt_prob *prob, int tryCompress, void **p_blob, COPT_INT64 *pLen)
描述
把内部的COPT模型写出到COPT序列化数据中。
参量
prob
COPT模型。
tryCompress
是否尝试压缩数据。
p_blob
指向序列化数据的输出指针。
pLen
指向序列化数据的长度的指针。
求解和获取解
COPT_SolveLp
概要
int COPT_SolveLp(copt_prob *prob)
描述
求解线性规划模型、二阶锥规划模型、二次规划模型、二次约束规划模型或半定规划模型。 若模型为整数规划模型,则忽略变量的整数限制,以及SOS约束和Indicator约束, 将其作为连续模型求解。
参量
prob
COPT模型。
COPT_Solve
概要
int COPT_Solve(copt_prob *prob)
描述
求解线性规划、二阶锥规划、二次规划、二次约束规划、半定规划或者整数规划模型。
参量
prob
COPT模型。
COPT_GetSolution
概要
int COPT_GetSolution(copt_prob *prob, double *colVal)
描述
获取整数规划模型的解。
参量
prob
COPT模型。
colVal
变量的取值。
COPT_GetPoolObjVal
概要
int COPT_GetPoolObjVal(copt_prob *prob, int iSol, double *p_objVal)
描述
获取解池中第
iSol
个解的目标函数值。参量
prob
COPT模型。
iSol
解的索引。
p_objVal
指向目标函数值的指针。
COPT_GetPoolSolution
概要
int COPT_GetPoolSolution(copt_prob *prob, int iSol, int num, const int *list, double *colVal)
描述
获取解池中第
iSol
个解。参量
prob
COPT模型。
iSol
解的索引。
num
获取解的变量(列)的个数。
list
获取解的变量(列)的下标列表。可以为
NULL
。
colVal
返回获取的解的数组。
COPT_GetLpSolution
概要
int COPT_GetLpSolution(copt_prob *prob, double *value, double *slack, double *rowDual, double *redCost)
描述
获取线性规划、二阶锥规划、二次规划、二次约束规划和半定规划中变量的解。
注意: 对于半定规划,获取半定变量的解请使用
COPT_GetPSDColInfo
函数。参量
prob
COPT模型。
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)
描述
设置线性规划的解。
参量
prob
COPT模型。
value
变量的取值。
slack
松弛变量的取值。
rowDual
对偶变量的取值。
redCost
变量的Reduced cost。
COPT_GetBasis
概要
int COPT_GetBasis(copt_prob *prob, int *colBasis, int *rowBasis)
描述
获取线性规划的基状态。
参量
prob
COPT模型。
colBasis
和rowBasis
分别是变量和约束的基状态。 请参考常量部分关于基状态的种类及其含义。
COPT_SetBasis
概要
int COPT_SetBasis(copt_prob *prob, const int *colBasis, const int *rowBasis)
描述
设置线性规划的基。 使用这个函数可以热启动线性优化。
参量
prob
COPT模型。
colBasis
和rowBasis
分别是变量和约束的基状态。 请参考常量部分关于基状态的种类及其含义。
COPT_SetSlackBasis
概要
int COPT_SetSlackBasis(copt_prob *prob)
描述
设置线性规划的基为松弛基。 线性规划默认的起始点就是松弛基。使用这个函数,可以使线性规划重置为其默认起点。
参量
prob
COPT模型。
COPT_Reset
概要
int COPT_Reset(copt_prob *prob, int iClearAll)
描述
重置模型中存储的求解结果,使下次求解重新开始。当
iClearAll
为1
时, 清除初始解等其它信息。参量
prob
COPT模型。
iClearAll
是否清除其它信息。
COPT_ReadSol
概要
int COPT_ReadSol(copt_prob *prob, const char *solfilename)
描述
从结果文件中读取变量的取值。对于整数规划,可以作为整数规划的初始解。
注意: 调用该函数时,变量的默认取值为0,即任何不完整的解会被自动用零补全。
参量
prob
COPT模型。
solfilename
求解结果文件路径。
COPT_WriteSol
概要
int COPT_WriteSol(copt_prob *prob, const char *solfilename)
描述
将模型的求解结果写到文件中。
参量
prob
COPT模型。
solfilename
求解结果文件路径。
COPT_WritePoolSol
概要
int COPT_WritePoolSol(copt_prob *prob, int iSol, const char *solfilename)
描述
将指定的解池中的解写到文件中。仅适用于整数规划模型。
参量
prob
COPT模型。
iSol
解池中解的索引。
solfilename
求解结果文件路径。
COPT_WriteBasis
概要
int COPT_WriteBasis(copt_prob *prob, const char *basfilename)
描述
把COPT内部的线性规划的基状态写出到文件中。
参量
prob
COPT模型。
basfilename
基状态文件路径。
COPT_ReadBasis
概要
int COPT_ReadBasis(copt_prob *prob, const char *basfilename)
描述
从文件中读取线性规划的基状态。 使用这个函数可以热启动线性优化。
参量
prob
COPT模型。
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
个列对应的系数矩阵。参量
prob
COPT模型。
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)
描述
获取指定半定变量的维度与展开长度。
参量
prob
COPT模型。
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
个行对应的系数矩阵。参量
prob
COPT模型。
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)
描述
获取指定行列对应的系数。
参量
prob
COPT模型。
iCol
列的下标。
iRow
行的下标。
p_elem
指向待获取系数的指针。
COPT_GetPSDElem
概要
int COPT_GetPSDElem(copt_prob *prob, int iCol, int iRow, int *p_idx)
描述
获取指定半定约束中指定半定项的对称矩阵下标。
参量
prob
COPT模型。
iCol
半定变量的下标。
iRow
半定约束的下标。
p_idx
指向待获取对称矩阵下标的指针。
COPT_GetLMIElem
概要
int COPT_GetLMIElem(copt_prob *prob, int iCol, int iRow, int *p_idx)
描述
获取指定LMI约束中指定变量的系数对称矩阵下标。
参量
prob
COPT模型。
iCol
标量变量的下标。
iRow
LMI约束的下标。
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
分配合理的空间, 并再次调用该函数获取指定的对称矩阵。参量
prob
COPT模型。
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)
描述
获取目标函数中的非零二次项。
参量
prob
COPT模型。
p_nQElem
指向非零二次项数目的指针。
qRow
非零二次项的行下标。
qCol
非零二次项的列下标。
qElem
非零二次项系数。
COPT_GetPSDObj
概要
int COPT_GetPSDObj(copt_prob *prob, int iCol, int *p_idx)
描述
获取目标函数中的指定半定项。
参量
prob
COPT模型。
iCol
半定变量的下标。
p_idx
指向对称矩阵下标的指针。
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约束矩阵。参量
prob
COPT模型。
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
个行对应的二阶锥约束矩阵。参量
prob
COPT模型。
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
个行对应的指数锥约束数组。参量
prob
COPT模型。
nCone
待获取的指数锥约束的个数。
list
待获取的指数锥约束的下标列表。可以为
NULL
。
coneType
指数锥约束的类型。可取值请参考 指数锥约束类型 。
coneIdx
构成指数锥的变量的下标的数组。
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
返回需要的最小数组长度。参量
prob
COPT模型。
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
返回需要的最小数组长度。参量
prob
COPT模型。
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约束。
参量
prob
COPT模型。
lmiConstrIdx
LMI约束的下标。
nDim
指向LMI约束中对称矩阵维度的指针。
nLMILen
指向展开后的LMI约束长度的指针。
colIdx
LMI约束中标量变量的下标。
symMatIdx
LMI约束中系数对称矩阵的下标。
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
返回需要的最小数组长度。参量
prob
COPT模型。
rowIdx
Indicator约束(行)的下标。
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约束矩阵。参量
prob
COPT模型。
nInd
Indicator约束的个数。
list
待获取Indicator约束(行)的下标列表。
indType
待获取Indicator约束的类型。可取值详见:Indicator约束类型 。
binColIdx
二进制类型Indicator变量(列)的下标。
binColVal
二进制类型Indicator变量(列)的取值。
rowMatBeg, rowMatCnt, rowMatIdx
和rowMatElem
以行压缩存储格式提供系数矩阵。 有关行压缩存储格式的具体示例, 请参见
COPT_LoadProb
的 其他信息 。
cRowSense
线性约束(行)的类型。
dRowBound
线性约束(行)的右端项。
nElemSize
传入非零系数数组的长度。
pReqSize
指向待获取的行包含的非零系数的总数目的指针。可以为
NULL
。
COPT_GetColIdx
概要
int COPT_GetColIdx(copt_prob *prob, const char *colName, int *p_iCol)
描述
根据变量(列)的名字获取其在COPT内部的下标。
参量
prob
COPT模型。
colName
变量(列)的名字。
p_iCol
指向变量(列)在COPT内部下标的指针。
COPT_GetPSDColIdx
概要
int COPT_GetPSDColIdx(copt_prob *prob, const char *psdColName, int *p_iPSDCol)
描述
根据半定变量的名字获取其在COPT内部的下标。
参量
prob
COPT模型。
psdColName
半定变量的名字。
p_iPSDCol
指向半定变量在COPT内部下标的指针。
COPT_GetRowIdx
概要
int COPT_GetRowIdx(copt_prob *prob, const char *rowName, int *p_iRow)
描述
根据约束(行)的名字获取其在COPT内部的下标。
参量
prob
COPT模型。
rowName
约束(行)的名字。
p_iRow
指向约束(行)在COPT内部下标的指针。
COPT_GetQConstrIdx
概要
int COPT_GetQConstrIdx(copt_prob *prob, const char *qConstrName, int *p_iQConstr)
描述
根据二次约束的名字获取其在COPT内部的下标。
参量
prob
COPT模型。
qConstrName
二次约束的名字。
p_iQConstr
指向二次约束在COPT内部下标的指针。
COPT_GetPSDConstrIdx
概要
int COPT_GetPSDConstrIdx(copt_prob *prob, const char *psdConstrName, int *p_iPSDConstr)
描述
根据半定约束的名字获取其在COPT内部的下标。
参量
prob
COPT模型。
psdConstrName
半定约束的名字。
p_iPSDConstr
指向半定约束在COPT内部下标的指针。
COPT_GetLMIConstrIdx
概要
int COPT_GetLMIConstrIdx(copt_prob *prob, const char *lmiConstrName, int *p_iLMIConstr)
描述
根据LMI约束名称获取其在COPT内部的下标。
参量
prob
COPT模型。
lmiConstrName
LMI约束的名称。
p_iLMIConstr
指向LMI约束在COPT内部下标的指针。
COPT_GetIndicatorIdx
概要
int COPT_GetIndicatorIdx(copt_prob *prob, const char *indicatorName, int *p_iIndicator)
描述
根据Indicator约束的名称获取其在COPT内部的下标。
参量
prob
COPT模型。
indicatorName
Indicator约束的名称。
p_iIndicator
指向Indicator约束在COPT内部下标的指针。
COPT_GetColInfo
概要
int COPT_GetColInfo(copt_prob *prob, const char *infoName, int num, const int *list, double *info)
描述
获取变量(列)的信息。若
list
为NULL
,则返回前num
个变量(列)的信息。参量
prob
COPT模型。
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
个约束(行)的信息。参量
prob
COPT模型。
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
个二次约束的信息。参量
prob
COPT模型。
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
个半定约束的信息。参量
prob
COPT模型。
infoName
信息的名字。请查看 信息 章节了解目前支持的信息类型。
num
获取信息的半定约束个数。
list
获取信息的半定约束的下标列表。可以为
NULL
。
info
返回获取的信息的数组。
COPT_GetLMIConstrInfo
概要
int COPT_GetLMIConstrInfo(copt_prob *prob, const char *infoName, int iLMI, double *info)
描述
获取LMI约束的一组信息。
参量
prob
COPT模型。
infoName
信息的名称。可取值为:
COPT_DBLINFO_SLACK
和COPT_DBLINFO_DUAL
。
iLMI
待获取信息的LMI约束的下标。
info
返回获取的信息的数组。
COPT_GetColType
概要
int COPT_GetColType(copt_prob *prob, int num, const int *list, char *type)
描述
获取变量(列)的类型。若
list
为NULL
,则返回前num
个变量(列)的类型。参量
prob
COPT模型。
num
变量(列)的个数。
list
变量(列)的下标列表。可以为
NULL
。
type
返回的变量(列)的类型数组。
COPT_GetColBasis
概要
int COPT_GetColBasis(copt_prob *prob, int num, const int *list, int *colBasis)
描述
获取变量(列)的基状态。若
list
为NULL
,则返回前num
个变量(列)的基状态。参量
prob
COPT模型。
num
变量(列)的个数。
list
变量(列)的下标列表。可以为
NULL
。
colBasis
返回的变量(列)的基状态数组。
COPT_GetRowBasis
概要
int COPT_GetRowBasis(copt_prob *prob, int num, const int *list, int *rowBasis)
描述
获取约束(行)的基状态。若
list
为NULL
,则返回前num
个约束(行)的基状态。参量
prob
COPT模型。
num
约束(行)的个数。
list
约束(行)的下标列表。可以为
NULL
。
rowBasis
返回的约束(行)的基状态数组。
COPT_GetQConstrSense
概要
int COPT_GetQConstrSense(copt_prob *prob, int num, const int *list, char *sense)
描述
获取二次约束的类型。若
list
为NULL
,则返回前num
个二次约束的类型。参量
prob
COPT模型。
num
二次约束的个数。
list
二次约束的下标列表。可以为
NULL
。
sense
返回的二次约束类型数组。
COPT_GetQConstrRhs
概要
int COPT_GetQConstrRhs(copt_prob *prob, int num, const int *list, double *rhs)
描述
获取二次约束的右端项。若
list
为NULL
,则返回前num
个二次约束的右端项。参量
prob
COPT模型。
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
返回待获取名字的字符串长度。参量
prob
COPT模型。
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
返回待获取名字的字符串长度。参量
prob
COPT模型。
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
返回待获取名字的字符串长度。参量
prob
COPT模型。
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
返回待获取名字的字符串长度。参量
prob
COPT模型。
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
返回待获取名字的字符串长度。参量
prob
COPT模型。
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
返回待获取名字的字符串长度。参量
prob
COPT模型。
iLMIConstr
LMI约束的下标。
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
返回待获取名字的字符串长度。参量
prob
COPT模型。
iIndicator
Indicator约束的下标。
buff
用以获取字符串的数组。
buffSize
上述数组的大小。
pReqSize
指向存储待获取名称的最小字符串长度的指针。可以为
NULL
。
COPT_GetLMIConstrRhs
概要
int COPT_GetLMIConstrRhs(copt_prob *prob, int num, const int *list, int *constMatIdx)
描述
获取
num
个LMI约束的常数项对称矩阵。参量
prob
COPT模型。
num
待获取的LMI约束的个数。
list
待获取的LMI约束下标数组。
constMatIdx
待获取的LMI约束中常数项对称矩阵下标数组。
设置和获取参数
COPT_SetIntParam
概要
int COPT_SetIntParam(copt_prob *prob, const char *paramName, int intParam)
描述
设置一个整数参数。
参量
prob
COPT模型。
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)
描述
以上四个函数,分别可以获取一个整数参数的
当前值
默认值
最小值
最大值
参量
prob
COPT模型。
paramName
整数参数的名字。
p_intParam
指向整数参数的值的指针。
COPT_SetDblParam
概要
int COPT_SetDblParam(copt_prob *prob, const char *paramName, double dblParam)
描述
设置一个(双精度)浮点数参数。
参量
prob
COPT模型。
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)
描述
以上四个函数,分别可以获取一个(双精度)浮点数参数的
当前值
默认值
最小值
最大值
参量
prob
COPT模型。
paramName
浮点数参数的名字。
p_dblParam
指向浮点数参数的值的指针。
COPT_ResetParam
概要
int COPT_ResetParam(copt_prob *prob)
描述
将模型的参数设置重置为默认设置。
参量
prob
COPT模型。
COPT_WriteParam
概要
int COPT_WriteParam(copt_prob *prob, const char *parfilename)
描述
把用户设置过的所有参数写出到文件中。 这个函数会把所有当前值和默认值不同的参数写到文件中。
参量
prob
COPT模型。
parfilename
参数文件路径。
COPT_WriteParamStr
概要
int COPT_WriteParamStr(copt_prob *prob, char *str, int nStrSize, int *pReqSize)
描述
把用户设置过的所有参数写出到字符流中。
参量
prob
COPT模型。
str
参数设置字符流。
nStrSize
字符流缓冲区的大小。
pReqSize
保存参数设置的字符流最小空间大小。
COPT_ReadParam
概要
int COPT_ReadParam(copt_prob *prob, const char *parfilename)
描述
从文件中读取参数,并在COPT中设置这些参数。
参量
prob
COPT模型。
parfilename
参数文件路径。
COPT_ReadParamStr
概要
int COPT_ReadParamStr(copt_prob *prob, const char *strParam)
描述
从字符流中读取参数设置,并在COPT中设置这些参数。
参量
prob
COPT模型。
strParam
参数设置字符流。
获取属性
COPT_GetIntAttr
概要
int COPT_GetIntAttr(copt_prob *prob, const char *attrName, int *p_intAttr)
描述
获取一个整数属性的值。
参量
prob
COPT模型。
attrName
整数属性的名字。
p_intAttr
指向整数属性的取值的指针。
COPT_GetDblAttr
概要
int COPT_GetDblAttr(copt_prob *prob, const char *attrName, int *p_dblAttr)
描述
获取一个(双精度)浮点数属性的值。
参量
prob
COPT模型。
attrName
浮点数属性的名字。
p_dblAttr
指向浮点数属性的取值的指针。
日志函数
COPT_SetLogFile
概要
int COPT_SetLogFile(copt_prob *prob, char *logfilename)
描述
设置求解日志文件。
参量
prob
COPT模型。
logfilename
COPT求解日志文件。
COPT_SetLogCallback
概要
int COPT_SetLogCallback(copt_prob *prob, void (*logcb)(char *msg, void *userdata), void *userdata)
描述
设置求解日志Callback函数。
参量
prob
COPT模型。
logcb
求解日志Callback函数。
userdata
用户自定义数据。该数据将无修改地传递给求解日志Callback函数。
整数规划初始解功能函数
COPT_AddMipStart
概要
int COPT_AddMipStart(copt_prob *prob, int num, const int *list, double *colVal)
描述
添加整数规划初始解信息。若
list
为NULL
,则添加前num
个变量(列) 的初始解信息。每调用一次该函数,即添加一组初始解信息。参量
prob
COPT模型。
num
待添加初始解信息的变量(列)个数。
list
待添加初始解信息的变量(列)的下标列表。可以为
NULL
。
colVal
初始解信息数组。
COPT_ReadMst
概要
int COPT_ReadMst(copt_prob *prob, const char *mstfilename)
描述
从初始解文件中读取变量的取值,作为整数规划的初始解。
参量
prob
COPT模型。
mstfilename
初始解文件路径。
COPT_WriteMst
概要
int COPT_WriteMst(copt_prob *prob, const char *mstfilename)
描述
将整数规划模型的求解结果或者已有的初始解信息写到初始解文件中。
参量
prob
COPT模型。
mstfilename
初始解文件路径。
不可行模型IIS计算功能函数
COPT_ComputeIIS
概要
int COPT_ComputeIIS(copt_prob *prob)
描述
计算不可行模型的IIS (Irreducible Inconsistent Subsystem) 。
参量
prob
COPT模型。
COPT_WriteIIS
概要
int COPT_WriteIIS(copt_prob *prob, const char *iisfilename)
描述
把计算得到的IIS模型写出到文件中。
参量
prob
COPT模型。
iisfilename
IIS模型文件路径。
COPT_GetColLowerIIS
概要
int COPT_GetColLowerIIS(copt_prob *prob, int num, const int *list, int *colLowerIIS)
描述
获取变量下边界的IIS状态。若
list
为NULL
,则返回前num
个变量下边界的IIS状态。参量
prob
COPT模型。
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状态。参量
prob
COPT模型。
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状态。参量
prob
COPT模型。
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状态。参量
prob
COPT模型。
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状态。参量
prob
COPT模型。
num
SOS约束的个数。
list
SOS约束的下标列表。可以为
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状态。参量
prob
COPT模型。
num
Indicator约束的个数。
list
Indicator约束的下标列表。可以为
NULL
。
indicatorIIS
返回的Indicator约束的IIS状态数组。
可行化松弛计算功能函数
COPT_FeasRelax
概要
int COPT_FeasRelax(copt_prob *prob, double *colLowPen, double *colUppPen, double *rowBndPen, double *rowUppPen)
描述
计算不可行模型的可行松弛。
参量
prob
COPT模型。
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)
描述
把计算得到的可行化松弛模型写出到文件中。
参量
prob
COPT模型。
relaxfilename
可行化松弛模型文件路径。
参数调优功能函数
COPT_Tune
概要
int COPT_Tune(copt_prob *prob)
描述
对模型进行参数调优。
参量
prob
COPT模型。
COPT_LoadTuneParam
概要
int COPT_LoadTuneParam(copt_prob *prob, int idx)
描述
加载指定编号的参数调优结果到模型。
参量
prob
COPT模型。
idx
参数调优结果的编号。
COPT_ReadTune
概要
int COPT_ReadTune(copt_prob *prob, const char *tunefilename)
描述
从调优文件中读取待调优参数组合到模型。
参量
prob
COPT模型。
tunefilename
调优文件名。
COPT_WriteTuneParam
概要
int COPT_WriteTuneParam(copt_prob *prob, int idx, const char *parfilename)
描述
输出指定编号的参数调优结果到参数文件中。
参量
prob
COPT模型。
idx
参数调优结果的编号。
parfilename
参数文件名。
回调功能函数
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)
描述
向模型中添加一个惰性约束。
参量
prob
COPT模型。
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)
描述
向模型中批量添加多个惰性约束。
参量
prob
COPT模型。
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)
描述
向模型中添加一个割平面。
参量
prob
COPT模型。
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)
描述
向模型中批量添加多个割平面。
参量
prob
COPT模型。
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)
描述
获取指定的回调信息值。
参量
cbdata
COPT 传递给回调的
cbdata
参数。此参数必须未经修改地从用户定义的回调函数传递到
COPT_GetCallbackInfo()
。
cbinfo
待获取的回调信息名称。可取值详见 信息:Callback相关信息 。
p_val
指向回调信息值的指针。
COPT_AddCallbackSolution
概要
int COPT_AddCallbackSolution(void *cbdata, const double *sol, double* p_objval)
描述
为指定变量设置自定义的可行解。
参量
cbdata
COPT 传递给回调的
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)
描述
向模型中添加一个割平面。
参量
cbdata
COPT 传递给回调的
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)
描述
向模型中批量添加多个割平面。
参量
cbdata
COPT 传递给回调的
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)
描述
向模型中添加一个惰性约束。
参量
cbdata
COPT 传递给回调的
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)
描述
向模型中批量添加多个惰性约束。
参量
cbdata
COPT 传递给回调的
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)
描述
中断当前求解的模型。
参量
prob
COPT模型。