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

Julia/JuMP中Couenne求解器超时后无法获取可行最优解求助

在Julia/JuMP中使用Couenne求解MINLP无法导出有效可行解的问题

使用Julia/JuMP调用MINLP求解器Couenne时,遇到时限到达后无法导出有效可行解的问题。当设置60秒求解时限结束后,求解状态显示primal_status=FEASIBLE_POINT、termination_status=LOCALLY_SOLVED,但返回的决策变量全为0、目标值为0,完全不符合预期。同一问题用SCIP求解,时限到达后能正常返回中间最优可行解。


配置与代码

Couenne配置文件(couenne.opt)

time_limit 60
allowable_gap 1
allowable_fraction_gap 0.0001
feas_tolerance 0.0001

Julia调用代码

using AmplNLWriter, Couenne_jll
model = Model(() -> AmplNLWriter.Optimizer(Couenne_jll.amplexe))

求解日志

Couenne 0.5.8 -- an Open-Source solver for Mixed Integer Nonlinear Optimization
Mailing list: couenne@list.coin-or.org
Instructions: http://www.coin-or.org/Couenne
couenne: 
ANALYSIS TEST: Reformulating problem: 11.8 seconds
NLP0012I 
              Num      Status      Obj             It       time                 Location
NLP0014I             1         OPT -0.39672801       76 6.214076
NLP0014I             2        TIME 0        2 0.102525
Loaded instance "\/var\/folders\/sx\/gcm0k6yd7fng162n002d7h440000gp\/T\/jl_Fz3AVB\/model.nl"
Constraints:           82
Variables:           1375 (1291 integer)
Auxiliaries:           38 (4 integer)

Clp0000I Optimal - objective value -3687.1319
Clp0032I Optimal objective -3687.13193 - 0 iterations time 0.002
Clp0000I Optimal - objective value -3687.1319
Cbc0004I Integer solution of -3687.1319 found after 0 iterations and 0 nodes (0.01 seconds)
Cbc0001I Search completed - best objective -3687.131929999996, took 0 iterations and 0 nodes (0.01 seconds)
Cbc0035I Maximum depth 0, 0 variables fixed on reduced cost
Clp0000I Optimal - objective value -3687.1319

        "Finished"

Linearization cuts added at root node:          0
Linearization cuts added in total:              0  (separation time: 0s)
Total solve time:                        0.012623s (0.012624s in branch-and-bound)
Lower bound:                             -3687.13
Upper bound:                             -3687.13  (gap: 0.00%)
Branch-and-bound nodes:                         0
Performance of                           FBBT:      0.01599s,        1 runs. fix:          0 shrnk:     1172.2 ubd:          0 2ubd:          2 infeas:          0
*****************************
primal_status=FEASIBLE_POINT
termination_status=LOCALLY_SOLVED
Solution Status is local optimal solution
Objective Value:0.0

Solution for Decision Variables:
[0, 0, ..., 0]

排查与解决建议

  • 确认Couenne是否读取到配置文件:Couenne默认读取当前工作目录下的couenne.opt,但通过AmplNLWriter调用时可能需要显式指定路径,或直接在代码中设置参数:

    # 显式指定配置文件
    model = Model(() -> AmplNLWriter.Optimizer(Couenne_jll.amplexe, ["--couenne_options=./couenne.opt"]))
    
    # 或直接在代码中设置参数
    set_optimizer_attribute(model, "time_limit", 60)
    set_optimizer_attribute(model, "allowable_gap", 1)
    set_optimizer_attribute(model, "allowable_fraction_gap", 0.0001)
    set_optimizer_attribute(model, "feas_tolerance", 0.0001)
    
  • 强制保留最佳可行解:添加best_solution参数,确保Couenne在时限到达后返回求解过程中找到的最优可行解:

    set_optimizer_attribute(model, "best_solution", "yes")
    
  • 检查模型导出的NL文件:启用keepfiles=true保留临时NL文件,确认模型是否正确导出:

    model = Model(() -> AmplNLWriter.Optimizer(Couenne_jll.amplexe, keepfiles=true))
    

    查看临时目录下的NL文件,验证变量、约束和目标函数是否与预期一致。

  • 调整求解策略:从日志看,Couenne根节点未添加线性化切割且分支定界节点数为0,尝试启用切割增强求解:

    set_optimizer_attribute(model, "cutting_plane", "yes")
    set_optimizer_attribute(model, "max_cuts", 100)
    
  • 更新Couenne版本:当前使用的Couenne 0.5.8版本较旧,可能存在时限处理bug,尝试更新Couenne_jll到最新版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:25:33