@@ -29,84 +29,113 @@ Add all bridges defined in the `Bridges.Constraint` submodule to `model`.
2929The coefficient type used is `T`.
3030"""
3131function add_all_bridges (model, :: Type{T} ) where {T}
32- if T <: AbstractFloat
32+ MOI. Bridges. add_bridge (model, AllDifferentToCountDistinctBridge{T})
33+ MOI. Bridges. add_bridge (model, BinPackingToMILPBridge{T})
34+ MOI. Bridges. add_bridge (model, CircuitToMILPBridge{T})
35+ MOI. Bridges. add_bridge (model, ComplexNormInfinityToSecondOrderConeBridge{T})
36+ MOI. Bridges. add_bridge (model, CountAtLeastToCountBelongsBridge{T})
37+ MOI. Bridges. add_bridge (model, CountBelongsToMILPBridge{T})
38+ MOI. Bridges. add_bridge (model, CountDistinctToMILPBridge{T})
39+ MOI. Bridges. add_bridge (model, CountGreaterThanToMILPBridge{T})
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.
45+ # * FunctionConversionBridge{T}
46+ # This bridge is not added because, even though it is not abstract, it
47+ # is highly parameterized, and parameterized versions such as
48+ # ScalarFunctionizeBridge are added.
49+ MOI. Bridges. add_bridge (model, GeoMeanBridge{T})
50+ MOI. Bridges. add_bridge (model, GeoMeanToPowerBridge{T})
51+ MOI. Bridges. add_bridge (model, GeoMeantoRelEntrBridge{T})
52+ if T <: AbstractFloat # See note in docstring of AbstractToIntervalBridge
3353 MOI. Bridges. add_bridge (model, GreaterToIntervalBridge{T})
34- MOI. Bridges. add_bridge (model, LessToIntervalBridge{T})
3554 end
3655 MOI. Bridges. add_bridge (model, GreaterToLessBridge{T})
56+ MOI. Bridges. add_bridge (model, HermitianToSymmetricPSDBridge{T})
57+ MOI. Bridges. add_bridge (model, IndicatorActiveOnFalseBridge{T})
58+ MOI. Bridges. add_bridge (model, IndicatorGreaterToLessThanBridge{T})
59+ MOI. Bridges. add_bridge (model, IndicatorLessToGreaterThanBridge{T})
60+ # * IndicatorSetMapBridge{T}
61+ # This bridge is not added because, even though it is not abstract, it
62+ # is highly parameterized, and parameterized versions such as
63+ # IndicatorGreaterToLessThanBridge are added.
64+ MOI. Bridges. add_bridge (model, IndicatorSOS1Bridge{T})
65+ MOI. Bridges. add_bridge (model, IndicatorToMILPBridge{T})
66+ # * InequalityToComplementsBridge{T}
67+ # This bridge is not added because of a bug in Convex.jl:
68+ # https://github.com/jump-dev/Convex.jl/blob/ca5324217575af263bfeee20b3e0526bed051887/src/MOI_wrapper.jl#L119-L133
69+ # It is also really useful only to PATHSolver.jl, which could add this
70+ # to MOI.ListOfRequiredBridges.
71+ MOI. Bridges. add_bridge (model, IntegerToZeroOneBridge{T})
3772 MOI. Bridges. add_bridge (model, LessToGreaterBridge{T})
73+ if T <: AbstractFloat # See note in docstring of AbstractToIntervalBridge
74+ MOI. Bridges. add_bridge (model, LessToIntervalBridge{T})
75+ end
76+ MOI. Bridges. add_bridge (model, LogDetBridge{T})
3877 MOI. Bridges. add_bridge (model, NonnegToNonposBridge{T})
3978 MOI. Bridges. add_bridge (model, NonposToNonnegBridge{T})
40- MOI. Bridges. add_bridge (model, ScalarizeBridge{T})
41- MOI. Bridges. add_bridge (model, VectorizeBridge{T})
42- MOI. Bridges. add_bridge (model, ScalarSlackBridge{T})
43- MOI. Bridges. add_bridge (model, VectorSlackBridge{T})
44- MOI. Bridges. add_bridge (model, ScalarFunctionizeBridge{T})
45- MOI. Bridges. add_bridge (model, VectorFunctionizeBridge{T})
46- MOI. Bridges. add_bridge (model, ToScalarQuadraticBridge{T})
47- MOI. Bridges. add_bridge (model, ToVectorQuadraticBridge{T})
48- MOI. Bridges. add_bridge (model, ToScalarNonlinearBridge{T})
49- MOI. Bridges. add_bridge (model, SplitHyperRectangleBridge{T})
50- MOI. Bridges. add_bridge (model, SplitIntervalBridge{T})
51- MOI. Bridges. add_bridge (model, SplitComplexEqualToBridge{T})
52- MOI. Bridges. add_bridge (model, SplitComplexZerosBridge{T})
53- MOI. Bridges. add_bridge (model, QuadtoSOCBridge{T})
54- # We do not add `(R)SOCtoNonConvexQuad` because it starts with a convex
55- # conic constraint and generate a non-convex constraint (in the QCP
56- # interpretation).
5779 MOI. Bridges. add_bridge (model, NormInfinityBridge{T})
80+ MOI. Bridges. add_bridge (model, NormInfinityConeToNormConeBridge{T})
81+ MOI. Bridges. add_bridge (model, NormNuclearBridge{T})
5882 MOI. Bridges. add_bridge (model, NormOneBridge{T})
59- MOI. Bridges. add_bridge (model, GeoMeantoRelEntrBridge{T})
60- MOI. Bridges. add_bridge (model, GeoMeanBridge{T})
61- MOI. Bridges. add_bridge (model, GeoMeanToPowerBridge{T})
62- MOI. Bridges. add_bridge (model, NormToPowerBridge{T})
6383 MOI. Bridges. add_bridge (model, NormOneConeToNormConeBridge{T})
64- MOI . Bridges . add_bridge (model, SecondOrderConeToNormConeBridge {T})
65- MOI . Bridges . add_bridge (model, NormInfinityConeToNormConeBridge{T})
66- MOI . Bridges . add_bridge (model, ComplexNormInfinityToSecondOrderConeBridge{T})
67- MOI . Bridges . add_bridge (model, RelativeEntropyBridge{T})
84+ # * NormSpecialCaseBridge {T}
85+ # This bridge is not added because, even though it is not abstract, it
86+ # is highly parameterized, and parameterized versions such as
87+ # NormOneConeToNormConeBridge are added.
6888 MOI. Bridges. add_bridge (model, NormSpectralBridge{T})
69- MOI. Bridges. add_bridge (model, NormNuclearBridge{T})
70- MOI. Bridges. add_bridge (model, HermitianToSymmetricPSDBridge{T})
71- MOI. Bridges. add_bridge (model, SquareBridge{T})
72- MOI. Bridges. add_bridge (model, SetDotScalingBridge{T})
73- MOI. Bridges. add_bridge (model, SetDotInverseScalingBridge{T})
74- MOI. Bridges. add_bridge (model, LogDetBridge{T})
89+ MOI. Bridges. add_bridge (model, NormToPowerBridge{T})
90+ # * NumberConversionBridge{T}
91+ # This bridge is not added by default because it would silently enable
92+ # models with mixed precision. In most cases, this is a bug in the
93+ # user's code, so we leave this bridge as opt-in.
94+ MOI. Bridges. add_bridge (model, QuadtoSOCBridge{T})
95+ MOI. Bridges. add_bridge (model, ReifiedAllDifferentToCountDistinctBridge{T})
96+ MOI. Bridges. add_bridge (model, ReifiedCountDistinctToMILPBridge{T})
97+ MOI. Bridges. add_bridge (model, RelativeEntropyBridge{T})
7598 MOI. Bridges. add_bridge (model, RootDetBridge{T})
76- MOI. Bridges. add_bridge (model, RSOCtoSOCBridge{T})
77- MOI. Bridges. add_bridge (model, SOCtoRSOCBridge{T})
78- # We do not add `SOCtoPSDBridge` as transforming the `SOC` to `RSOC` and
79- # then to `PSD` produces a smaller SDP constraint.
80- # MOI.Bridges.add_bridge(model, SOCtoPSDBridge{T})
99+ # * RSOCtoNonConvexQuadBridge{T}
100+ # This bridge is not added by default because it starts with a convex
101+ # conic constraint and generate a non-convex constraint (in the QCP
102+ # interpretation).
81103 MOI. Bridges. add_bridge (model, RSOCtoPSDBridge{T})
82- MOI. Bridges. add_bridge (model, IndicatorActiveOnFalseBridge{T})
83- MOI. Bridges. add_bridge (model, IndicatorSOS1Bridge{T})
84- MOI. Bridges. add_bridge (model, IndicatorLessToGreaterThanBridge{T})
85- MOI. Bridges. add_bridge (model, IndicatorGreaterToLessThanBridge{T})
104+ MOI. Bridges. add_bridge (model, RSOCtoSOCBridge{T})
105+ MOI. Bridges. add_bridge (model, ScalarFunctionizeBridge{T})
106+ MOI. Bridges. add_bridge (model, ScalarizeBridge{T})
107+ MOI. Bridges. add_bridge (model, ScalarSlackBridge{T})
108+ MOI. Bridges. add_bridge (model, SecondOrderConeToNormConeBridge{T})
86109 MOI. Bridges. add_bridge (model, SemiToBinaryBridge{T})
87- MOI. Bridges. add_bridge (model, ZeroOneBridge{T})
88- MOI. Bridges. add_bridge (model, IntegerToZeroOneBridge{T})
89- MOI. Bridges. add_bridge (model, InequalityToComplementsBridge{T})
90- # Do not add by default
91- # MOI.Bridges.add_bridge(model, NumberConversionBridge{T})
92- # Constraint programming bridges
93- MOI. Bridges. add_bridge (model, AllDifferentToCountDistinctBridge{T})
94- MOI. Bridges. add_bridge (model, ReifiedAllDifferentToCountDistinctBridge{T})
95- MOI. Bridges. add_bridge (model, BinPackingToMILPBridge{T})
96- MOI. Bridges. add_bridge (model, CircuitToMILPBridge{T})
97- MOI. Bridges. add_bridge (model, CountAtLeastToCountBelongsBridge{T})
98- MOI. Bridges. add_bridge (model, CountBelongsToMILPBridge{T})
99- MOI. Bridges. add_bridge (model, CountDistinctToMILPBridge{T})
100- MOI. Bridges. add_bridge (model, ReifiedCountDistinctToMILPBridge{T})
101- MOI. Bridges. add_bridge (model, CountGreaterThanToMILPBridge{T})
102- MOI. Bridges. add_bridge (model, TableToMILPBridge{T})
110+ # * SetConversionBridge{T}
111+ # This bridge is not added because, even though it is not abstract, it
112+ # is highly parameterized, and it intended for use by MOI extensions.
113+ MOI. Bridges. add_bridge (model, SetDotInverseScalingBridge{T})
114+ MOI. Bridges. add_bridge (model, SetDotScalingBridge{T})
115+ # * SOCtoNonConvexQuadBridge{T}
116+ # This bridge is not added by default because it starts with a convex
117+ # conic constraint and generate a non-convex constraint (in the QCP
118+ # interpretation).
119+ # * SOCtoPSDBridge{T}
120+ # This bridge is not added because transforming the `SOC` to `RSOC` and
121+ # then to `PSD` produces a smaller SDP constraint. `RSOCtoPSDBridge` is
122+ # added by default.
123+ MOI. Bridges. add_bridge (model, SOCtoRSOCBridge{T})
103124 MOI. Bridges. add_bridge (model, SOS1ToMILPBridge{T})
104125 MOI. Bridges. add_bridge (model, SOS2ToMILPBridge{T})
105- MOI. Bridges. add_bridge (model, IndicatorToMILPBridge{T})
106- MOI. Bridges. add_bridge (
107- model,
108- ExponentialConeToScalarNonlinearFunctionBridge{T},
109- )
126+ MOI. Bridges. add_bridge (model, SplitComplexEqualToBridge{T})
127+ MOI. Bridges. add_bridge (model, SplitComplexZerosBridge{T})
128+ MOI. Bridges. add_bridge (model, SplitHyperRectangleBridge{T})
129+ MOI. Bridges. add_bridge (model, SplitIntervalBridge{T})
130+ MOI. Bridges. add_bridge (model, SquareBridge{T})
131+ MOI. Bridges. add_bridge (model, TableToMILPBridge{T})
132+ MOI. Bridges. add_bridge (model, ToScalarNonlinearBridge{T})
133+ MOI. Bridges. add_bridge (model, ToScalarQuadraticBridge{T})
134+ MOI. Bridges. add_bridge (model, ToVectorQuadraticBridge{T})
135+ MOI. Bridges. add_bridge (model, VectorFunctionizeBridge{T})
136+ MOI. Bridges. add_bridge (model, VectorizeBridge{T})
137+ MOI. Bridges. add_bridge (model, VectorSlackBridge{T})
138+ MOI. Bridges. add_bridge (model, ZeroOneBridge{T})
110139 return
111140end
112141
0 commit comments