如何设置 Pyomo solve(( 方法的超时?更具体地说,告诉pyomo,在x秒后,返回当前找到的最佳解决方案?
所以我能够通过 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 文档的更多信息。
我在 Pyomo 中取得了以下成功。对于不同的求解器,时间限制选项的名称是不同的:
self.solver = pyomo.opt.SolverFactory(SOLVER_NAME)
if 'cplex' in SOLVER_NAME:
self.solver.options['timelimit'] = TIME_LIMIT
elif 'glpk' in SOLVER_NAME:
self.solver.options['tmlim'] = TIME_LIMIT
elif 'gurobi' in SOLVER_NAME:
self.solver.options['TimeLimit'] = TIME_LIMIT
elif 'xpress' in SOLVER_NAME:
self.solver.options['soltimelimit'] = TIME_LIMIT
# Use the below instead for XPRESS versions before 9.0
# self.solver.options['maxtime'] = TIME_LIMIT
其中TIME_LIMIT
是以秒为单位的整数时间限制。