@@ -43,14 +43,11 @@ function bridge_constraint(
43
43
f:: MOI.AbstractVectorFunction ,
44
44
set:: MOI.Utilities.VectorLinearSet ,
45
45
) 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))
54
51
end
55
52
56
53
function MOI. supports_constraint (
@@ -270,24 +267,14 @@ function MOI.set(
270
267
bridge:: ScalarizeBridge{T,F,S} ,
271
268
func,
272
269
) where {T,F,S}
273
- old_constants = bridge. constants
274
270
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])
290
275
end
276
+ MOI. set (model, MOI. ConstraintFunction (), ci, fi)
277
+ MOI. set (model, MOI. ConstraintSet (), ci, S (- bridge. constants[i]))
291
278
end
292
279
return
293
280
end
0 commit comments