C API 参考手册

杉数优化求解器提供了适用于高级应用场景的C语言API库函数。 本章节提供在 copt.h 中定义的常量、函数、参数、属性的文档。

常量

COPT有三种类型的常量。

  1. 用来构建模型的,比如优化方向,约束类型等;

  2. 用来查询求解结果的,比如API函数返回值,基、解值等;

  3. 用来监视求解进程的,比如回调函数的触发条件。

优化方向

在不同的优化场景中,可能需要最大化或者最小化一个目标函数。 为此,我们提供了两种优化方向常数:

  • 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约束是一类逻辑关系约束,它以一个二进制类型变量 \(y\) 作为Indicator变量, 根据变量 \(y\) 的取值决定线性约束 \(a^{T}x \leq b\) 是否成立。Indicator约束 的一般表达式:

(31)\[y = f \rightarrow a^{T}x \leq b\]

其中,\(f \in \{0, 1\}\) 。当 \(y = f\) 时,线性约束成立。 当 \(y \neq f\) 时,线性约束无效(可以被违反)。线性约束的方向可取 \(\leq\)\(\geq\)\(=\) 三种情形。

二阶锥约束类型

二阶锥约束是一类特殊的二次约束,COPT支持两种二阶锥约束:

  • COPT_CONE_QUAD

    标准二阶锥。

数学形式为:

(32)\[Q^n= \left\{x\in \mathbb{R}^n\ \left|\ x_0\geq\sqrt{\sum_{i=1}^{n-1} x_i^2}, x_0\geq0 \right. \right\}\]
  • COPT_CONE_RQUAD

    旋转二阶锥。

数学形式为:

(33)\[Q^n_r= \left\{x\in \mathbb{R}^n\ \left|\ 2x_0x_1\geq\sum_{i=2}^{n-1} x_i^2, x_0\geq0, x_1\geq 0 \right. \right\}\]

指数锥约束类型

COPT支持两种类型的指数锥约束:

  • COPT_EXPCONE_PRIMAL : 原始指数锥

(34)\[\mathrm{cl}(S_1) = S_1 \cup S_2\]
(35)\[\begin{split}\begin{aligned} S_1 &= \left\{\begin{pmatrix} t \\ s \\ r \end{pmatrix}\in \mathbb{R}^3\ |\ s > 0,\ t \geq s\ \mathrm{exp}\left(\frac{r}{s} \right) \right\}, \\ S_2 &= \left\{\begin{pmatrix} t \\ s \\ r \end{pmatrix}\in \mathbb{R}^3\ |\ s=0,\ t\geq 0,\ r\leq 0 \right\} \end{aligned}\end{split}\]
  • COPT_EXPCONE_DUAL : 对偶指数锥

(36)\[\mathrm{cl}(S_1) = S_1 \cup S_2\]
(37)\[\begin{split}\begin{aligned} S_1 &= \left\{\begin{pmatrix} t \\ s \\ r \end{pmatrix}\in \mathbb{R}^3\ |\ r < 0,\ t \geq -r\ \mathrm{exp}\left(\frac{s}{r}-1\right) \right\}, \\ S_2 &= \left\{\begin{pmatrix} t \\ s \\ r \end{pmatrix}\in \mathbb{R}^3\ |\ r = 0,\ t\geq 0,\ s\geq 0 \right\} \end{aligned}\end{split}\]

基状态

