Question on programmatically defining a nonlinear expression involving product and sum

You could do something like this:

using JuMP
m, n = [3, 1, 2], 3
generate_A(n::Int, m::Vector{Int}) = [rand(m...) for i in 1:n]
A = generate_A(n, m)
model = Model()
@variable(model, x[i in 1:n, k_i in 1:m[i]])
@expression(
    model,
    [i in 1:n],
    sum(
        A[i][k...] * prod(x[j,k[j]] for j in 1:n)
        for k in Iterators.product(map(i->1:i, m)...)
    )
)
2 Likes