diff --git a/src/sets.jl b/src/sets.jl index aaf69260bd..62698bda21 100644 --- a/src/sets.jl +++ b/src/sets.jl @@ -760,6 +760,9 @@ NormCone(set::NormOneCone) = NormCone(1, set.dimension) NormCone(set::SecondOrderCone) = NormCone(2, set.dimension) NormCone(set::NormInfinityCone) = NormCone(Inf, set.dimension) +dual_set(s::NormCone) = NormCone(inv(1 - inv(s.p)), s.dimension) +dual_set_type(::Type{NormCone}) = NormCone + """ GeometricMeanCone(dimension::Int) diff --git a/test/General/test_sets.jl b/test/General/test_sets.jl index cffd2d985d..0f145a0121 100644 --- a/test/General/test_sets.jl +++ b/test/General/test_sets.jl @@ -229,6 +229,19 @@ function test_sets_dual_norm() return end +function test_sets_dual_pnorm() + norminf = MOI.NormCone(Inf, 3) + normone = MOI.NormCone(1.0, 3) + normtwo = MOI.NormCone(2.0, 3) + normfive = MOI.NormCone(5.0, 3) + normfivedual = MOI.NormCone(1.25, 3) + _dual_set_test(normone, norminf) + _self_dual_set_test(normtwo) + @test MOI.dual_set(normfive).p ≈ normfivedual.p + @test MOI.dual_set(normfivedual).p ≈ normfive.p + return +end + function test_sets_dual_soc() soc2 = MOI.SecondOrderCone(2) soc3 = MOI.SecondOrderCone(3)