对于一个有 \(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_GetBannerCOPT_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_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_MAXIMIZECOPT_MINIMIZE

dObjConst

目标函数的常数项。

obj

变量的目标函数系数。

colMatBeg, colMatCnt, colMatIdxcolMatElem

以列压缩存储格式定义系数矩阵。 我们在 其他信息 中提供了一个使用列压缩存储格式的例子 供参考。

如果 colMatCntNULL , 则 colMatBeg 需要有 nCol+1 元素, 且指向第i列的开始和终止指针分别使用 colMatBeg[i]colMatBeg[i+1] 定义。

如果提供了 colMatCnt , 则 指向第i列的开始和终止指针分别使用 colMatBeg[i]colMatBeg[i] + colMatCnt[i] 定义。

colType

变量类型。

如果不提供这个数组,则所有的变量都是连续变量。

colLower and colUpper

变量的上下边界。

如果不提供下边界 colLower ,下边界都将是0。

如果不提供上边界 colUpper ,则变量都无上边界。

rowSense

约束类型。

请参考常量部分的文档,了解COPT所支持的约束类型。

如果不提供 rowSense 这个数组, 那么 rowBoundrowUppe 会被当做 约束的上下边界。这是我们推荐的定义约束的方式。

如果提供了 rowSenserowBoundrowUppe 会被当做RHS和 range 。 在此情况下, rowUpper 数组仅在有 COPT_RANGE 约束类型的时候会用到,且在此时,上下界分别为

下界 rowBound[i] - fabs(rowUpper[i])

上界 rowBound[i]

rowBound

约束的下界或RHS。

rowUpper

约束的上界或 range

colNames and rowNames

变量和约束的名字。可以不提供。

其他信息

列压缩存储(compressed column storage, CCS)格式,是一种常见的存储稀疏矩阵的格式。 我们再次演示如何用此格式来存储这个4列3行的示例矩阵。

(38)\[\begin{split}A = \begin{bmatrix} 1.1 & 1.2 & & \\ & 2.2 & 2.3 & \\ & & 3.3 & 3.4 \\ \end{bmatrix}\end{split}\]
// 仅使用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 and dColUpper

变量的上下边界。

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, 则 dRowBounddRowUpper 会被当做 约束的上下边界。这是我们推荐的定义约束的方式。

如果 cRowSense 是有意义的量, 则 dRowBounddRowUpper 会被当做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, colMatIdxcolMatElem

以列压缩存储格式提供系数矩阵。 有关列压缩存储格式的具体示例, 请参见 COPT_LoadProb其他信息

colType

新变量类型。如果不提供这个数组,则所有的变量都是连续变量。

colLowercolUpper

新变量的上下边界。

如果不提供下边界 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, rowMatIdxrowMatElem

以行压缩存储格式提供系数矩阵。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见 COPT_LoadProb其他信息

rowSense

新约束类型。

请参考常量部分的文档,了解COPT所支持的约束类型。

如果不提供 rowSense 这个数组, 那么 rowBoundrowUpper 会被当做 约束的上下边界。这是我们推荐的定义约束的方式。

如果提供了 rowSenserowBoundrowUpper 会被当做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约束。若 sosMatWtNULL ,则COPT在内部自动生成。 注意: 若模型包含SOS约束,则模型为整数规划模型。

参量

prob

COPT模型。

nAddSOS

新添加的SOS约束个数。

sosType

SOS约束的类型。

sosMatBeg, sosMatCnt, sosMatIdxsosMatWt

以行压缩存储格式提供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_EQUALCOPT_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, 则 dRowBounddRowUpper 会被当做约束的上下边界。这是我们推荐的定义约束的方式。

如果 cRowSense 是有意义的量, 则 dRowBounddRowUpper 会被当做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_EQUALCOPT_LESS_EQUALCOPT_GREATER_EQUAL

dRowBound

线性约束(行)的右端项。

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_MAXIMIZECOPT_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_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模型。

colBasisrowBasis

分别是变量和约束的基状态。 请参考常量部分关于基状态的种类及其含义。

COPT_SetBasis

概要

int COPT_SetBasis(copt_prob *prob, const int *colBasis, const int *rowBasis)

描述

设置线性规划的基。 使用这个函数可以热启动线性优化。

参量

prob

COPT模型。

colBasisrowBasis

分别是变量和约束的基状态。 请参考常量部分关于基状态的种类及其含义。

COPT_SetSlackBasis

概要

int COPT_SetSlackBasis(copt_prob *prob)

描述

设置线性规划的基为松弛基。 线性规划默认的起始点就是松弛基。使用这个函数,可以使线性规划重置为其默认起点。

参量

prob

COPT模型。

COPT_Reset

概要

int COPT_Reset(copt_prob *prob, int iClearAll)

描述

重置模型中存储的求解结果,使下次求解重新开始。当 iClearAll1 时, 清除初始解等其它信息。

参量

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)

