Skip to content

Commit b3a78e6

Browse files
authored
[Bridges.Variable] change ParameterToEqualToBridge to <: SetMapBridge (#2664)
1 parent ad6c689 commit b3a78e6

File tree

8 files changed

+351
-188
lines changed

8 files changed

+351
-188
lines changed

src/Bridges/Variable/bridges/ParameterToEqualToBridge.jl

Lines changed: 18 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -23,121 +23,38 @@
2323
2424
* One variable node: [`MOI.VariableIndex`](@ref) in [`MOI.EqualTo{T}`](@ref)
2525
"""
26-
struct ParameterToEqualToBridge{T} <: AbstractBridge
27-
x::MOI.VariableIndex
28-
ci::MOI.ConstraintIndex{MOI.VariableIndex,MOI.EqualTo{T}}
26+
struct ParameterToEqualToBridge{T} <:
27+
SetMapBridge{T,MOI.EqualTo{T},MOI.Parameter{T}}
28+
variable::MOI.VariableIndex
29+
constraint::MOI.ConstraintIndex{MOI.VariableIndex,MOI.EqualTo{T}}
2930
end
3031

3132
const ParameterToEqualTo{T,OT<:MOI.ModelLike} =
3233
SingleBridgeOptimizer{ParameterToEqualToBridge{T},OT}
3334

34-
function bridge_constrained_variable(
35-
::Type{ParameterToEqualToBridge{T}},
36-
model::MOI.ModelLike,
37-
set::MOI.Parameter{T},
38-
) where {T}
39-
x, ci = MOI.add_constrained_variable(model, MOI.EqualTo(set.value))
40-
return ParameterToEqualToBridge{T}(x, ci)
41-
end
42-
43-
function supports_constrained_variable(
44-
::Type{ParameterToEqualToBridge{T}},
45-
::Type{MOI.Parameter{T}},
46-
) where {T}
47-
return true
48-
end
49-
50-
function MOI.Bridges.added_constrained_variable_types(
51-
::Type{ParameterToEqualToBridge{T}},
52-
) where {T}
53-
return Tuple{Type}[(MOI.EqualTo{T},)]
54-
end
55-
56-
function MOI.Bridges.added_constraint_types(::Type{<:ParameterToEqualToBridge})
57-
return Tuple{Type,Type}[]
58-
end
59-
60-
MOI.get(bridge::ParameterToEqualToBridge, ::MOI.NumberOfVariables)::Int64 = 1
61-
62-
function MOI.get(bridge::ParameterToEqualToBridge, ::MOI.ListOfVariableIndices)
63-
return [bridge.x]
64-
end
65-
66-
function MOI.get(
67-
::ParameterToEqualToBridge{T},
68-
::MOI.NumberOfConstraints{MOI.VariableIndex,MOI.EqualTo{T}},
69-
)::Int64 where {T}
70-
return 1
71-
end
72-
73-
function MOI.get(
74-
bridge::ParameterToEqualToBridge{T},
75-
::MOI.ListOfConstraintIndices{MOI.VariableIndex,MOI.EqualTo{T}},
35+
function MOI.Bridges.map_set(
36+
::Type{<:ParameterToEqualToBridge{T}},
37+
set::MOI.EqualTo{T},
7638
) where {T}
77-
return [bridge.ci]
39+
return MOI.Parameter{T}(set.value)
7840
end
7941

80-
function MOI.delete(model::MOI.ModelLike, bridge::ParameterToEqualToBridge)
81-
MOI.delete(model, bridge.x)
82-
return
83-
end
84-
85-
function MOI.get(
86-
model::MOI.ModelLike,
87-
::MOI.ConstraintSet,
88-
bridge::ParameterToEqualToBridge{T},
42+
function MOI.Bridges.inverse_map_set(
43+
::Type{<:ParameterToEqualToBridge{T}},
44+
set::MOI.Parameter{T},
8945
) where {T}
90-
set = MOI.get(model, MOI.ConstraintSet(), bridge.ci)
91-
return MOI.Parameter(set.value)
46+
return MOI.EqualTo{T}(set.value)
9247
end
9348

94-
function MOI.get(
95-
model::MOI.ModelLike,
96-
attr::Union{MOI.ConstraintFunction,MOI.ConstraintPrimal,MOI.ConstraintDual},
97-
bridge::ParameterToEqualToBridge,
98-
)
99-
return MOI.get(model, attr, bridge.ci)
100-
end
49+
MOI.Bridges.map_function(::Type{<:ParameterToEqualToBridge}, f) = f
10150

102-
function _to_one(::Type{T}, x) where {T}
103-
return MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(one(T), x)], zero(T))
104-
end
51+
MOI.Bridges.inverse_map_function(::Type{<:ParameterToEqualToBridge}, f) = f
10552

106-
function MOI.Bridges.bridged_function(
107-
bridge::ParameterToEqualToBridge{T},
108-
) where {T}
109-
return _to_one(T, bridge.x)
110-
end
53+
MOI.Bridges.adjoint_map_function(::Type{<:ParameterToEqualToBridge}, f) = f
11154

112-
function unbridged_map(
113-
bridge::ParameterToEqualToBridge{T},
114-
x::MOI.VariableIndex,
115-
) where {T}
116-
return [bridge.x => _to_one(T, x)]
117-
end
118-
119-
function MOI.supports(
120-
model::MOI.ModelLike,
121-
attr::MOI.VariablePrimalStart,
55+
function MOI.Bridges.inverse_adjoint_map_function(
12256
::Type{<:ParameterToEqualToBridge},
57+
f,
12358
)
124-
return MOI.supports(model, attr, MOI.VariableIndex)
125-
end
126-
127-
function MOI.get(
128-
model::MOI.ModelLike,
129-
attr::Union{MOI.VariablePrimal,MOI.VariablePrimalStart},
130-
bridge::ParameterToEqualToBridge,
131-
)
132-
return MOI.get(model, attr, bridge.x)
133-
end
134-
135-
function MOI.set(
136-
model::MOI.ModelLike,
137-
attr::MOI.VariablePrimalStart,
138-
bridge::ParameterToEqualToBridge,
139-
value,
140-
)
141-
MOI.set(model, attr, bridge.x, value)
142-
return
59+
return f
14360
end

src/Bridges/Variable/map.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ is set by this constraint and such bound has already been set for `vi`.
282282
"""
283283
function MOI.add_constraint(::Map, ::MOI.VariableIndex, ::MOI.AbstractScalarSet)
284284
# Nothing to do as this is not recognized as setting a lower or upper bound
285+
return
285286
end
286287

287288
# We cannot use `SUPPORTED_VARIABLE_SCALAR_SETS` because
@@ -321,6 +322,7 @@ function MOI.delete(
321322
ci::MOI.ConstraintIndex{MOI.VariableIndex,<:MOI.AbstractScalarSet},
322323
)
323324
# Nothing to do as this is not recognized as setting a lower or upper bound
325+
return
324326
end
325327

326328
function MOI.delete(

0 commit comments

Comments
 (0)