Skip to content

Commit d54d3a0

Browse files
committed
Update
1 parent 7966f48 commit d54d3a0

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

src/Bridges/Constraint/Constraint.jl

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,6 @@ Add all bridges defined in the `Bridges.Constraint` submodule to `model`.
2929
The coefficient type used is `T`.
3030
"""
3131
function add_all_bridges(model, ::Type{T}) where {T}
32-
if T <: AbstractFloat
33-
# Out of order: put these bridges at the start for backwards
34-
# compatibility.
35-
MOI.Bridges.add_bridge(model, GreaterToIntervalBridge{T})
36-
MOI.Bridges.add_bridge(model, LessToIntervalBridge{T})
37-
end
3832
MOI.Bridges.add_bridge(model, AllDifferentToCountDistinctBridge{T})
3933
MOI.Bridges.add_bridge(model, BinPackingToMILPBridge{T})
4034
MOI.Bridges.add_bridge(model, CircuitToMILPBridge{T})
@@ -43,17 +37,19 @@ function add_all_bridges(model, ::Type{T}) where {T}
4337
MOI.Bridges.add_bridge(model, CountBelongsToMILPBridge{T})
4438
MOI.Bridges.add_bridge(model, CountDistinctToMILPBridge{T})
4539
MOI.Bridges.add_bridge(model, CountGreaterThanToMILPBridge{T})
46-
MOI.Bridges.add_bridge(
47-
model,
48-
ExponentialConeToScalarNonlinearFunctionBridge{T},
49-
)
40+
# * ExponentialConeToScalarNonlinearFunctionBridge{T}
41+
# This bridge is not added by default because it starts with a convex
42+
# conic constraint and adds a nonlinear constraint that local NLP
43+
# solvers like Ipopt can struggle with because of log(x) when x is 0.
44+
# In addition, the bridge does not support ConstraintDual.
5045
# * FunctionConversionBridge{T}
5146
# This bridge is not added because, even though it is not abstract, it
5247
# is highly parameterized, and parameterized versions such as
5348
# ScalarFunctionizeBridge are added.
5449
MOI.Bridges.add_bridge(model, GeoMeanBridge{T})
5550
MOI.Bridges.add_bridge(model, GeoMeanToPowerBridge{T})
5651
MOI.Bridges.add_bridge(model, GeoMeantoRelEntrBridge{T})
52+
MOI.Bridges.add_bridge(model, GreaterToIntervalBridge{T})
5753
MOI.Bridges.add_bridge(model, GreaterToLessBridge{T})
5854
MOI.Bridges.add_bridge(model, HermitianToSymmetricPSDBridge{T})
5955
MOI.Bridges.add_bridge(model, IndicatorActiveOnFalseBridge{T})
@@ -68,6 +64,7 @@ function add_all_bridges(model, ::Type{T}) where {T}
6864
MOI.Bridges.add_bridge(model, InequalityToComplementsBridge{T})
6965
MOI.Bridges.add_bridge(model, IntegerToZeroOneBridge{T})
7066
MOI.Bridges.add_bridge(model, LessToGreaterBridge{T})
67+
MOI.Bridges.add_bridge(model, LessToIntervalBridge{T})
7168
MOI.Bridges.add_bridge(model, LogDetBridge{T})
7269
MOI.Bridges.add_bridge(model, NonnegToNonposBridge{T})
7370
MOI.Bridges.add_bridge(model, NonposToNonnegBridge{T})

test/Bridges/bridge_optimizer.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,20 @@ function test_double_deletion_scalar()
567567
# careful not to delete the second one twice, see https://github.com/jump-dev/MathOptInterface.jl/issues/1231
568568
model =
569569
MOI.instantiate(AffineOnlyModel{Float64}, with_bridge_type = Float64)
570+
# If LessToGreaterBridge exists, this goes from:
571+
# VariableIndex(x) in LessThan(1.0)
572+
# ScalarAffineFunction(-1.0x) in GreaterThan(-1.0) (LessToGreater)
573+
# ScalarAffineFunction(-1.0x) in Interval(-1.0, Inf) (GreaterToInterval)
574+
# we want instead
575+
# VariableIndex(x) in LessThan(1.0)
576+
# VariableIndex(x) in Interval(-Inf, 1.0) (LessToInterval)
577+
# ScalarAffineFunction(1.0x) in Interval(-Inf, 1.0) (FunctionConversion)
578+
# To check that we handle the LessThan and Interval sets on the same
579+
# VariableIndex correctly.
580+
MOI.Bridges.remove_bridge(
581+
model,
582+
MOI.Bridges.Constraint.LessToGreaterBridge{Float64},
583+
)
570584
x = MOI.add_variable(model)
571585
c = MOI.add_constraint(model, x, MOI.LessThan(1.0))
572586
# Need to test the bridging to make sure it's not functionized first as otherwise,

0 commit comments

Comments
 (0)