描述

按列的方式获取模型的系数矩阵。

一般来说,用户需要连续调用两次该函数完成系数矩阵抽取操作。 首先,将 colMatBegcolMatCntcolMatIdxcolMatElem 传入 NULL ,通过 pReqSize 返回由 nCollist 指定的系数矩阵非零元 个数,然后对列压缩格式矩阵参量分配合理的空间,并再次调用该函数获取指定的系数矩阵。 若传入的系数矩阵长度不够,则返回前 nElemSize 个长度的非零系数, 并通过 pReqSize 返回需要的最小数组长度。 若 listNULL ,则返回前 nCol 个列对应的系数矩阵。

参量

prob

COPT模型。

nCol

待获取的列的个数。

list

待获取的列的下标列表。可以为 NULL

colMatBeg, colMatCnt, colMatIdxcolMatElem

以列压缩存储格式提供系数矩阵。 有关列压缩存储格式的具体示例, 请参见 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)

描述

按行的方式获取模型的系数矩阵。

一般来说,用户需要连续调用两次该函数完成系数矩阵抽取操作。 首先,将 rowMatBegrowMatCntrowMatIdxrowMatElem 传入 NULL ,通过 pReqSize 返回由 nRowlist 指定的系数矩阵非零元 个数,然后对行压缩格式矩阵参量分配合理的空间,并再次调用该函数获取指定的系数矩阵。 若传入的系数矩阵长度不够,则返回前 nElemSize 个长度的非零系数, 并通过 pReqSize 返回需要的最小数组长度。 若 listNULL ,则返回前 nRow 个行对应的系数矩阵。

参量

prob

COPT模型。

nRow

待获取的行的个数。

list

待获取的行的下标列表。可以为 NULL

rowMatBeg, rowMatCnt, rowMatIdxrowMatElem

以行压缩存储格式提供系数矩阵。 有关行压缩存储格式的具体示例, 请参见 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)

描述

获取指定的对称矩阵。

一般来说,用户需要连续调用两次该函数完成对称矩阵的抽取操作。 首先,将 rowscolselems 传入 NULL , 通过 p_nDimp_nElem 返回对称矩阵的维度与非零元个数, 然后为对称矩阵参量 rowscolselems 分配合理的空间, 并再次调用该函数获取指定的对称矩阵。

参量

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约束矩阵抽取操作。 首先,将 sosMatBegsosMatCntsosMatIdxsosMatElem 传入 NULL ,通过 pReqSize 返回由 nSoslist 指定的SOS约束矩阵 非零元个数,然后对行压缩格式矩阵参量分配合理的空间,并再次调用该函数获取指定的SOS约束矩阵。 若传入的SOS约束矩阵长度不够,则返回前 nElemSize 个长度的非零系数, 并通过 pReqSize 返回需要的最小数组长度。 若 listNULL ,则返回前 nSos 个行对应的SOS约束矩阵。

参量

prob

COPT模型。

nSos

待获取的SOS约束的个数。

list

待获取的SOS约束的下标列表。可以为 NULL

sosMatBeg, sosMatCnt, sosMatIdxsosMatElem

以行压缩存储格式提供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)

描述

获取模型的二阶锥约束矩阵。

