如何设置Pyomo求解器的超时时间?

8

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

2个回答

13

我通过 Pyomo 文档找到了答案,觉得分享一下可能会有帮助。

设置 Pyomo 的 solve() 方法的超时时间:

solver.solve(model, timelimit=5)

然而,如果求解器未被终止,这将会抛出 pyutilib.common._exceptions.ApplicationError: "Solver (%s) did not exit normally" % self.name ) 的异常。我真正想要做的是将 timelimit 选项传递给我的求解器。对于求解器来说,代码应该像这样:

solver = SolverFactory('cplex')
solver.options['timelimit'] = 5
results = solver.solve(model, tee=True)

更多关于pyomocplex文档


2
我正在做同样的事情(尽管使用“cbc”求解器,不确定是否相关),但我认为这并没有回答原始问题:“告诉pyomo,在x秒后,返回当前找到的最优解。” 这似乎只会引发上述错误。即使不是最优的和/或不满足所有约束条件,它是否应该返回实际的“解决方案”?这可能吗? - seth127

10
我在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是以秒为单位的整数时间限制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接