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

如何在Pyomo中让GLPK求解器在预解/首次迭代后停止并使用结果

在Pyomo中用GLPK实现指定节点数/首次可行解后停止求解

问题分析

你尝试用mipgap、tmlim参数实现停止需求无效,原因主要有两点:

  1. 参数取值或类型错误:GLPK的mipgap是小数形式(如0.05对应5%),设为100会被解析为10000%的间隙,完全不符合预期;tmlim是时间限制,无法精准控制到指定迭代/节点数。
  2. 参数不匹配需求:你需要的是按节点数或首次可行解停止,而非间隙或时间触发。

解决方案

GLPK提供了直接匹配需求的参数,通过Pyomo的solver.options传递即可:

方案1:指定最大节点数停止(如1811节点后终止)

直接设置max_nodes参数,GLPK在探索完指定数量的分支定界节点后停止,返回当前找到的最优可行解:

solver = SolverFactory("glpk")
# 设置最大探索节点数为1811
solver.options["max_nodes"] = 1811
results = solver.solve(pyomo_model, options={"seed": PYOMO_SEED}, tee=True)
results.write()

# 可选:验证结果并输出目标值
print("求解状态:", results.solver.status)
print("终止条件:", results.solver.termination_condition)
print("当前目标函数值:", pyomo_model.obj())

方案2:找到第一个可行解后立即停止

如果不需要等到1811节点,只要找到第一个可行解就终止,启用first参数:

solver = SolverFactory("glpk")
# 找到第一个可行解后停止
solver.options["first"] = True
results = solver.solve(pyomo_model, options={"seed": PYOMO_SEED}, tee=True)
results.write()

参数说明

  • max_nodes:控制分支定界过程中允许探索的最大节点数,精准匹配你需要的1811步节点终止需求。
  • first:启用后GLPK会在找到第一个可行解时立刻停止,适合只需要任意可行解的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:05:29