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

JuMP 0.20如何通过!optimize获取松弛解?

嘿,这个问题我太熟悉了!JuMP从0.18版本升级到新API后,solve()函数被optimize!()替代,原来的relaxation=true参数也确实被移除了,但获取MIP松弛解的方法其实更清晰可控了,具体操作如下:

获取JuMP新版本中整数规划松弛解的方法

推荐方法:创建独立的松弛模型

这是最安全且清晰的方式,不会影响原模型的结构:

  • 步骤1:生成松弛模型
    使用relax_integrality()函数,它会创建一个原模型的副本,并将所有整数/二进制变量转换为连续变量:

    # 假设你的原整数规划模型名为model
    relaxed_model = relax_integrality(model)
    
  • 步骤2:求解松弛模型
    用新版的optimize!()求解这个松弛后的模型:

    optimize!(relaxed_model)
    
  • 步骤3:提取松弛解
    求解完成后,用value()函数获取变量的松弛值,比如:

    # 获取单个变量x的松弛解
    x_relaxed = value(relaxed_model[:x])
    
    # 遍历所有变量打印松弛解
    for var in all_variables(relaxed_model)
        println("变量$(name(var))的松弛解:$(value(var))")
    end
    

备选方法:临时修改原模型变量类型(不推荐)

如果你不想创建新模型,也可以临时修改原模型中离散变量的类型,求解后再恢复,但这种方式容易因遗漏恢复步骤导致原模型损坏,仅作了解:

# 先保存所有变量的原始类型
original_var_types = Dict(var => variable_type(var) for var in all_variables(model))

# 将所有整数/二进制变量松弛为连续变量
for var in all_variables(model)
    if variable_type(var) <: Union{Integer, Binary}
        set_variable_type(var, Continuous)
    end
end

# 求解松弛后的原模型
optimize!(model)

# 提取松弛解(操作同前)
# ...

# 务必恢复变量原始类型,避免影响后续使用
for (var, orig_type) in original_var_types
    set_variable_type(var, orig_type)
end

总的来说,优先用relax_integrality()的方法,既简洁又不会破坏原模型的结构,是JuMP官方推荐的做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:34:10