Skip to content

Commit 681f4c3

Browse files
authored
Merge pull request #722 from JuliaOpt/bl/get_constraint
Remove cache from BridgeOptimizer
2 parents 88656c6 + 4832579 commit 681f4c3

28 files changed

+505
-351
lines changed

src/Bridges/Bridges.jl

Lines changed: 20 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,14 @@ include("bridgeoptimizer.jl")
2121
include("singlebridgeoptimizer.jl")
2222
include("lazybridgeoptimizer.jl")
2323

24-
# This is used by JuMP and removes the need to update JuMP everytime a bridge is added
25-
MOIU.@model(AllBridgedConstraints,
26-
(),
27-
(MOI.EqualTo, MOI.LessThan, MOI.GreaterThan, MOI.Interval,),
28-
(MOI.Nonnegatives, MOI.Nonpositives, MOI.SecondOrderCone,
29-
MOI.RotatedSecondOrderCone, MOI.GeometricMeanCone,
30-
MOI.PositiveSemidefiniteConeSquare,
31-
MOI.LogDetConeTriangle, MOI.RootDetConeTriangle),
32-
(),
33-
(MOI.SingleVariable,),
34-
(MOI.ScalarAffineFunction, MOI.ScalarQuadraticFunction),
35-
(MOI.VectorOfVariables,),
36-
(MOI.VectorAffineFunction, MOI.VectorQuadraticFunction))
3724
"""
3825
full_bridge_optimizer(model::MOI.ModelLike, ::Type{T}) where T
3926
4027
Returns a `LazyBridgeOptimizer` bridging `model` for every bridge defined in
4128
this package and for the coefficient type `T`.
4229
"""
4330
function full_bridge_optimizer(model::MOI.ModelLike, ::Type{T}) where T
44-
cache = MOIU.UniversalFallback(AllBridgedConstraints{T}())
45-
bridged_model = LazyBridgeOptimizer(model, cache)
31+
bridged_model = LazyBridgeOptimizer(model)
4632
add_bridge(bridged_model, GreaterToLessBridge{T})
4733
add_bridge(bridged_model, LessToGreaterBridge{T})
4834
add_bridge(bridged_model, NonnegToNonposBridge{T})
@@ -66,49 +52,35 @@ function full_bridge_optimizer(model::MOI.ModelLike, ::Type{T}) where T
6652
end
6753

