Skip to content

Commit 76bd42e

Browse files
committed
Add supportsbridgingconstraint
1 parent 68e9c63 commit 76bd42e

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

src/Bridges/bridgeoptimizer.jl

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,19 @@ abstract type AbstractBridgeOptimizer <: MOI.AbstractOptimizer end
1111
"""
1212
isbridged(b::AbstractBridgeOptimizer, F::Type{<:MOI.AbstractFunction}, S::Type{<:MOI.AbstractSet})::Bool
1313
14-
Return a `Bool` indicating whether `b` bridges `F`-in-`S` constraints.
14+
Return a `Bool` indicating whether `b` tries to bridge `F`-in-`S` constraints instead of passing it as is to its internal model.
1515
"""
1616
function isbridged end
1717
# Syntactic sugar
1818
isbridged(b::AbstractBridgeOptimizer, ::Type{CI{F, S}}) where {F, S} = isbridged(b, F, S)
1919

20+
"""
21+
supportsbridgingconstraint(b::AbstractBridgeOptimizer, F::Type{<:MOI.AbstractFunction}, S::Type{<:MOI.AbstractSet})::Bool
22+
23+
Return a `Bool` indicating whether `b` supports bridging `F`-in-`S` constraints.
24+
"""
25+
supportsbridgingconstraint(::AbstractBridgeOptimizer, ::Type{<:MOI.AbstractFunction}, ::Type{<:MOI.AbstractSet}) = false
26+
2027
"""
2128
bridgetype(b::AbstractBridgeOptimizer, F::Type{<:MOI.AbstractFunction}, S::Type{<:MOI.AbstractSet})
2229
@@ -176,14 +183,14 @@ MOI.get(b::AbstractBridgeOptimizer, IdxT::Type{<:MOI.Index}, name::String) = MOI
176183
# Constraints
177184
function MOI.supportsconstraint(b::AbstractBridgeOptimizer, F::Type{<:MOI.AbstractFunction}, S::Type{<:MOI.AbstractSet})
178185
if isbridged(b, F, S)
179-
MOI.supportsconstraint(b.bridged, F, S)
186+
supportsbridgingconstraint(b, F, S) && MOI.supportsconstraint(b.bridged, F, S)
180187
else
181188
MOI.supportsconstraint(b.model, F, S)
182189
end
183190
end
184191
function MOI.canaddconstraint(b::AbstractBridgeOptimizer, F::Type{<:MOI.AbstractFunction}, S::Type{<:MOI.AbstractSet})
185192
if isbridged(b, F, S)
186-
MOI.canaddconstraint(b.bridged, F, S)
193+
supportsbridgingconstraint(b, F, S) && MOI.canaddconstraint(b.bridged, F, S) && all(C -> MOI.canaddconstraint(b, C...), addedconstrainttypes(bridgetype(b, F, S), F, S))
187194
else
188195
MOI.canaddconstraint(b.model, F, S)
189196
end

src/Bridges/singlebridgeoptimizer.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ function SingleBridgeOptimizer{BT, MT, T}(model::OT) where {BT, MT, T, OT <: MOI
88
end
99

1010
isbridged(b::SingleBridgeOptimizer, ::Type{<:MOI.AbstractFunction}, ::Type{<:MOI.AbstractSet}) = false
11-
1211
bridgetype(b::SingleBridgeOptimizer{BT}, ::Type{<:MOI.AbstractFunction}, ::Type{<:MOI.AbstractSet}) where BT = BT
1312

1413
# :((Zeros, SecondOrderCone)) -> (:(MOI.Zeros), :(MOI.SecondOrderCone))
@@ -40,6 +39,7 @@ macro bridge(modelname, bridge, ss, sst, vs, vst, sf, sft, vf, vft)
4039
esc(quote
4140
$MOIU.@model $bridgedmodelname $ss $sst $vs $vst $sf $sft $vf $vft
4241
const $modelname{T, OT<:MOI.ModelLike} = $MOIB.SingleBridgeOptimizer{$bridge{T}, $bridgedmodelname{T}, T, OT}
43-
isbridged(b::$modelname, ::Type{<:$bridgedfuns}, ::Type{<:$bridgedsets}) = true
42+
isbridged(::$modelname, ::Type{<:$bridgedfuns}, ::Type{<:$bridgedsets}) = true
43+
supportsbridgingconstraint(::$modelname, ::Type{<:$bridgedfuns}, ::Type{<:$bridgedsets}) = true
4444
end)
4545
end

0 commit comments

Comments
 (0)