You need to enable JavaScript to run this app. 如何在Gurobi中设置限时求优、超时按相对间隙终止的条件?
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gurobi中设置限时求优、超时按相对间隙终止的条件?

适配规则的Gurobi求解配置方案

核心逻辑说明

不能直接靠静态参数完成配置:

  • 若初始就将相对间隙设为0.05,求解器会在间隙达到5%时提前终止,哪怕离全局最优仅剩极小差距,也不会继续计算,无法满足“3600s内可求到最优就必须返回最优解”的要求。

匹配规则的正确实现逻辑:

  • 采用两阶段求解流程,完全贴合终止规则:
    • 第一阶段:以追求严格全局最优为目标,设置3600s的求解时间上限。如果该阶段内求解器经证明找到全局最优,直接返回该解,无后续操作。
    • 第二阶段:若3600s到期仍未求出全局最优,再将相对间隙终止阈值设为0.05,在已有求解进度的基础上继续求解,只要间隙满足要求即可自动终止,不再强制追求严格最优。

具体Python实现步骤

  • 导入Gurobi接口与状态枚举常量:
    import gurobipy as gp
    from gurobipy import GRB
    
  • 完成二次优化问题的模型构建(变量、二次目标函数、约束的定义,此处省略通用建模代码)后,进行第一阶段求解配置:
    # 第一阶段:追求严格最优,设置3600s时间上限
    model.Params.TimeLimit = 3600
    # 保持Gurobi默认的MIPGap设置(默认值1e-4,即间隙小于0.01%即判定为最优)
    model.optimize()
    
  • 根据第一阶段的求解状态做分支适配:
    if model.Status == GRB.OPTIMAL:
        # 3600s内成功求得全局最优,直接处理/输出结果即可
        print("已在限定时长内求得全局最优解")
    else:
        # 3600s到期未找到最优,切换为0.05相对间隙的终止规则
        model.Params.MIPGap = 0.05
        # 在已有求解基础上继续求解,无需从头计算
        model.optimize()
        print("限定时长内未求得最优,按5%相对间隙规则终止")
    

关键参数与注意事项

  • TimeLimit:单阶段求解的最大运行时长(单位:秒),超时即强制终止当前阶段求解。
  • MIPGap:相对间隙终止阈值,计算方式为abs(当前可行解目标值 - 已知最优边界值) / max(abs(当前可行解目标值), 1e-10),当间隙值小于等于该阈值时,求解器自动终止。
  • GRB.OPTIMAL:求解器状态枚举值,代表当前解为经求解器证明的全局最优解。
  • *注意:MIPGap参数仅对包含整数/离散变量的混合整数二次规划问题生效;如果求解的是纯连续凸二次规划问题,Gurobi可直接计算全局最优,无需间隙设置,仅配置3600s时间上限即可,若超时则代表问题规模超出限定时长的求解能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 13:36:03