6854
include("flip_sign_bridge.jl")
69-
@bridge GreaterToLess GreaterToLessBridge () (MOI.GreaterThan,) () () (MOI.SingleVariable,) (MOI.ScalarAffineFunction, MOI.ScalarQuadraticFunction) () ()
70-
@bridge LessToGreater LessToGreaterBridge () (MOI.LessThan,) () () (MOI.SingleVariable,) (MOI.ScalarAffineFunction, MOI.ScalarQuadraticFunction) () ()
71-
@bridge NonnegToNonpos NonnegToNonposBridge () () (MOI.Nonnegatives,) () () () (MOI.VectorOfVariables,) (MOI.VectorAffineFunction, MOI.VectorQuadraticFunction)
72-
@bridge NonposToNonneg NonposToNonnegBridge () () (MOI.Nonpositives,) () () () (MOI.VectorOfVariables,) (MOI.VectorAffineFunction, MOI.VectorQuadraticFunction)
55+
const GreaterToLess{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{GreaterToLessBridge{T}, OT}
56+
const LessToGreater{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{LessToGreaterBridge{T}, OT}
57+
const NonnegToNonpos{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{NonnegToNonposBridge{T}, OT}
58+
const NonposToNonneg{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{NonposToNonnegBridge{T}, OT}
7359
include("vectorizebridge.jl")
74-
@bridge Vectorize VectorizeBridge () (MOI.EqualTo, MOI.LessThan, MOI.GreaterThan,) () () (MOI.SingleVariable,) (MOI.ScalarAffineFunction, MOI.ScalarQuadraticFunction) () ()
60+
const Vectorize{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{VectorizeBridge{T}, OT}
7561
include("scalarizebridge.jl")
76-
@bridge Scalarize ScalarizeBridge () () (MOI.Zeros, MOI.Nonnegatives, MOI.Nonpositives) () () () (MOI.VectorOfVariables,) (MOI.VectorAffineFunction, MOI.VectorQuadraticFunction)
62+
const Scalarize{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{ScalarizeBridge{T}, OT}
7763
include("slackbridge.jl")
78-
@bridge ScalarSlack ScalarSlackBridge () (MOI.Interval, MOI.LessThan, MOI.GreaterThan) () () () (MOI.ScalarAffineFunction, MOI.ScalarQuadraticFunction) () ()
79-
@bridge(VectorSlack, VectorSlackBridge, (), (),
80-
(MOI.Nonnegatives, MOI.Nonpositives, MOI.SecondOrderCone,
81-
MOI.RotatedSecondOrderCone, MOI.GeometricMeanCone,
82-
MOI.PositiveSemidefiniteConeSquare, MOI.PositiveSemidefiniteConeTriangle, MOI.LogDetConeTriangle,
83-
MOI.RootDetConeTriangle),
84-
(MOI.PowerCone, MOI.DualPowerCone, MOI.SOS1, MOI.SOS2), (), (), (),
85-
(MOI.VectorAffineFunction, MOI.VectorQuadraticFunction)
86-
)
64+
const ScalarSlack{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{ScalarSlackBridge{T}, OT}
65+
const VectorSlack{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{VectorSlackBridge{T}, OT}
8766
include("functionize_bridge.jl")
88-
@bridge ScalarFunctionize ScalarFunctionizeBridge () (MOI.Interval, MOI.LessThan, MOI.GreaterThan) () () (MOI.SingleVariable,) () () ()
89-
@bridge(VectorFunctionize, VectorFunctionizeBridge, (), (),
90-
(MOI.Nonnegatives, MOI.Nonpositives, MOI.SecondOrderCone,
91-
MOI.RotatedSecondOrderCone, MOI.GeometricMeanCone,
92-
MOI.PositiveSemidefiniteConeSquare, MOI.PositiveSemidefiniteConeTriangle, MOI.LogDetConeTriangle,
93-
MOI.RootDetConeTriangle),
94-
(MOI.PowerCone, MOI.DualPowerCone, MOI.SOS1, MOI.SOS2), (), (),
95-
(MOI.VectorOfVariables,), ()
96-
)
67+
const ScalarFunctionize{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{ScalarFunctionizeBridge{T}, OT}
68+
const VectorFunctionize{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{VectorFunctionizeBridge{T}, OT}
9769
include("intervalbridge.jl")
98-
@bridge SplitInterval SplitIntervalBridge () (MOI.Interval,) () () (MOI.SingleVariable,) (MOI.ScalarAffineFunction, MOI.ScalarQuadraticFunction) () ()
70+
const SplitInterval{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{SplitIntervalBridge{T}, OT}
9971
include("rsocbridge.jl")
100-
@bridge RSOC RSOCBridge () () (MOI.RotatedSecondOrderCone,) () () () (MOI.VectorOfVariables,) (MOI.VectorAffineFunction,)
72+
const RSOC{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{RSOCBridge{T}, OT}
10173
include("quadtosocbridge.jl")
102-
@bridge QuadtoSOC QuadtoSOCBridge () (MOI.LessThan, MOI.GreaterThan) () () () (MOI.ScalarQuadraticFunction,) () ()
74+
const QuadtoSOC{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{QuadtoSOCBridge{T}, OT}
10375
include("geomeanbridge.jl")
104-
@bridge GeoMean GeoMeanBridge () () (MOI.GeometricMeanCone,) () () () (MOI.VectorOfVariables,) (MOI.VectorAffineFunction,)
76+
const GeoMean{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{GeoMeanBridge{T}, OT}
10577
include("squarepsdbridge.jl")
106-
@bridge SquarePSD SquarePSDBridge () () (MOI.PositiveSemidefiniteConeSquare,) () () () (MOI.VectorOfVariables,) (MOI.VectorAffineFunction, MOI.VectorQuadraticFunction)
78+
const SquarePSD{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{SquarePSDBridge{T}, OT}
10779
include("detbridge.jl")
108-
@bridge LogDet LogDetBridge () () (MOI.LogDetConeTriangle,) () () () (MOI.VectorOfVariables,) (MOI.VectorAffineFunction,)
109-
@bridge RootDet RootDetBridge () () (MOI.RootDetConeTriangle,) () () () (MOI.VectorOfVariables,) (MOI.VectorAffineFunction,)
80+
const LogDet{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{LogDetBridge{T}, OT}
81+
const RootDet{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{RootDetBridge{T}, OT}
11082
include("soctopsdbridge.jl")
111-
@bridge SOCtoPSD SOCtoPSDBridge () () (MOI.SecondOrderCone,) () () () (MOI.VectorOfVariables,) (MOI.VectorAffineFunction,)
112-
@bridge RSOCtoPSD RSOCtoPSDBridge () () (MOI.RotatedSecondOrderCone,) () () () (MOI.VectorOfVariables,) (MOI.VectorAffineFunction,)
83+
const SOCtoPSD{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{SOCtoPSDBridge{T}, OT}
84+
const RSOCtoPSD{T, OT<:MOI.ModelLike} = SingleBridgeOptimizer{RSOCtoPSDBridge{T}, OT}
11385

11486
end # module

0 commit comments

Comments
 (0)