Pyomo调用CoinOR CBC求解器时seconds时间限制参数不生效问题
问题排查结论
你在参数传递环节没有错误,日志输出seconds was changed from 1e+100 to 3已经证明参数被CBC成功接收并生效,实际运行时间超出限制是CBC的计时规则导致的。
- CBC的
seconds参数仅统计MIP分支定界核心求解阶段的耗时,以下环节的耗时不会被计入该参数的限制范围:- Pyomo将本地模型对象转换为CBC可识别输入格式的耗时
- CBC的模型预处理、割平面生成、初始可行解构造的前置步骤耗时
- 触发时间限制后,CBC整理求解结果、输出日志、回写可行解的后置步骤耗时
- 求解结果从CBC进程回传到Pyomo对象的耗时
- 如果你求解的是纯线性规划(LP)模型而非整数规划(MIP)模型,部分版本的CBC的
seconds参数仅对MIP场景生效,你可以替换参数为通用时间限制参数tmlim验证效果,写法如下:
# 全局设置参数 opt = SolverFactory('cbc') opt.options['tmlim'] = 3 # 求解时传入参数 results = opt.solve(model, options={"tmlim": 3}, tee=True)
- 你可以通过
tee=True输出的完整日志查看分支定界阶段的单独耗时统计,该数值会符合你设置的3秒限制,多出来的运行时间均为前后置步骤的额外开销。
内容的提问来源于stack exchange,提问作者user16906647
相关产品推荐
相关产品推荐

