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

如何在Pyomo中调用HiGHS solver时显示求解过程信息?

解决Pyomo调用HiGHS时tee=True无输出的问题

问题原因

Pyomo的HiGHS接口目前未完全适配tee=True参数的输出逻辑,无法通过该参数直接触发求解过程日志输出,而Gurobi、CBC等求解器的接口已完善此功能。此外,HiGHS自身的日志输出需要通过专属配置选项开启。

解决方法

1. 通过HiGHS求解器选项开启日志

HiGHS支持通过log_level(新版本)或output_flag(旧版本)选项控制日志输出,在创建求解器时传入对应参数即可:

from pyomo.environ import ConcreteModel, Var, Objective, Constraint, SolverFactory

# 构建示例模型
model = ConcreteModel()
model.x = Var(within=NonNegativeReals)
model.obj = Objective(expr=model.x)
model.constr = Constraint(expr=model.x >= 5)

# 新版本HiGHS(v1.5+)使用log_level设置日志级别
solver = SolverFactory('highs', options={'log_level': 'verbose'})
# 旧版本HiGHS使用output_flag开启输出
# solver = SolverFactory('highs', options={'output_flag': True})

# 执行求解,tee=True仍需保留
result = solver.solve(model, tee=True)

log_level可选值:off、error、warn、info、verbose、debug,可根据需求选择输出级别。

2. 手动捕获并打印输出(备选方案)

如果上述方法无效,可通过重定向标准输出手动捕获求解器日志:

from pyomo.environ import *
import io
from contextlib import redirect_stdout

model = ConcreteModel()
model.x = Var(within=NonNegativeReals)
model.obj = Objective(expr=model.x)
model.constr = Constraint(expr=model.x >= 5)

solver = SolverFactory('highs')
with io.StringIO() as buf, redirect_stdout(buf):
    result = solver.solve(model, tee=True)
    solver_output = buf.getvalue()

# 打印捕获的求解过程信息
print(solver_output)

3. 依赖版本检查

  • 确保Pyomo为最新版本:执行pip install --upgrade pyomo更新
  • 检查HiGHS版本:终端执行highs --version,根据版本选择对应配置选项(新版本优先用log_level)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:57:34