一般来说,用户需要连续调用两次该函数完成二阶锥约束矩阵抽取操作。 首先,将 coneBegconeCntconeIdx 传入 NULL ,通过 pReqSize 返回由 nConelist 指定的二阶锥约束矩阵变量下标个数,然后对行压缩格式矩阵参量 分配合理的空间,并再次调用该函数获取指定的二阶锥约束矩阵。 若传入的二阶锥约束矩阵长度不够,则返回前 nElemSize 个长度的变量下标,并通过 pReqSize 返回需要的最小数组长度。 若 listNULL ,则返回前 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 返回由 nConelist 指定的指数锥约束数组的下标个数,然后对数组参量 分配合理的空间,并再次调用该函数获取指定的指数锥约束数组。 若传入的指数锥约束数组长度不够,则返回前 nElemSize 个长度的变量下标数组,并通过 pReqSize 返回需要的最小数组长度。 若 listNULL ,则返回前 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)

描述

获取模型的二次约束。

一般来说,用户需要连续调用两次该函数完成二次约束的抽取操作。 首先,将 qMatRowqMatColqMatElem 传入 NULL , 通过 pQReqSize 返回由 qConstrIdx 指定的二次约束的非零二次项个数, 将 rowMatIdxrowMatElem 传入 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)

描述

获取模型的半定约束。

一般来说,用户需要连续调用两次该函数完成半定约束的抽取操作。 首先,将 psdColIdxsymMatIdx 传入 NULL , 通过 pColReqSize 返回由 psdConstrIdx 指定的半定约束的半定项个数, 将 rowMatIdxrowMatElem 传入 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约束的抽取操作。 首先,将 nRowMatCntrowMatIdxrowMatElem 传入 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_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_GetColInfo

概要

int COPT_GetColInfo(copt_prob *prob, const char *infoName, int num, const int *list, double *info)

描述

获取变量(列)的信息。若 listNULL ,则返回前 num 个变量(列)的信息。

参量

prob

COPT模型。

infoName

信息的名字。请查看 信息 章节了解目前支持的信息类型。

num

获取信息的变量(列)个数。

list

获取信息的变量(列)的下标列表。可以为 NULL

info

返回获取的信息的数组。

COPT_GetPSDColInfo

概要

int COPT_GetPSDColInfo(copt_prob *prob, const char *infoName, int iCol, double *info)

描述

获取半定变量的信息。

参量

prob

COPT模型。

infoName

信息的名字。请查看 信息 章节了解目前支持的信息类型。

iCol

获取信息的半定变量下标。

info

返回获取的信息的数组。

COPT_GetRowInfo

概要

int COPT_GetRowInfo(copt_prob *prob, const char *infoName, int num, const int *list, double *info)

描述

获取约束(行)的信息。若 listNULL ,则返回前 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)

描述

获取二次约束的信息。若 listNULL ,则返回前 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)

描述

获取半定约束的信息。若 listNULL ,则返回前 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_SLACKCOPT_DBLINFO_DUAL

iLMI

待获取信息的LMI约束的下标。

info

返回获取的信息的数组。

COPT_GetColType

概要

int COPT_GetColType(copt_prob *prob, int num, const int *list, char *type)

描述

获取变量(列)的类型。若 listNULL ,则返回前 num 个变量(列)的类型。

参量

prob

COPT模型。

num

变量(列)的个数。

list

变量(列)的下标列表。可以为 NULL

type

返回的变量(列)的类型数组。

COPT_GetColBasis

概要

int COPT_GetColBasis(copt_prob *prob, int num, const int *list, int *colBasis)

描述

获取变量(列)的基状态。若 listNULL ,则返回前 num 个变量(列)的基状态。

参量

prob

COPT模型。

num

变量(列)的个数。

list

变量(列)的下标列表。可以为 NULL

colBasis

返回的变量(列)的基状态数组。

COPT_GetRowBasis

概要

int COPT_GetRowBasis(copt_prob *prob, int num, const int *list, int *rowBasis)

描述

获取约束(行)的基状态。若 listNULL ,则返回前 num 个约束(行)的基状态。

参量

prob

COPT模型。

num

约束(行)的个数。

list

约束(行)的下标列表。可以为 NULL

rowBasis

