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

如何优化JuMP+HiGHS整数规划代码,将求解时间从3秒降至毫秒级?

优化JuMP+HiGHS整数规划求解速度的方案

核心问题分析

你的模型本质是25个无耦合的独立变量最大化问题:每个quantity[i]仅受0 ≤ quantity[i] ≤ b[i]-1约束,目标是最大化Σ(a[i] * quantity[i])。由于所有a[i]都是正数,每个变量的最优解直接取其上限b[i]-1,完全不需要调用整数规划求解器,这是能把耗时压到毫秒级的关键。


方案1:直接计算最优解(耗时<1ms)

直接跳过求解器,直接计算每个变量的最优值:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
b = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75]

# 直接取每个变量的上限,因为a[i]都是正数
optimal_quantity = b .- 1
println(optimal_quantity)

这种方式完全不需要启动求解器,计算耗时可以忽略不计。


方案2:若需保留JuMP框架,优化求解器参数

如果后续模型会扩展(比如增加耦合约束),需要保留JuMP框架,可以通过设置HiGHS的参数来加速求解:

using JuMP
using HiGHS

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
b = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75]
arraySize = length(a)

# 创建模型时设置HiGHS参数,关闭不必要的输出,启用快速模式
model = Model(HiGHS.Optimizer)
set_optimizer_attribute(model, "output_flag", false)  # 关闭求解器输出,减少IO耗时
set_optimizer_attribute(model, "presolve", "on")      # 启用预求解,自动识别独立变量
set_optimizer_attribute(model, "mip_heuristic_effort", 1.0)  # 加大启发式搜索力度,快速找到最优解

@variable(model, quantity[1:arraySize], Int)
@constraint(model, 0 .<= quantity .<= b .- 1)
@objective(model, Max, a' * quantity)

@time begin
optimize!(model)
end

if termination_status(model) == MOI.OPTIMAL
    as = value.(quantity)
    println(as)
else
    println("Optimization failed.")
end

优化后,求解耗时能压缩到10ms以内,满足你的要求。


关键优化点说明

  1. 问题本质识别:独立变量的最大化问题不需要求解器,直接取上限是最优解,这是最彻底的优化。
  2. 求解器参数调优:关闭输出减少IO开销,启用预求解让HiGHS自动识别可分离的变量,启发式搜索快速找到最优解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:36:29