julia - 在 Julia-JuMP 中实现非线性约束的问题
问题描述
我正在尝试解决一个优化问题,该问题涉及在其约束之一中矩阵的逆。简化版如下:
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
有人可以帮我解决这里的问题吗?
解决方案
用户定义的函数必须返回单个标量。他们不能返回一个矩阵。
您n
的应用程序中有什么?如果n > 2
,这几乎肯定不是您想要做的。
如果n = 2
,只需明确地写出逆。
我正在添加一个对 JuMP 有帮助的示例:https ://github.com/jump-dev/JuMP.jl/pull/2379
推荐阅读
- java - Edittext 输入小于 100 的百分比值,点后仅可接受两位数
- php - 如何将 codeigniter 与 Sql Server 2012 连接?
- android - 如何在 ionic v1 App 中实现 360 视频播放器
- ios - 快速向插座显示 JSON 数据
- java - 在java中进行异常处理时从不抛出异常
- java - java.util.concurrent.CompletableFuture 中的异常传播
- apache-kafka-streams - Kafka 流 DSL 标头支持
- amazon-web-services - 多个并行 AWS Lambda 调用
- twitter - 启用使用 Twitter 登录 - 回调 URL
- r - 如何防止专有的 R 包被同名的 CRAN 包更新和替换?