如何设置Pyomo求解器超时?

时间:2016-02-15 09:29:11

标签: python timeout solver pyomo

如何设置Pyomo solve()方法的超时?更具体地说,告诉pyomo,在x秒后,返回当前找到的最佳解决方案?

2 个答案:

答案 0 :(得分:4)

所以我能够通过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)

有关pyomocplex docs的详情。

答案 1 :(得分: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是以秒为单位的整数时间限制。