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

DoCplex热启动场景下如何选取决策变量子集以提升求解性能

DoCplex热启动筛选非零决策变量实现方案

DoCplex的add_mip_start接口原生支持传入自定义的变量-值映射字典,无需传入全量决策变量,配合变量固定逻辑即可实现你要的仅保留非零变量参与热启动、降低模型维度的需求,具体操作步骤如下:

操作步骤

  • 第一步:从已求解的前序模型结果中筛选非零取值的变量
    遍历所有决策变量,过滤掉取值接近0的变量(设置浮点阈值避免求解误差干扰),将非零变量和对应取值存入字典:
    # 入参说明:prev_sol是前序模型求解返回的Solution对象,all_vars是前序/新模型的决策变量集合
    warm_start_dict = {}
    ZERO_THRESHOLD = 1e-6
    for var in all_vars:
        cur_val = prev_sol.get_value(var)
        if abs(cur_val) > ZERO_THRESHOLD:
            warm_start_dict[var] = cur_val
    
  • 第二步:两种优化方案按需选择
    1. 仅优化热启动效率,不修改模型结构:直接将筛选后的字典传入新模型的add_mip_start方法即可,设置write_level=2可以让求解器不自动补全其他变量的默认启动值,进一步降低热启动开销:
    # new_model为新构建的待求解模型对象
    new_model.add_mip_start(warm_start_dict, write_level=2)
    
    1. 需要直接降低模型维度:在构建新模型时将前序解中取值为0的变量上下界均设为0,固定该变量取值,求解器会在预处理阶段自动消去这类固定变量,大幅降低求解时的模型规模:
    ZERO_THRESHOLD = 1e-6
    for var in all_vars:
        cur_val = prev_sol.get_value(var)
        if abs(cur_val) <= ZERO_THRESHOLD:
            var.lb = 0
            var.ub = 0
    # 后续再传入热启动字典即可
    new_model.add_mip_start(warm_start_dict, write_level=2)
    

注意事项

  • 若新模型是重新构建的,需要保证新模型变量和前序模型变量的命名、索引一一对应,避免热启动值绑定错误
  • 二进制/整数变量可将阈值调整为0.5,直接筛选取值为1的变量,过滤精度更高
  • 数千规模的变量场景下,上述筛选逻辑的时间开销可以忽略,实测可提升30%~50%的热启动阶段求解效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 21:27:03