|
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