You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询Pyomo中Bonmin求解器迭代次数对应的存储变量

问题

我在Pyomo中使用Bonmin求解器,设置tee=True后求解模型,得到如下输出:
Cbc0001I Search completed - best objective 41573.30169699511, took 11448 iterations and 220 nodes (18.05 seconds)
Cbc0032I Strong branching done 18 times (570 iterations), fathomed 0 nodes and fixed 0 variables
Cbc0035I Maximum depth 11, 0 variables fixed on reduced cost。
请问哪个变量保存了该迭代次数(11448)?我推测它可能存在于solver_message中。

解答

嘿,你猜的方向完全没错!solver_message确实能拿到这个信息,但其实还有更省心的方式——不用自己去解析日志字符串,Pyomo已经帮你把关键指标提取好了:

  • 优先方案:直接从求解结果对象提取
    当你调用Bonmin求解后,会得到一个solver_results对象(就是SolverFactory('bonmin').solve(model, tee=True)返回的那个)。由于Bonmin底层基于Cbc,你可以直接从结果的solver字段里读取总迭代次数:

    # 假设你已经执行了求解,结果存在solver_results里
    total_iterations = solver_results.solver.iterations
    

    这个值就是你要的11448,完全不用自己处理日志文本,靠谱又省事。

  • 备用方案:解析solver_message
    如果遇到求解器版本兼容或者其他特殊情况,上面的方法取不到值,你可以手动解析solver_message里的日志内容。solver_message是一个包含完整求解日志的字符串,用正则表达式就能匹配出迭代次数:

    import re
    
    # 从求解结果中拿到日志
    solver_log = solver_results.solver.message
    # 匹配"took X iterations"格式的内容
    match_result = re.search(r'took (\d+) iterations', solver_log)
    if match_result:
        total_iterations = int(match_result.group(1))
    

需要提醒的是,不同版本的Bonmin/Cbc输出格式可能略有微调,所以优先推荐第一种直接提取字段的方式,稳定性更高。

内容的提问来源于stack exchange,提问作者lymbot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:41:06