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))