|
23 | 23 |
|
24 | 24 | * One variable node: [`MOI.VariableIndex`](@ref) in [`MOI.EqualTo{T}`](@ref)
|
25 | 25 | """
|
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}} |
29 | 30 | end
|
30 | 31 |
|
31 | 32 | const ParameterToEqualTo{T,OT<:MOI.ModelLike} =
|
32 | 33 | SingleBridgeOptimizer{ParameterToEqualToBridge{T},OT}
|
33 | 34 |
|
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}, |
76 | 38 | ) where {T}
|
77 |
| - return [bridge.ci] |
| 39 | + return MOI.Parameter{T}(set.value) |
78 | 40 | end
|
79 | 41 |
|
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}, |
89 | 45 | ) where {T}
|
90 |
| - set = MOI.get(model, MOI.ConstraintSet(), bridge.ci) |
91 |
| - return MOI.Parameter(set.value) |
| 46 | + return MOI.EqualTo{T}(set.value) |
92 | 47 | end
|
93 | 48 |
|
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 |
101 | 50 |
|
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 |
105 | 52 |
|
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 |
111 | 54 |
|
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( |
122 | 56 | ::Type{<:ParameterToEqualToBridge},
|
| 57 | + f, |
123 | 58 | )
|
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 |
143 | 60 | end
|
0 commit comments