Используя библиотеку JuMP 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())
поскольку это ограничивает норму Фробениуса, но это не является предпочтительным. Я был бы очень признателен за любую информацию о том, как это можно сделать.