返回的约束(行)的基状态数组。

COPT_GetQConstrSense

概要

int COPT_GetQConstrSense(copt_prob *prob, int num, const int *list, char *sense)

描述

获取二次约束的类型。若 listNULL ,则返回前 num 个二次约束的类型。

参量

prob

COPT模型。

num

二次约束的个数。

list

二次约束的下标列表。可以为 NULL

sense

返回的二次约束类型数组。

COPT_GetQConstrRhs

概要

int COPT_GetQConstrRhs(copt_prob *prob, int num, const int *list, double *rhs)

描述

获取二次约束的右端项。若 listNULL ,则返回前 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_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)

描述

添加整数规划初始解信息。若 listNULL ,则添加前 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状态。若 listNULL ,则返回前 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状态。若 listNULL ,则返回前 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状态。若 listNULL ,则返回前 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状态。若 listNULL ,则返回前 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状态。若 listNULL , 则返回前 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状态。若 listNULL , 则返回前 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,则表示不松弛相应约束的上边界。

注意: 一般情况下,设置 rowUppPenNULL 即可。

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中才能被调用,对应关系罗列如下:

表 52 回调功能函数

Context

Methods

COPT_CBCONTEXT_INCUMBENT

COPT_AddCallbackSolution, COPT_GetCallbackInfo

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_AddCallbackSolution, COPT_GetCallbackInfo

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, 则 dRowBounddRowUpper 会被当做 约束的上下边界。这是我们推荐的定义约束的方式。

如果 cRowSense 是有意义的量, 则 dRowBounddRowUpper 会被当做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, rowMatIdxrowMatElem

以行压缩存储格式提供惰性约束的系数矩阵。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见 COPT_LoadProb其他信息

rowSense

惰性约束类型。

可取值详见 常量:约束类型

如果 cRowSense 是 0, 则 dRowBounddRowUpper 会被当做 约束的上下边界。这是我们推荐的定义约束的方式。

如果 cRowSense 是有意义的量, 则 dRowBounddRowUpper 会被当做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, 则 dRowBounddRowUpper 会被当做 约束的上下边界。这是我们推荐的定义约束的方式。

如果 cRowSense 是有意义的量, 则 dRowBounddRowUpper 会被当做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, rowMatIdxrowMatElem

以行压缩存储格式提供割平面的系数矩阵。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见 COPT_LoadProb其他信息

rowSense

割平面约束类型。

可取值详见 常量:约束类型

如果 cRowSense 是 0, 则 dRowBounddRowUpper 会被当做 约束的上下边界。这是我们推荐的定义约束的方式。

如果 cRowSense 是有意义的量, 则 dRowBounddRowUpper 会被当做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模型中,设置用户自定义的回调函数。

参量

prob

COPT模型。

cb

回调函数。

cbctx

回调函数的触发条件。可取值详见 常量:回调函数的触发条件

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_EQUALCOPT_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, rowMatIdxrowMatElem

以行压缩存储格式提供割平面约束的系数矩阵。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见 COPT_LoadProb其他信息

rowSense

割平面约束类型。支持 COPT_LESS_EQUAL , COPT_GREATER_EQUAL , COPT_EQUALCOPT_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_EQUALCOPT_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, rowMatIdxrowMatElem

以行压缩存储格式提供惰性约束的系数矩阵。 有关稀疏矩阵的压缩存储格式的具体示例, 请参见 COPT_LoadProb其他信息

rowSense

惰性约束类型。支持 COPT_LESS_EQUAL , COPT_GREATER_EQUAL , COPT_EQUALCOPT_FREE

通过回调函数添加的惰性约束仅支持单边。

rowRhs

惰性约束的RHS。

其他API函数

COPT_GetBanner

概要

int COPT_GetBanner(char *buff, int buffSize)

描述

获取包含COPT版本等求解器基本信息的字符串。

参量

buff

用以获取字符串的数组。

buffSize

上述数组的大小。

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模型。