【问题标题】:The sub-optimal with docplex (cplex) when time limit is reached?达到时间限制时,docplex(cplex)的次优?
【发布时间】:2020-02-08 09:14:05
【问题描述】:

我正在使用具有最大化目标的 Docplex(Cplex python 版本)。我设置了时间限制,使用

mdl.solve(TimeLimit=600)。

有可能模型在这段时间内没有达到最优,所以我想在达到 timeLimit 时得到目标值(次优)。我该怎么做? 为了达到最佳效果,我使用:

mdl.get_objective_values()

达到时间限制时它给我None!

谢谢,

【问题讨论】:

    标签: python-3.x cplex docplex


    【解决方案1】:

    您的模型可能不可行或无法在给定的时间限制内提供解决方案。 你应该在解决后测试状态:

        sol = mdl.solve(TimeLimit=600)
        if sol is not None:
    
            print_information("Ok")
    
        else:
            print("* model is infeasible")
    

    【讨论】:

    • 但是我怎样才能检索次优解决方案(变量值)?因为使用 sol.get_objective_bounds() 我得到了目标的最后一个界限......当它是最佳时, sol.get_var_solution(variables) 返回我需要的......
    • 查看 CPLEX_Studio1210\python\examples\mp\modeling (model.parameters.timelimit = 120) 和更高版本 (model.nurse_assignment_vars[n, s].solution_value) 中的nurse.py
    • 谢谢。实际上,我正在使用 CP“mdl=CpoModel()”。我检查了 example\cp\modeling 中的所有示例。但显然,如果解决方案不是最优的,则无法访问次优值。你认为我应该切换到 mp 吗?
    • 与CPO相同,但如果没有找到解决方案,您将无法得到它
    • 抱歉这个愚蠢的问题,我是 cplex 的新手......如果没有解决方案,为什么我会得到目标的绑定值? stopCause 显示:SearchStoppedByLimit,所以逻辑上我应该能够访问显示边界的解决方案,即使它不是最佳的?我有什么不对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 2019-07-20
    • 2021-08-23
    • 1970-01-01
    • 2020-10-30
    • 2021-06-13
    相关资源
    最近更新 更多