Skip to content

Commit 374695c

Browse files
authored
Merge pull request #524 from JuliaOpt/bl/addmissingpsds
Add missing PSDCS in bridge cache
2 parents d22ca85 + 9e3d69e commit 374695c

File tree

4 files changed

+44
-7
lines changed

4 files changed

+44
-7
lines changed

src/Bridges/Bridges.jl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,13 @@ MOIU.@model(AllBridgedConstraints,
2828
(),
2929
(MOI.Interval,),
3030
(MOI.SecondOrderCone, MOI.RotatedSecondOrderCone, MOI.GeometricMeanCone,
31+
MOI.PositiveSemidefiniteConeSquare,
3132
MOI.LogDetConeTriangle, MOI.RootDetConeTriangle),
3233
(),
33-
(),
34-
(MOI.ScalarAffineFunction,),
34+
(MOI.SingleVariable,),
35+
(MOI.ScalarAffineFunction, MOI.ScalarQuadraticFunction),
3536
(MOI.VectorOfVariables,),
36-
(MOI.VectorAffineFunction,))
37+
(MOI.VectorAffineFunction, MOI.VectorQuadraticFunction))
3738
"""
3839
fullbridgeoptimizer(model::MOI.ModelLike, ::Type{T}) where T
3940

src/Utilities/functions.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -906,6 +906,11 @@ function promote_operation(::typeof(/), ::Type{T},
906906
::Type{T}) where T
907907
MOI.ScalarAffineFunction{T}
908908
end
909+
function promote_operation(::typeof(/), ::Type{T},
910+
::Type{MOI.ScalarQuadraticFunction{T}},
911+
::Type{T}) where T
912+
MOI.ScalarQuadraticFunction{T}
913+
end
909914

910915
function operate!(::typeof(/), ::Type{T}, f::MOI.SingleVariable,
911916
α::T) where T

test/bridge.jl

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,14 @@ end
121121
# Model not supporting RotatedSecondOrderCone
122122
MOIU.@model(NoRSOCModel,
123123
(),
124-
(MOI.EqualTo, MOI.GreaterThan, MOI.LessThan, MOI.Interval),
124+
(MOI.EqualTo, MOI.GreaterThan, MOI.LessThan),
125125
(MOI.Zeros, MOI.Nonnegatives, MOI.Nonpositives, MOI.SecondOrderCone,
126126
MOI.ExponentialCone, MOI.PositiveSemidefiniteConeTriangle),
127127
(),
128128
(MOI.SingleVariable,),
129-
(MOI.ScalarAffineFunction,),
129+
(MOI.ScalarAffineFunction, MOI.ScalarQuadraticFunction),
130130
(MOI.VectorOfVariables,),
131-
(MOI.VectorAffineFunction,))
131+
(MOI.VectorAffineFunction, MOI.VectorQuadraticFunction))
132132

133133
@testset "LazyBridgeOptimizer" begin
134134
mock = MOIU.MockOptimizer(NoRSOCModel{Float64}())
@@ -150,7 +150,7 @@ MOIU.@model(NoRSOCModel,
150150
MOIT.copytest(bridgedmock, NoRSOCModel{Float64}())
151151
end
152152

153-
# Test that RSOCtoPSD is used instead of RSOC+SOCtoPSD as it is a shortest path
153+
# Test that RSOCtoPSD is used instead of RSOC+SOCtoPSD as it is a shortest path.
154154
@testset "Bridge selection" begin
155155
MOI.empty!(bridgedmock)
156156
@test !(MOI.supports_constraint(bridgedmock, MOI.VectorAffineFunction{Float64}, MOI.LogDetConeTriangle))
@@ -160,6 +160,34 @@ MOIU.@model(NoRSOCModel,
160160
@test bridgedmock.dist[(MathOptInterface.VectorOfVariables, MathOptInterface.RotatedSecondOrderCone)] == 1
161161
end
162162

163+
@testset "Supports" begin
164+
fullbridgedmock = MOIB.fullbridgeoptimizer(mock, Float64)
165+
for F in [MOI.SingleVariable, MOI.ScalarAffineFunction{Float64},
166+
MOI.ScalarQuadraticFunction{Float64}]
167+
@test MOI.supports_constraint(fullbridgedmock, F,
168+
MOI.Interval{Float64})
169+
end
170+
for F in [MOI.VectorOfVariables, MOI.VectorAffineFunction{Float64},
171+
MOI.VectorQuadraticFunction{Float64}]
172+
@test MOI.supports_constraint(fullbridgedmock, F,
173+
MOI.PositiveSemidefiniteConeSquare)
174+
@test MOI.supports_constraint(fullbridgedmock, F,
175+
MOI.GeometricMeanCone)
176+
end
177+
for F in [MOI.VectorOfVariables, MOI.VectorAffineFunction{Float64}]
178+
# The bridges in this for loop do not support yet
179+
# VectorQuadraticFunction. See TODO's for the reason.
180+
# TODO: Missing vcat for quadratic for supporting quadratic.
181+
@test MOI.supports_constraint(fullbridgedmock, F,
182+
MOI.RotatedSecondOrderCone)
183+
# TODO: Det bridges need to use MOIU.operate to support quadratic.
184+
@test MOI.supports_constraint(fullbridgedmock, F,
185+
MOI.LogDetConeTriangle)
186+
@test MOI.supports_constraint(fullbridgedmock, F,
187+
MOI.RootDetConeTriangle)
188+
end
189+
end
190+
163191
@testset "Combining two briges" begin
164192
fullbridgedmock = MOIB.fullbridgeoptimizer(mock, Float64)
165193
mock.optimize! = (mock::MOIU.MockOptimizer) -> MOIU.mock_optimize!(mock, [1, 1, 0, 1, 1, 0, 1, 2])

test/functions.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,9 @@
247247
@test MOIU.promote_operation(*, Float64,
248248
MOI.ScalarAffineFunction{Float64},
249249
MOI.ScalarAffineFunction{Float64}) == MOI.ScalarQuadraticFunction{Float64}
250+
@test MOIU.promote_operation(/, Float64,
251+
MOI.ScalarQuadraticFunction{Float64},
252+
Float64) == MOI.ScalarQuadraticFunction{Float64}
250253
end
251254
fx = MOI.SingleVariable(x)
252255
fy = MOI.SingleVariable(y)

0 commit comments

Comments
 (0)