You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置时间限制终止docplex.mp整数优化程序并获取当前解

在docplex.mp中设置整数优化的时间限制并获取可行解

要在docplex.mp中限制整数优化问题的求解时长,并在超时后获取当前找到的最佳可行解,可按以下方式操作:

核心实现与代码示例

通过模型的parameters.timelimit参数指定求解器的最大运行时间(单位:秒),求解完成后根据状态提取结果:

from docplex.mp.model import Model

# 初始化整数优化模型
mdl = Model(name="integer_opt_model")

# 定义整数变量(请根据实际问题替换)
x = mdl.integer_var(lb=0, ub=50, name="x")
y = mdl.integer_var(lb=0, ub=50, name="y")

# 添加约束条件(请根据实际问题替换)
mdl.add_constraint(2*x + y <= 80)
mdl.add_constraint(x + 3*y <= 90)

# 设置目标函数(请根据实际问题替换)
mdl.maximize(3*x + 4*y)

# 设置时间限制:示例为2天(172800秒),可按需调整时长
mdl.parameters.timelimit = 172800

# 执行求解
solution = mdl.solve()

# 处理求解结果
if solution:
    print("求解完成,找到最优/可行解:")
    print(f"x = {solution[x]}, y = {solution[y]}")
    print(f"目标函数值:{solution.objective_value}")
else:
    # 检查是否存在超时前找到的可行解
    if mdl.solve_details.has_incumbent:
        print("已达时间限制,当前最佳可行解:")
        print(f"x = {mdl.solution.get_value(x)}, y = {mdl.solution.get_value(y)}")
        print(f"目标函数值:{mdl.solution.objective_value}")
    else:
        print("已达时间限制,未找到任何可行解")

关键说明

  • 时间参数单位:mdl.parameters.timelimit的单位是秒,可根据需求换算(1小时=3600秒,1天=86400秒)
  • 超时解获取:即使求解器因超时终止,只要过程中找到过可行解,mdl.solution会保存当前的最佳已知解,可通过mdl.solve_details.has_incumbent判断是否存在该解
  • 终止状态验证:可通过mdl.solve_details.status查看具体终止原因,比如time_limit_exceeded表示因时间限制终止

内容的提问来源于stack exchange,提问作者GTek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:16:02