docplex中设置时长限制中断模型后如何获取最新上界?
使用docplex求解超时后获取最新上界的操作方法
你可以直接通过求解后的solve_details属性读取对应边界值,具体操作逻辑如下:
- 先在调用求解方法前配置超时参数,参数
timelimit单位为秒 - 求解触发超时终止后,直接读取
model.solve_details.upper_bound即可拿到最新上界 - 若求解过程中还没找到任何可行解,返回的上界值为正无穷
inf,可根据需求做判断处理
代码示例
from docplex.mp.model import Model # 构建模型(变量、约束、目标函数的定义逻辑根据你的需求补充) mdl = Model("demo_model") x = mdl.continuous_var(name="x", lb=0) y = mdl.integer_var(name="y", lb=0) mdl.add_constraint(2*x + 3*y >= 10) mdl.minimize(5*x + 8*y) # 设置运行时长限制为60秒 mdl.parameters.timelimit = 60 # 启动求解,log_output可以打印求解日志方便观察进度 sol = mdl.solve(log_output=True) # 读取超时后的最新上界 latest_upper_bound = mdl.solve_details.upper_bound print(f"求解终止后最新上界:{latest_upper_bound}") # 可选:判断是否为超时终止状态,状态码10对应超时触发的停止 if mdl.solve_details.status_code == 10: print("模型因达到设置的时长限制自动停止") # 也可同步读取当前下界、gap等信息 latest_lower_bound = mdl.solve_details.lower_bound current_gap = mdl.solve_details.gap
补充说明
如果你的求解目标是最大化问题,当前最优可行解对应的值为lower_bound属性,上界则是求解器推导的理论最大值边界,按需读取即可。
内容的提问来源于stack exchange,提问作者Nada.M
相关产品推荐
相关产品推荐

