Julia JuMP 中的界 2 范数
Bound 2-norm in Julia JuMP
使用 Julia 的 JuMP 库,我有一个矩阵值变量 A
,我想对其施加一个 2 范数约束(等效于:谱/运算符范数)。但是我不确定该怎么做。下面是我喜欢写
的最小运行代码
using LinearAlgebra
using JuMP
using MathOptInterface
using MosekTools
using Mosek
model = Model(optimizer_with_attributes(
Mosek.Optimizer,
"QUIET" => false,
"INTPNT_CO_TOL_DFEAS" => 1e-9
))
maxnorm = 3.0
# We want opnorm(A) <= maxnorm
@variable(model, A[1:4, 1:5])
# @SDconstraint(model, A' * A <= maxnorm^2) # Mathematically valid, but not accepted!
# Make dummy variable and constraint to satisfy
@variable(model, x)
@constraint(model, x >= 10)
@objective(model, Min, x)
optimize!(model)
一个非常矫枉过正的方法是通过
@constraint(model, [maxnorm; vec(A)] in SecondOrderCone())
因为这会限制 Frobenius 范数 --- 但这不是可取的。对于如何做到这一点,我将不胜感激。
MathOptInterface 有一个锥形的光谱范数:
https://jump.dev/MathOptInterface.jl/v0.9/apireference/#MathOptInterface.NormSpectralCone
@constraint(model, [maxnorm; vec(A)] in MOI.NormSpectralCone(4, 5))
使用 Julia 的 JuMP 库,我有一个矩阵值变量 A
,我想对其施加一个 2 范数约束(等效于:谱/运算符范数)。但是我不确定该怎么做。下面是我喜欢写
using LinearAlgebra
using JuMP
using MathOptInterface
using MosekTools
using Mosek
model = Model(optimizer_with_attributes(
Mosek.Optimizer,
"QUIET" => false,
"INTPNT_CO_TOL_DFEAS" => 1e-9
))
maxnorm = 3.0
# We want opnorm(A) <= maxnorm
@variable(model, A[1:4, 1:5])
# @SDconstraint(model, A' * A <= maxnorm^2) # Mathematically valid, but not accepted!
# Make dummy variable and constraint to satisfy
@variable(model, x)
@constraint(model, x >= 10)
@objective(model, Min, x)
optimize!(model)
一个非常矫枉过正的方法是通过
@constraint(model, [maxnorm; vec(A)] in SecondOrderCone())
因为这会限制 Frobenius 范数 --- 但这不是可取的。对于如何做到这一点,我将不胜感激。
MathOptInterface 有一个锥形的光谱范数:
https://jump.dev/MathOptInterface.jl/v0.9/apireference/#MathOptInterface.NormSpectralCone
@constraint(model, [maxnorm; vec(A)] in MOI.NormSpectralCone(4, 5))