SCIP求解加速方法及参数设置咨询:无需最优解快速求解
快速获取SCIP可行解的参数调优方案
如果只需要快速拿到可行解、不需要最优解,核心思路是让SCIP优先聚焦于生成可行解,同时砍掉所有为证明最优性服务的耗时操作,以下是具体可落地的参数设置:
一、设置终止触发条件,及时停求解
- 给求解加时间上限:用
limits/time参数指定最大运行时间,比如设10秒就写set limits/time 10,到点直接终止,不管当前解的质量。 - 找到第一个可行解就停:开启
limits/firstsolution参数并设为true,SCIP一旦找到第一个可行解,立刻停止整个求解流程。
二、关闭最优性相关的冗余计算
- 关掉切割平面生成:把
separating/maxrounds设为0,完全禁用切割平面(这部分是用来收紧松弛解、辅助证明最优的,对找可行解没用);同时separating/abortquick设为true,即使没关完切割,也快速终止分离过程。 - 限制分支树深度:设置
branching/maxdepth为较小值(比如20),不让SCIP过度探索分支树的深层节点,减少无用搜索。 - 简化预处理:把
presolving/maxrounds设为1,只做一轮预处理;presolving/aggressive设为false,关闭激进预处理模式,避免在预处理上花太多时间。
三、优先调用快速找可行解的启发式
- 提升构造类启发式的调用频率:比如把
heuristics/randround/freq设为10,让随机舍入启发式更频繁运行;heuristics/feaspump/freq设为5,增加可行解泵的调用次数——这类启发式都是快速生成可行解的主力。 - 启用轻量快速启发式:设置
heuristics/fastimplied/freq为1,开启快速隐含变量启发式,能快速挖掘可行解。
四、减少额外开销
- 关闭详细日志:把
display/verblevel设为0,减少日志输出的IO开销,能小幅提升速度。 - 合理设置内存限制:如果机器内存充足,可以适当调大
limits/memory;如果内存紧张,设小一点避免系统swap拖慢求解。
内容的提问来源于stack exchange,提问作者Kelly Kong
相关产品推荐
相关产品推荐

