# Performance issues with matrix multiplication in JuMP

I am trying to do linear constraint optimisation as follows:

``````model = Model(Tulip.Optimizer)
# Set up variables
@variable(model, x[1:length(VecA)+length(VecB)])
# set up linear constraints
workingweights = x' * Mat' + VecC'
# Equalities
for i in 1:length(VecA)
@constraint(model, workingweights * Mat[:,i] == VecA[i])
end
# Inequalities
for i in 1:length(VecB)
xi = i+length(VecB)
@constraint(model, workingweights * Mat[:,i] <= VecB[i])
end

optimize!(model)
``````

Here, `Mat` is a matrix, and `VecA`, `VecB`, and `VecC` are vectors. The problem is I am getting the “addition operator has been used on JuMP expressions a large number of times…” I imagine the issue is in either the definition of `workingweights` or the `@constraints` declarations, but I am unsure how to fix this. This code is central in my program, and optimising this would help a lot.

It would help a lot if you could provide a complete, executable program so that other people can replicate your problem.

2 Likes

This is covered in the docs (but could probably be improved): https://jump.dev/JuMP.jl/stable/tutorials/Getting%20started/performance_tips/#Use-macros-to-build-expressions

Always construct expressions inside a JuMP macro:

``````@expression(model, workingweights, x' * Mat' + VecC')
``````

Can you give the types of the vectors involved in `workingweights = x' * Mat' + VecC'`, even if it is outside a macro, we also try to make it fast but it’s harder so we may be missing a method in MutableArithmetics.jl