参数

优化参数控制COPT求解器优化算法的行为。 每个参数都有各自的默认值和取值范围,在开始求解前,用户可以通过设置参数为不同取值,对求解算法、求解过程等提出具体要求,当然也可以保持为默认设置。

按照求解器COPT执行的任务、求解的优化问题,可以分为不同类型的参数。本章节将介绍杉数求解器COPT提供的不同类型参数及其含义。章节内容构成如下:

限制和容差

限制类参数用来控制求解过程的终止,如果求解算法超过了限制类参数所设定的值(如求解时间、节点数、迭代数等), COPT会终止求解并返回一个非最优的求解状态(关于求解状态,请参考 常数章节:解状态

表 16 限制类参数总览

参数名

类型

参数含义

TimeLimit

浮点数参数

优化求解的时间限制(秒)

SolTimeLimit

浮点数参数

找到原始可行解的时间限制(秒)

NodeLimit

整数参数

整数规划求解的节点数限制

BarIterLimit

整数参数

内点法求解的迭代数限制

容差类参数对求解器所允许的可行性和最优性的冲突值(violations)提出要求。

注意

Tolerance有时会翻译为公差或者容差。本文档采用容差这个译法。

Double这个词的准确翻译应该是双精度浮点数。表格中和下文为了简便,称之为浮点数。

表 17 容差类参数总览

参数名

类型

参数含义

MatrixTol

浮点数参数

输入矩阵的系数容差

FeasTol

浮点数参数

变量、约束取值的可行性容差

DualTol

浮点数参数

对偶解的可行性容差

IntTol

浮点数参数

变量的整数解容差

RelGap

浮点数参数

整数规划的最优相对容差

AbsGap

浮点数参数

整数规划的最优绝对容差

  • TimeLimit

    浮点数参数。

    优化求解的时间限制(秒)。

    默认值 1e20

    最小值 0

    最大值 1e20

  • SolTimeLimit

    浮点数参数。

    找到原始可行解的时间限制(秒)。

    默认值 1e20

    最小值 0

    最大值 1e20

  • NodeLimit

    整数参数。

    整数规划求解的节点数限制。

    默认值 -1(自动选择)

    最小值 -1(自动选择)

    最大值 INT_MAX

  • BarIterLimit

    整数参数。

    内点法求解时的迭代数限制。

    默认值 500

    最小值 0

    最大值 INT_MAX

  • MatrixTol

    浮点数参数。

    输入矩阵的系数容差。

    默认值 1e-10

    最小值 0

    最大值 1e-7

  • FeasTol

    浮点数参数。

    变量、约束取值的可行性容差。

    默认值 1e-6

    最小值 1e-9

    最大值 1e-4

  • DualTol

    浮点数参数。

    对偶解的可行性容差。

    默认值 1e-6

    最小值 1e-9

    最大值 1e-4

  • IntTol

    浮点参数。

    变量的整数解容差。

    默认值 1e-6

    最小值 1e-9

    最大值 1e-1

  • RelGap

    浮点参数。

    整数规划的最优相对容差。

    默认值 1e-4

    最小值 0

    最大值 DBL_MAX

  • AbsGap

    浮点参数。

    整数规划的最优绝对容差。

    默认值 1e-6

    最小值 0

    最大值 DBL_MAX

预求解相关

预求解相关参数控制求解器的预求解算法

表 18 预求解相关参数总览

参数名

类型

参数含义

Presolve

整数参数

预求解的强度

Scaling

整数参数

是否在求解一个模型前,调整系数矩阵的数值(Scaling)

Dualize

整数参数

是否构建并求解对偶模型

  • Presolve

    整数参数。

    预求解的强度。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 关闭。

    1: 少量快速。

    2: 正常。

    3: 多多益善。

    4: 无限制,直至无法改变模型(可能非常耗时)。

  • Scaling

    整数参数。

    是否在求解一个模型前,调整系数矩阵的数值(Scaling)。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 不调整。

    1: 调整系数矩阵的数值。

  • Dualize

    整数参数。

    是否构建并求解对偶模型。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 不构建对偶模型。

    1: 构建对偶模型。

线性规划相关

线性规划相关参数控制单纯形法和内点法的算法工作流程。

表 19 线性规划规划相关参数总览

参数名

类型

参数含义

LpMethod

整数参数

求解线性规划问题的算法

DualPrice

整数参数

选定对偶单纯形法的Pricing算法

DualPerturb

整数参数

是否允许对偶单纯性算法使用目标函数摄动

BarHomogeneous

整数参数

是否使用齐次自对偶方法

BarOrder

整数参数

内点法的矩阵排列算法

BarStart

整数参数

内点法寻找初始点的算法

Crossover

整数参数

是否使用Crossover

ReqFarkasRay

整数参数

当线性规划问题无可行解或者无界时,是否计算对偶Farkas(也称对偶极射线)或主元射线(也称极射线)

  • LpMethod

    整数参数。

    求解线性规划问题的算法。

    默认值 -1

    可选值

    -1: 自动选择。

    对于线性规划问题,选择对偶单纯形法;

    对于混合整数线性规划问题,选择对偶单纯形法或内点法之一。

    1: 对偶单纯形法。

    2: 内点法。

    3: 直接Crossover。

    4: 并发求解(同时启动单纯形法与内点法求解)。

    5: 基于稀疏和数值范围等特征自动选择单纯形法或者内点法。

    6: 使用一阶算法(PDLP)求解。

注意:

目前,COPT的GPU模式仅支持求解线性规划问题,并且需要选择使用一阶算法(PDLP)进行求解。如需开启,请设置 LpMethod=6

  • DualPrice

    整数参数。

    选定对偶单纯形法的Pricing算法。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 使用Devex算法。

    1: 使用对偶最陡边算法。

  • DualPerturb

    整数参数。

    是否允许对偶单纯性算法使用目标函数摄动。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 无摄动。

    1: 允许目标函数摄动。

  • BarHomogeneous

    整数参数。

    是否使用齐次自对偶方法。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 不使用。

    1: 使用。

  • BarOrder

    整数参数。

    内点法的矩阵排列算法。

    默认值 -1

    可选值

    -1: 自动选择。

    0: Approximate Minimum Degree(AMD) 算法。

    1: Nested Dissection(ND)算法。

  • BarStart

    整数参数。

    内点法寻找初始点的算法。

    默认值 -1

    可选值

    -1: 自动选择。

    0: Simple算法。

    1: Mehrotra算法。

    2: Modified Mehrotra算法。

  • Crossover

    整数参数。

    是否使用Crossover。

    默认值 1

    可选值

    -1: 自动选择。仅在当线性规划的解不满足容差时使用。

    0: 不使用。

    1: 使用。

  • ReqFarkasRay

    整数参数。

    进阶话题。 当线性规划问题无可行解或者无界时, 是否计算对偶Farkas(也叫做对偶极射线)或者主元射线(也叫做极射线)。

    默认值 0

    可选值

    0: 不计算。

    1: 计算。

整数规划相关

整数规划相关参数控制整数规划求解算法的工作流程。

表 20 整数规划相关参数总览

参数名

类型

参数含义

CutLevel

整数参数

生成割平面的强度

RootCutLevel

整数参数

根节点生成割平面的强度

TreeCutLevel

整数参数

搜索树生成割平面的强度

RootCutRounds

整数参数

根节点生成割平面的次数

NodeCutRounds

整数参数

搜索树节点生成割平面的次数

HeurLevel

整数参数

启发式算法的强度

RoundingHeurLevel

整数参数

Rounding启发式算法的强度

DivingHeurLevel

整数参数

Diving启发式算法的强度

SubMipHeurLevel

整数参数

基于子MIP的启发式算法的强度

FAPHeurLevel

整数参数

Fix-and-propagate启发式算法的强度

StrongBranching

整数参数

Strong Branching的强度

ConflictAnalysis

整数参数

是否使用冲突分析

MipStartMode

整数参数

处理初始解的方式

MipStartNodeLimit

整数参数

补全不完整的初始解时,求解的子MIP的节点数限制

  • CutLevel

    整数参数。

    生成割平面的强度。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 关闭。

    1: 少量快速。

    2: 正常。

    3: 多多益善。

  • RootCutLevel

    整数参数。

    根节点生成割平面的强度。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 关闭。

    1: 少量快速。

    2: 正常。

    3: 多多益善。

  • TreeCutLevel

    整数参数。

    搜索树生成割平面的强度。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 关闭。

    1: 少量快速。

    2: 正常。

    3: 多多益善。

  • RootCutRounds

    整数参数。

    根节点生成割平面的次数。

    默认值 -1(自动选择)

    最小值 -1(自动选择)

    最大值 INT_MAX

  • NodeCutRounds

    整数参数。

    搜索树节点生成割平面的次数。

    默认值 -1(自动选择)

    最小值 -1(自动选择)

    最大值 INT_MAX

  • HeurLevel

    整数参数。

    启发式算法的强度。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 关闭。

    1: 少量快速。

    2: 正常。

    3: 多多益善。

  • RoundingHeurLevel

    整数参数。

    Rounding启发式算法的强度。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 关闭。

    1: 少量快速。

    2: 正常。

    3: 多多益善。

  • DivingHeurLevel

    整数参数。

    Diving启发式算法的强度。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 关闭。

    1: 少量快速。

    2: 正常。

    3: 多多益善。

  • SubMipHeurLevel

    整数参数。

    基于子MIP的启发式算法的强度。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 关闭。

    1: 少量快速。

    2: 正常。

    3: 多多益善。

  • FAPHeurLevel

    整数参数。

    Fix-and-propagate启发式算法的强度。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 关闭。

    1: 少量快速。

    2: 正常。

    3: 多多益善。

  • StrongBranching

    整数参数。

    Strong Branching的强度。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 关闭。

    1: 少量快速。

    2: 正常。

    3: 多多益善。

  • ConflictAnalysis

    整数参数。

    是否使用冲突分析。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 不使用。

    1: 使用。

  • MipStartMode

    整数参数。

    处理初始解的方式。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 不使用任何初始解。

    1: 仅使用完整且可行的初始解。

    2: 仅使用可行的初始解(若初始解不完整,通过求解子MIP来补全)。

  • MipStartNodeLimit

    整数参数。

    补全不完整的初始解时,求解的子MIP的节点数限制。

    默认值 -1(自动选择)

    最小值 -1(自动选择)

    最大值 INT_MAX

半定规划相关

  • SDPMethod

    整数参数。

    求解半定规划问题的算法。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 原始-对偶内点法。

    1: 交替方向乘子法。

    2: 对偶内点法。

IIS计算相关

  • IISMethod

    整数参数。

    计算IIS的方法。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 计算结果质量优先。

    1: 计算效率优先。

可行化松弛计算相关

  • FeasRelaxMode

    整数参数。

    计算可行化松弛的方法。

    默认值 0

    可选值

    0: 最小化加权冲突值。

    1: 计算最小化加权冲突下的原始模型最优可行化松弛。

    2: 最小化冲突数目。

    3: 计算最小化冲突数目下的原始模型最优可行化松弛。

    4: 最小化加权平方冲突值。

    5: 计算最小化加权平方冲突下的原始模型最优可行化松弛。

参数调优相关

表 21 参数调优相关参数总览

参数名

类型

参数含义

TuneTimeLimit

浮点数参数

参数调优的时间限制

TuneTargetTime

浮点数参数

参数调优的时间目标

TuneTargetRelGap

整数参数

参数调优的最优相对容差目标

TuneMethod

整数参数

参数调优的方法

TuneMode

整数参数

参数调优的模式

TuneMeasure

整数参数

参数调优结果计算方式

TunePermutes

整数参数

参数调优每组参数模型计算次数

TuneOutputLevel

整数参数

参数调优日志输出强度

  • TuneTimeLimit

    浮点数参数。

    参数调优的时间限制。若值为 0 ,则表示求解器自动设置。

    默认值 0

    最小值 0

    最大值 1e20

  • TuneTargetTime

    浮点数参数。

    参数调优的时间目标。

    默认值 1e-2

    最小值 0

    最大值 DBL_MAX

  • TuneTargetRelGap

    浮点数参数。

    参数调优的最优相对容差目标。

    默认值 1e-4

    最小值 0

    最大值 DBL_MAX

  • TuneMethod

    整数参数。

    参数调优的方法。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 贪婪搜索策略。

    1: 更广泛的搜索策略。

  • TuneMode

    整数参数。

    参数调优的模式。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 求解时间。

    1: 最优相对容差。

    2: 目标函数值。

    3: 目标函数值下界。

  • TuneMeasure

    整数参数。

    参数调优结果计算方式。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 计算平均值。

    1: 计算最大值。

  • TunePermutes

    整数参数。

    参数调优每组参数模型计算次数。若值为 0 , 则表示求解器自动设置。

    默认值 0

    最小值 0

    最大值 INT_MAX

  • TuneOutputLevel

    整数参数。

    参数调优日志输出强度。

    默认值 2

    可选值

    0: 不输出调优日志。

    1: 仅输出改进参数的摘要。

    2: 输出每次调优尝试的摘要。

    3: 输出每次调优尝试的详细日志。

Callback相关

  • LazyConstraints

    整数参数。

    是否将惰性约束加入模型中。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 否。

    1: 是。

注意:

  • 该参数仅对MIP模型有效。

并行计算相关

并行计算相关参数用来控制求解算法并行计算的线程数和任务数。

表 22 并行计算相关参数总览

参数名

类型

参数含义

Threads

整数参数

问题求解使用的线程数

BarThreads

整数参数

内点法使用的线程数。若值为-1,则线程数由参数 Threads 决定

SimplexThreads

整数参数

对偶单纯形法使用的线程数。若值为-1,则线程数由参数 Threads 决定

CrossoverThreads

整数参数

Crossover使用的线程数。若值为-1,则线程数由参数 Threads 决定

MipTasks

整数参数

MIP求解使用的任务数

  • Threads

    整数参数。

    问题求解使用的线程数。

    默认值 -1(自动选择)

    最小值 -1(自动选择)

    最大值 128

  • BarThreads

    整数参数。

    内点法使用的线程数。若值为-1,则线程数由参数 Threads 决定。

    默认值 -1

    最小值 -1

    最大值 128

  • SimplexThreads

    整数参数。

    对偶单纯形法使用的线程数。若值为-1,则线程数由参数 Threads 决定。

    默认值 -1

    最小值 -1

    最大值 128

  • CrossoverThreads

    整数参数。

    Crossover使用的线程数。若值为-1,则线程数由参数 Threads 决定。

    默认值 -1

    最小值 -1

    最大值 128

  • MipTasks

    整数参数。

    MIP求解使用的任务数。

    默认值 -1(自动选择)

    最小值 -1(自动选择)

    最大值 256

GPU计算相关

  • GPUMode

    整数参数。

    GPU求解模式的使用方式。

    默认值 -1

    可选值

    -1: 自动选择。

    0: 强制使用CPU模式。

    1: 使用NVIDIA GPU。

注意

  1. 当前COPT的GPU模式仅支持求解线性规划问题,且需要使用一阶算法PDLP,即设置 LpMethod=6 时才起作用。

  2. 对于Windows,Linux-x86系统,当 GPUMode 取默认值或1时,COPT会尝试检测是否能正常加载GPU求解所需要的CUDA函数库,以及是否存在支持GPU的显卡。 若以上检测均成功,则使用GPU模式进行求解运算;若失败,则继续使用CPU模式的COPT。两者打印COPT启动的信息略有不同。

  3. 对于MacOS,Linux-aarch64等系统,只提供CPU版本的COPT,即使设置 GPUMode=1 ,也会启动CPU版本的COPT进行求解。两者打印COPT启动的信息略有不同。

  4. 部署CUDA函数库不是运行COPT的必要依赖,如果未设置 LpMethod=6 (未使用一阶算法PDLP),无论是否安装CUDA库都不影响COPT的运行和求解。更多关于CUDA函数库安装的常见问题,请参考 常见问题章节:GPU使用相关

  • GPUDevice

    整数参数。

    使用指定编号的GPU(当运行机器有多个GPU存在的情形下)。

    默认值 -1(自动选择)

    最小值 -1(自动选择)

    最大值 INT_MAX

  • PDLPTol

    浮点参数。

    一阶算法(PDLP)的收敛容差。

    默认值 1e-6

    最小值 1e-12

    最大值 1e-4

其它参数

  • Logging

    整数参数。

    是否显示求解日志。

    默认值 1

    可选值

    0: 不显示求解日志。

    1: 显示求解日志。

  • LogToConsole

    整数参数。

    是否显示求解日志到控制台。

    默认值 1

    可选值

    0: 不显示求解日志到控制台。

    1: 显示求解日志到控制台。

参数相关操作

在不同的编程接口中,获取和设置优化参数的方式略有差别,具体请参考: