COPT调优工具
调优工具基本介绍
对于支持的优化问题类型,杉数求解器COPT调优工具可以进行求解性能的自动调优。对于连续/非连续优化问题,支持的调优模式有所不同:
离散优化问题:支持调优求解时间、最优相对容差、目标函数值和目标函数值下界;
连续优化问题:支持调优求解时间。
COPT调优工具的工作流程如下:
首先,进行基准计算,并允许用户自定义基准计算参数;
然后,逐次生成调优参数,通过参数调优计算寻找改进求解性能的参数组合。
调优工具相关参数
调优工具相关的参数及对应含义,如 表 47 所示:
参数名 |
类型 |
参数含义 |
---|---|---|
|
浮点数参数 |
参数调优的时间限制 |
|
浮点数参数 |
参数调优的时间目标 |
|
整数参数 |
参数调优的最优相容差目标 |
|
整数参数 |
参数调优的方法 |
|
整数参数 |
参数调优的模式 |
|
整数参数 |
参数调优结果计算方式 |
|
整数参数 |
参数调优每组参数模型计算次数 |
|
整数参数 |
参数调优日志输出强度 |
参数调优功能
COPT调优工具提供了以下功能:
调优方法
该功能由参数 TuneMethod
控制,提供如下两种搜索方式:
贪婪搜索方法:期望以较少次数参数调优计算,寻找较优的参数设置;
广泛搜索方法:尝试更多的参数组合,具有更大的搜索空间,更可能寻找到较优的参数设置,但同时也会消耗更多的调优时间。
参数 TuneMethod
的可能取值及对应含义如下,通过设置其为不同取值,以进行搜索方式的选择,默认设置为自动选择。
-1: 自动选择
0: 贪婪搜索策略
1: 更广泛的搜索策略
调优模式
该功能由参数 TuneMode
控制,可选项有:求解时间、最优相对容差、目标函数值和目标函数值下界,默认设置为自动选择。不同调优模式选项分别对应该参数的不同取值:
0: 求解时间
1: 最优相对容差
2: 目标函数值
3: 目标函数值下界
注意: 对于整数规划问题,默认设置下,若基准计算在给定的时间限制内未将模型求至最优,则调优工具将自动将调优模式切换为最优相对容差。
调优扰动次数
该功能由参数 TunePermutes
控制。为了测试模型求解性能的扰动变化,COPT调优工具允许用户指定每次参数调优计算运行模型的次数,默认设置为自动选择。
调优准则
该功能由参数 TuneMeasure
控制,用来选择计算调优结果的计算方式。
当用户每次参数调优计算运行多次模型时,COPT调优工具将根据设置的调优准则计算合成的调优值。
该参数的可选项有:平均值和最大值,默认设置为自动选择。
0: 计算平均值
1: 计算最大值
调优目标
该功能由参数 TuneTargetTime
和 TuneTargetRelGap
控制。
COPT调优工具允许用户指定求解时间和最优相对容差作为调优目标,当调优工具发现满足指定调优目标的参数后,即自动终止调优。
对于求解时间,默认值为0.01秒,对于最优相对容差,默认值为 1e-4
。
调优日志输出
该功能由参数 TuneOutputLevel
控制,默认输出每次调优尝试的摘要。可选项及对应参数取值如下:
0: 不输出调优日志
1: 仅输出改进参数的摘要
2: 输出每次调优尝试的摘要
3: 输出每次调优尝试的详细日志
调优时间限制
该功能由参数 TuneTimeLimit
控制,它表示参数调优计算的时间限制。默认设置为自动选择。
用户自定义部分
用户可以自定义以下部分:
自定义基准参数:
COPT调优工具允许用户设置基准计算的参数,在后续的参数调优计算中,这些参数将作为固定参数,COPT调优工具将不会对固定参数进行调优。
自定义整数初始解:
COPT调优工具允许用户设置基准计算的初始解,在后续的参数调优计算中,也将使用这些初始解进行计算。
自定义调优文件
COPT调优工具允许用户从调优文件中读取待选择的参数组合,此时调优工具将以指定的参数组合为依据进行参数调优计算,否则COPT调优工具将自动生成参数组合进行调优计算。
注意: COPT调优文件与COPT参数文件格式相似,区别在于调优文件允许单个参数指定多个值。
获取调优结果
参数调优结束后,可以通过属性 TuneResults
获取参数调优结果数目,也可以加载指定编号的调优结果到模型或者写入到参数文件中。
COPT提供输出指定编号的参数调优结果到参数文件(".par"
)中,需要指定的参数有:
idx
:参数调优结果编号filename
:文件名称
不同编程接口中对应的函数如下:
编程接口 |
函数 |
---|---|
C |
|
C++ |
|
C# |
|
Java |
|
Python |
|
参数调优示例
例如,使用COPT命令行工具对模型 "foo.mps"
进行调优以改进求解时间,相关命令为:
copt_cmd -c "read foo.mps; tune; exit"
以Python接口为例,使用COPT调优工具的代码示例如下:
env = Envr()
m = env.createModel()
m.read("foo.mps")
m.tune()