JuMP constraint specification using a generator

93 Views Asked by At

I am working through some of the JuMP example and in particular the multi commodity flow model. I am able to generate a constraint using the below:

for r in eachrow(supply)
  @constraint(model,sum(x[r.origin,:, r.product]) <= r.supply)

This works fine, however this does not:

@constraint(model,sum(x[r.origin,:, r.product]) <= r.supply for r in eachrow(supply))

The error thrown is below:

Unsupported constraint expression: we don't know how to parse constraints containing expressions of type :generator.

This seems odd because if I use a generator in an objective definition it works just fine:

@objective(model, Max, sum(r.cost*x[r.origin, r.destination, r.product] for r in eachrow(cost)))

So is the takeaway here that objectives take generators, but constraints do not, or is this something else?

1

There are 1 best solutions below

0
Oscar Dowson On BEST ANSWER

So is the takeaway here that objectives take generators, but constraints do not, or is this something else?

JuMP not support the syntax @constraint(model, lhs <= rhs for arg in iterator).

Do instead:

@constraint(
    model,
    [r in eachrow(supply)],
    sum(x[r.origin, :, r.product]) <= r.supply
)

Your objective function is something different because it is a summation. JuMP does support the sum(term for arg in iterator) syntax.