@@ -15,9 +15,8 @@ struct ScalarSlackBridge{T, F, S} <: AbstractBridge
1515end
1616function bridge_constraint (:: Type{ScalarSlackBridge{T, F, S}} , model,
1717 f:: MOI.AbstractScalarFunction , s:: S ) where {T, F, S}
18- slack = MOI. add_variable (model)
18+ slack, slack_in_set = MOI. add_constrained_variable (model, s )
1919 new_f = MOIU. operate (- , T, f, MOI. SingleVariable (slack))
20- slack_in_set = MOI. add_constraint (model, MOI. SingleVariable (slack), s)
2120 equality = MOI. add_constraint (model, new_f, MOI. EqualTo (0.0 ))
2221 return ScalarSlackBridge {T, F, S} (slack, slack_in_set, equality)
2322end
@@ -36,9 +35,11 @@ MOI.supports_constraint(::Type{ScalarSlackBridge{T}},
3635MOI. supports_constraint (:: Type{ScalarSlackBridge{T}} ,
3736 :: Type{<:MOI.AbstractScalarFunction} ,
3837 :: Type{<:MOI.EqualTo} ) where {T} = false
39- MOIB. added_constrained_variable_types (:: Type{<:ScalarSlackBridge} ) = Tuple{DataType}[]
38+ function MOIB. added_constrained_variable_types (:: Type{<:ScalarSlackBridge{T, F, S}} ) where {T, F, S}
39+ return [(S,)]
40+ end
4041function MOIB. added_constraint_types (:: Type{ScalarSlackBridge{T, F, S}} ) where {T, F, S}
41- return [(F, MOI. EqualTo{T}), (MOI . SingleVariable, S) ]
42+ return [(F, MOI. EqualTo{T})]
4243end
4344function concrete_bridge_type (:: Type{<:ScalarSlackBridge{T}} ,
4445 F:: Type{<:MOI.AbstractScalarFunction} ,
@@ -48,16 +49,16 @@ function concrete_bridge_type(::Type{<:ScalarSlackBridge{T}},
4849end
4950
5051# Attributes, Bridge acting as a model
51- MOI. get (b:: ScalarSlackBridge{T, F, S} , :: MOI.NumberOfVariables ) where {T, F, S} = 1
52- MOI. get (b:: ScalarSlackBridge{T, F, S} , :: MOI.NumberOfConstraints{F, MOI.EqualTo{T}} ) where {T, F, S} = 1
52+ MOI. get (b:: ScalarSlackBridge , :: MOI.NumberOfVariables ) = 1
53+ MOI. get (b:: ScalarSlackBridge , :: MOI.ListOfVariableIndices ) = [b. slack]
54+ MOI. get (b:: ScalarSlackBridge{T, F} , :: MOI.NumberOfConstraints{F, MOI.EqualTo{T}} ) where {T, F} = 1
5355MOI. get (b:: ScalarSlackBridge{T, F, S} , :: MOI.NumberOfConstraints{MOI.SingleVariable, S} ) where {T, F, S} = 1
54- MOI. get (b:: ScalarSlackBridge{T, F, S } , :: MOI.ListOfConstraintIndices{F, MOI.EqualTo{T}} ) where {T, F, S } = [b. equality]
56+ MOI. get (b:: ScalarSlackBridge{T, F} , :: MOI.ListOfConstraintIndices{F, MOI.EqualTo{T}} ) where {T, F} = [b. equality]
5557MOI. get (b:: ScalarSlackBridge{T, F, S} , :: MOI.ListOfConstraintIndices{MOI.SingleVariable, S} ) where {T, F, S} = [b. slack_in_set]
5658
5759# Indices
5860function MOI. delete (model:: MOI.ModelLike , c:: ScalarSlackBridge )
5961 MOI. delete (model, c. equality)
60- MOI. delete (model, c. slack_in_set)
6162 MOI. delete (model, c. slack)
6263 return
6364end
119120function bridge_constraint (:: Type{VectorSlackBridge{T, F, S}} , model,
120121 f:: MOI.AbstractVectorFunction , s:: S ) where {T, F, S}
121122 d = MOI. dimension (s)
122- slacks = MOI. add_variables (model, d )
123+ slacks, slacks_in_set = MOI. add_constrained_variables (model, s )
123124 new_f = MOIU. operate (- , T, f, MOI. VectorOfVariables (slacks))
124- slacks_in_set = MOI. add_constraint (model, MOI. VectorOfVariables (slacks), s)
125125 equality = MOI. add_constraint (model, new_f, MOI. Zeros (d))
126126 return VectorSlackBridge {T, F, S} (slacks, slacks_in_set, equality)
127127end
@@ -138,9 +138,11 @@ MOI.supports_constraint(::Type{VectorSlackBridge{T}},
138138MOI. supports_constraint (:: Type{VectorSlackBridge{T}} ,
139139 :: Type{<:MOI.VectorOfVariables} ,
140140 :: Type{<:MOI.AbstractVectorSet} ) where {T} = false
141- MOIB. added_constrained_variable_types (:: Type{<:VectorSlackBridge} ) = Tuple{DataType}[]
141+ function MOIB. added_constrained_variable_types (:: Type{<:VectorSlackBridge{T, F, S}} ) where {T, F, S}
142+ return [(S,)]
143+ end
142144function MOIB. added_constraint_types (:: Type{VectorSlackBridge{T, F, S}} ) where {T, F<: MOI.AbstractVectorFunction , S}
143- return [(F, MOI. Zeros), (MOI . VectorOfVariables, S) ]
145+ return [(F, MOI. Zeros)]
144146end
145147function concrete_bridge_type (:: Type{<:VectorSlackBridge{T}} ,
146148 F:: Type{<:MOI.AbstractVectorFunction} ,
@@ -150,16 +152,16 @@ function concrete_bridge_type(::Type{<:VectorSlackBridge{T}},
150152end
151153
152154# Attributes, Bridge acting as a model
153- MOI. get (b:: VectorSlackBridge{T, F, S} , :: MOI.NumberOfVariables ) where {T, F, S} = length (b. slacks)
154- MOI. get (b:: VectorSlackBridge{T, F, S} , :: MOI.NumberOfConstraints{F, MOI.Zeros} ) where {T, F, S} = 1
155+ MOI. get (b:: VectorSlackBridge , :: MOI.NumberOfVariables ) = length (b. slacks)
156+ MOI. get (b:: VectorSlackBridge , :: MOI.ListOfVariableIndices ) = b. slacks
157+ MOI. get (b:: VectorSlackBridge{T, F} , :: MOI.NumberOfConstraints{F, MOI.Zeros} ) where {T, F} = 1
155158MOI. get (b:: VectorSlackBridge{T, F, S} , :: MOI.NumberOfConstraints{MOI.VectorOfVariables, S} ) where {T, F, S} = 1
156- MOI. get (b:: VectorSlackBridge{T, F, S } , :: MOI.ListOfConstraintIndices{F, MOI.Zeros} ) where {T, F, S } = [b. equality]
159+ MOI. get (b:: VectorSlackBridge{T, F} , :: MOI.ListOfConstraintIndices{F, MOI.Zeros} ) where {T, F} = [b. equality]
157160MOI. get (b:: VectorSlackBridge{T, F, S} , :: MOI.ListOfConstraintIndices{MOI.VectorOfVariables, S} ) where {T, F, S} = [b. slacks_in_set]
158161
159162# Indices
160163function MOI. delete (model:: MOI.ModelLike , c:: VectorSlackBridge )
161164 MOI. delete (model, c. equality)
162- MOI. delete (model, c. slacks_in_set)
163165 MOI. delete (model, c. slacks)
164166 return
165167end
0 commit comments