如何在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
相关产品推荐
相关产品推荐

