专栏
标签
TyOptimization包中fmincon函数的bug及解决方案
产品缺陷
发布于 2024-11-09 11:57:37
查看 30过去596天

TyOptimization包中fmincon函数的bug及解决方案

问题描述

在使用TyOptimization包的fmincon函数时,当同时存在线性等式约束(Aeq, beq)和非线性约束(nonlincon)时,会出现以下错误:

ERROR: ArgumentError: number of rows of each array must match (got (1, 3))
Stacktrace:
  [1] _typed_hcat(#unused#::Type{Float64}, A::Tuple{Matrix{Float64}, Matrix{Float64}})
    @ Base .\abstractarray.jl:1654
  [2] typed_hcat
    @ .\abstractarray.jl:1641 [inlined]
  [3] hcat
    @ .\array.jl:1956 [inlined]

问题复现

以下代码会触发上述错误:

using TyOptimization

fun = (x) -> exp(x[1] + 2 * x[2]^2 + 4 * x[1] * x[2] + 2 * x[2] + 1)
x0 = [-1, 1]

A = []
b = []
Aeq = [1 1]
beq = [0]
lb = []
ub = []

nonlincon = x -> begin
    C = [
        1.5 + x[1] * x[2] - x[1] - x[2],
        -x[1] * x[2] - 10
    ]
    Ceq = []
    return C, Ceq
end

xopt, fval = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlincon)

解决方案

经过测试,有以下几种解决方案:

  1. 移除线性等式约束 (将Aeqbeq设为空数组)
  2. 使用SQP算法 (通过options = optimoptions(:fmincon, Algorithm="sqp")指定算法)
  3. 移除非线性约束 (不使用nonlincon)

方案1: 移除线性等式约束

Aeq = []
beq = []

方案2: 使用SQP算法

options = optimoptions(:fmincon, Algorithm="sqp")
xopt, fval = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlincon, options)

方案3: 移除非线性约束

xopt, fval = fmincon(fun, x0, A, b, Aeq, beq, lb, ub)

结论

这个bug似乎是由于TyOptimization包在处理同时存在的线性等式约束和非线性约束时出现了接口错误。建议在使用fmincon函数时,如果遇到类似错误,可以尝试上述解决方案。也期待官方尽快修复,为我国科技、工业发展打下坚实基础。


相关附件附上,敬请官方维护。

所属专栏:Syslab基础平台
产品信息:Syslab科学计算环境
系统信息:Win10或11
科学计算
附件 1 个附件(3kb)

全部回答 1

发布于 2024-11-09 17:39:45

您好,感谢您的反馈,经过我们确认,当您使用 fmincon 而不指定算法选项时,默认将会以“active-set”算法执行最小化。
反馈的这个案例bug并非接口错误,而是该案例中同时处理线性约束和非线性约束时算法内部执行到某一步的矩阵拼接维度不匹配,此前该问题已于内部发现并修复,后续会上线,请您关注同元软控官网软件更新信息。

以下为复现代码(提供的报错案例,同时包含线性与非线性约束,使用默认算法):

fun = (x) -> exp(x[1] + 2 * x[2]^2 + 4 * x[1] * x[2] + 2 * x[2] + 1)
x0 = [-1, 1]

A = []
b = []
Aeq = [1 1]
beq = [0]
lb = []
ub = []

nonlincon = x -> begin
    C = [
        1.5 + x[1] * x[2] - x[1] - x[2],
        -x[1] * x[2] - 10
    ]
    Ceq = []
    return C, Ceq
end

xopt, fval = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlincon)

修复后的运行结果:

特别提醒:您可以参与MWORKS 2024b体验官征文活动,只需要将本文链接添加到帖子下方的回答中即可报名参与,活动详情可见链接。

用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天