参数
优化参数控制COPT求解器优化算法的行为。 每个参数都有各自的默认值和取值范围,在开始求解前,用户可以通过设置参数为不同取值,对求解算法、求解过程等提出具体要求,当然也可以保持为默认设置。
按照求解器COPT执行的任务、求解的优化问题,可以分为不同类型的参数。本章节将介绍杉数求解器COPT提供的不同类型参数及其含义。章节内容构成如下:
限制和容差
限制类参数用来控制求解过程的终止,如果求解算法超过了限制类参数所设定的值(如求解时间、节点数、迭代数等), COPT会终止求解并返回一个非最优的求解状态(关于求解状态,请参考 常数章节:解状态)
参数名 |
类型 |
参数含义 |
---|---|---|
浮点数参数 |
优化求解的时间限制(秒) |
|
浮点数参数 |
找到原始可行解的时间限制(秒) |
|
整数参数 |
整数规划求解的节点数限制 |
|
整数参数 |
内点法求解的迭代数限制 |
容差类参数对求解器所允许的可行性和最优性的冲突值(violations)提出要求。
注意
Tolerance有时会翻译为公差或者容差。本文档采用容差这个译法。
Double这个词的准确翻译应该是双精度浮点数。表格中和下文为了简便,称之为浮点数。
参数名 |
类型 |
参数含义 |
---|---|---|
浮点数参数 |
输入矩阵的系数容差 |
|
浮点数参数 |
变量、约束取值的可行性容差 |
|
浮点数参数 |
对偶解的可行性容差 |
|
浮点数参数 |
变量的整数解容差 |
|
浮点数参数 |
整数规划的最优相对容差 |
|
浮点数参数 |
整数规划的最优绝对容差 |
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
预求解相关
预求解相关参数控制求解器的预求解算法
参数名 |
类型 |
参数含义 |
---|---|---|
整数参数 |
预求解的强度 |
|
整数参数 |
是否在求解一个模型前,调整系数矩阵的数值(Scaling) |
|
整数参数 |
是否构建并求解对偶模型 |
Presolve
整数参数。
预求解的强度。
默认值 -1
可选值
-1: 自动选择。
0: 关闭。
1: 少量快速。
2: 正常。
3: 多多益善。
4: 无限制,直至无法改变模型(可能非常耗时)。
Scaling
整数参数。
是否在求解一个模型前,调整系数矩阵的数值(Scaling)。
默认值 -1
可选值
-1: 自动选择。
0: 不调整。
1: 调整系数矩阵的数值。
Dualize
整数参数。
是否构建并求解对偶模型。
默认值 -1
可选值
-1: 自动选择。
0: 不构建对偶模型。
1: 构建对偶模型。
线性规划相关
线性规划相关参数控制单纯形法和内点法的算法工作流程。
参数名 |
类型 |
参数含义 |
---|---|---|
整数参数 |
求解线性规划问题的算法 |
|
整数参数 |
选定对偶单纯形法的Pricing算法 |
|
整数参数 |
是否允许对偶单纯性算法使用目标函数摄动 |
|
整数参数 |
是否使用齐次自对偶方法 |
|
整数参数 |
内点法的矩阵排列算法 |
|
整数参数 |
内点法寻找初始点的算法 |
|
整数参数 |
是否使用Crossover |
|
整数参数 |
当线性规划问题无可行解或者无界时,是否计算对偶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: 计算。
整数规划相关
整数规划相关参数控制整数规划求解算法的工作流程。
参数名 |
类型 |
参数含义 |
---|---|---|
整数参数 |
生成割平面的强度 |
|
整数参数 |
根节点生成割平面的强度 |
|
整数参数 |
搜索树生成割平面的强度 |
|
整数参数 |
根节点生成割平面的次数 |
|
整数参数 |
搜索树节点生成割平面的次数 |
|
整数参数 |
启发式算法的强度 |
|
整数参数 |
Rounding启发式算法的强度 |
|
整数参数 |
Diving启发式算法的强度 |
|
整数参数 |
基于子MIP的启发式算法的强度 |
|
整数参数 |
Fix-and-propagate启发式算法的强度 |
|
整数参数 |
Strong Branching的强度 |
|
整数参数 |
是否使用冲突分析 |
|
整数参数 |
处理初始解的方式 |
|
整数参数 |
补全不完整的初始解时,求解的子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: 计算最小化加权平方冲突下的原始模型最优可行化松弛。
注意:
FeasRelaxMode=4
和FeasRelaxMode=5
这两种方法不支持混合整数线性规划,仅支持连续线性规划;其余的方法以上两种问题都支持。
参数调优相关
参数名 |
类型 |
参数含义 |
---|---|---|
浮点数参数 |
参数调优的时间限制 |
|
浮点数参数 |
参数调优的时间目标 |
|
整数参数 |
参数调优的最优相对容差目标 |
|
整数参数 |
参数调优的方法 |
|
整数参数 |
参数调优的模式 |
|
整数参数 |
参数调优结果计算方式 |
|
整数参数 |
参数调优每组参数模型计算次数 |
|
整数参数 |
参数调优日志输出强度 |
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模型有效。
并行计算相关
并行计算相关参数用来控制求解算法并行计算的线程数和任务数。
参数名 |
类型 |
参数含义 |
---|---|---|
整数参数 |
问题求解使用的线程数 |
|
整数参数 |
内点法使用的线程数。若值为-1,则线程数由参数 |
|
整数参数 |
对偶单纯形法使用的线程数。若值为-1,则线程数由参数 |
|
整数参数 |
Crossover使用的线程数。若值为-1,则线程数由参数 |
|
整数参数 |
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。
注意
当前COPT的GPU模式仅支持求解线性规划问题,且需要使用一阶算法PDLP,即设置
LpMethod=6
时才起作用。对于Windows,Linux-x86系统,当
GPUMode
取默认值或1时,COPT会尝试检测是否能正常加载GPU求解所需要的CUDA函数库,以及是否存在支持GPU的显卡。 若以上检测均成功,则使用GPU模式进行求解运算;若失败,则继续使用CPU模式的COPT。两者打印COPT启动的信息略有不同。对于MacOS,Linux-aarch64等系统,只提供CPU版本的COPT,即使设置
GPUMode=1
,也会启动CPU版本的COPT进行求解。两者打印COPT启动的信息略有不同。部署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: 显示求解日志到控制台。
参数相关操作
在不同的编程接口中,获取和设置优化参数的方式略有差别,具体请参考:
C 接口:C API函数:获取和设置参数章节
C++ 接口: C++ API参考手册:参数章节
C# 接口: C# API参考手册:参数章节
Java 接口: Java API参考手册:参数章节
Python 接口: Python API参考手册:参数章节