Skip to content

Commit a049bfe

Browse files
authored
[Bridges] various updates based on VectorNonlinearFunction changes (#2244)
1 parent e7f3eff commit a049bfe

File tree

3 files changed

+17
-27
lines changed

3 files changed

+17
-27
lines changed

src/Bridges/Constraint/bridges/scalarize.jl

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,11 @@ function bridge_constraint(
4343
f::MOI.AbstractVectorFunction,
4444
set::MOI.Utilities.VectorLinearSet,
4545
) where {T,F,S}
46-
dimension = MOI.output_dimension(f)
47-
constants = MOI.constant(f, T)
48-
new_f = MOI.Utilities.scalarize(f, true)
49-
constraints = Vector{MOI.ConstraintIndex{F,S}}(undef, dimension)
50-
for i in 1:dimension
51-
constraints[i] = MOI.add_constraint(model, new_f[i], S(-constants[i]))
52-
end
53-
return ScalarizeBridge{T,F,S}(constraints, constants)
46+
constraints = MOI.ConstraintIndex{F,S}[
47+
MOI.Utilities.normalize_and_add_constraint(model, fi, S(zero(T)))
48+
for fi in MOI.Utilities.eachscalar(f)
49+
]
50+
return ScalarizeBridge{T,F,S}(constraints, MOI.constant(f, T))
5451
end
5552

5653
function MOI.supports_constraint(
@@ -270,24 +267,14 @@ function MOI.set(
270267
bridge::ScalarizeBridge{T,F,S},
271268
func,
272269
) where {T,F,S}
273-
old_constants = bridge.constants
274270
bridge.constants = MOI.constant(func, T)
275-
new_func = MOI.Utilities.scalarize(func, true)
276-
MOI.set.(
277-
model,
278-
MOI.ConstraintFunction(),
279-
bridge.scalar_constraints,
280-
new_func,
281-
)
282-
for i in eachindex(bridge.constants)
283-
if bridge.constants[i] != old_constants[i]
284-
MOI.set(
285-
model,
286-
MOI.ConstraintSet(),
287-
bridge.scalar_constraints[i],
288-
S(-bridge.constants[i]),
289-
)
271+
for (i, fi) in enumerate(MOI.Utilities.eachscalar(func))
272+
ci = bridge.scalar_constraints[i]
273+
if !iszero(bridge.constants[i])
274+
fi = MOI.Utilities.operate!(-, T, fi, bridge.constants[i])
290275
end
276+
MOI.set(model, MOI.ConstraintFunction(), ci, fi)
277+
MOI.set(model, MOI.ConstraintSet(), ci, S(-bridge.constants[i]))
291278
end
292279
return
293280
end

src/Bridges/Constraint/bridges/soc_to_psd.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ of the matrix:
1919
"""
2020
function _soc_to_psd_matrix(
2121
::Type{T},
22-
f::Union{MOI.AbstractVectorFunction,AbstractVector{T}},
22+
f::Union{MOI.AbstractVectorFunction,AbstractVector},
2323
g::Union{MOI.AbstractScalarFunction,T},
2424
) where {T}
2525
F = MOI.Utilities.promote_operation(vcat, T, typeof(g), T)

src/Bridges/Constraint/bridges/vectorize.jl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,12 @@ function bridge_constraint(
4949
if !iszero(scalar_const)
5050
throw(MOI.ScalarFunctionConstantNotZero{T,G,typeof(set)}(scalar_const))
5151
end
52-
vector_f = convert(F, scalar_f)
5352
set_const = MOI.constant(set)
54-
MOI.Utilities.operate_output_index!(-, T, 1, vector_f, set_const)
53+
vector_f = MOI.Utilities.operate(
54+
vcat,
55+
T,
56+
MOI.Utilities.operate(-, T, scalar_f, set_const),
57+
)
5558
vector_constraint = MOI.add_constraint(model, vector_f, S(1))
5659
return VectorizeBridge{T,F,S,G}(vector_constraint, set_const)
5760
end

0 commit comments

Comments
 (0)