首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Julia-JuMP中实现非线性约束的问题

Julia-JuMP中实现非线性约束的问题
EN

Stack Overflow用户
提问于 2020-11-27 03:45:40
回答 1查看 104关注 0票数 1

我正在尝试解决一个优化问题,涉及矩阵在其中一个约束条件下的求逆。简化版如下:

代码语言:javascript
复制
a = [1 1e-3;1e-3 1]
n = 2
f(Q...) = inv(reshape(collect(Q), (n, n)))
g(x...) = reshape(collect(x), (n,n))
NSD = Model(with_optimizer(Ipopt.Optimizer))
@variable(NSD, Q[1:n, 1:n])
@variable(NSD, aux[1:n, 1:n])
register(NSD, :f, n*n, f, autodiff=true)
register(NSD, :g, n*n, g, autodiff=true)
@constraint(NSD, aux .== a)
@NLconstraint(NSD, invconst[i=1:n, j=1:n], f(Q...)[i,j] >= g(aux...)[i,j])
@objective(NSD, Max, 0)
optimize!(NSD)

然而,这段代码一直向我显示以下我无法解决的错误消息:LoadError: Cannot divide a quadratic expression by an aff. expression

有人能帮我弄清楚这里的问题吗?

EN

回答 1

Stack Overflow用户

发布于 2020-11-27 07:20:12

用户定义的函数必须返回单个标量。它们不能返回矩阵。

您的应用程序中的n是什么?如果是n > 2,这几乎肯定不是您想要做的事情。

如果为n = 2,只需显式地写出逆数即可。

我添加了一个对JuMP有帮助的示例:https://github.com/jump-dev/JuMP.jl/pull/2379

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65028383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档