如何设置 Pyomo 求解器超时?
Posted
技术标签:
【中文标题】如何设置 Pyomo 求解器超时?【英文标题】:How to set Pyomo solver timeout? 【发布时间】:2016-05-26 03:26:22 【问题描述】:如何设置 Pyomo solve() 方法的超时时间?更具体地说,告诉pyomo,在x秒后,返回当前找到的最优解?
【问题讨论】:
【参考方案1】:所以我能够通过 pyomo 文档找到答案,我认为分享会有所帮助。
设置 Pyomo solve()
方法的超时时间:
solver.solve(model, timelimit=5)
但是,如果求解器没有终止,这将抛出 pyutilib.common._exceptions.ApplicationError: "Solver (%s) did not exit normally" % self.name )
。我真正想要的是将timelimit
选项传递给我的求解器。在我的cplex
求解器的情况下,代码将是这样的:
solver = SolverFactory('cplex')
solver.options['timelimit'] = 5
results = solver.solve(model, tee=True)
更多关于pyomo 和cplex docs。
【讨论】:
我正在做同样的事情(虽然使用'cbc'求解器,但不确定这是否相关)但我认为这不能回答最初的问题:“告诉 pyomo,x 秒后,返回当前找到的最优解。”这似乎只是抛出了提到的错误。即使它不是最优的和/或不满足所有约束,它是否应该返回一个实际的“解决方案”?这可能吗?【参考方案2】:我在 PYOMO 中取得了以下成功。 cplex 和 glpk 的时间限制选项名称不同。
self.solver = pyomo.opt.SolverFactory(SOLVER_NAME)
if SOLVER_NAME == 'cplex':
self.solver.options['timelimit'] = TIME_LIMIT
elif SOLVER_NAME == 'glpk':
self.solver.options['tmlim'] = TIME_LIMIT
elif SOLVER_NAME == 'gurobi':
self.solver.options['TimeLimit'] = TIME_LIMIT
其中 TIME_LIMIT 是以秒为单位的整数时间限制。
【讨论】:
以上是关于如何设置 Pyomo 求解器超时?的主要内容,如果未能解决你的问题,请参考以下文章
在 ubuntu 中安装 Ipopt 求解器以与 Pyomo 一起使用
皮莫 | Couenne 求解器 |将索引变量域限制为两个整数值