I am trying to write a constraint that sums the process times for each row of a matrix, Z[a,p] where Z is a binary decision variable = 1 if a is assigned p; = 0 otherwise.
I am trying to multiply the 1’s in the row by the process times Pt in order to get the sum of the process time for each a.
I originally wrote:
@constraint(m, associate_takt[a in A, p in P], sum(Z[a, p]*Pt[p] for p in P) <= takt_lim)
but realized this wasn’t actually extracting the binary variables so I asked on stack exchange (Julia-Jump Integer Programming Optimization model: issue with multiplying matrix by vector - Stack Overflow) and was helped to writing the constraint:
Z_value = value.(Z)
@constraint(m, associate_takt[a in A, p in P], sum(Z_value[a, p]*Pt[p] for p in P) <= takt_lim)
But this is throwing me an error: “OptimizeNotCalled()”
Here is the most distilled down version I could make of the model:
# Set of all available associates to work on line A = 1:2 # Set of all work processes required to complete production on the line P = 1:2 # Set of all process times in seconds Pt = [8.5, 2.41] # The takt limit for each associate working on the line (210 seconds) takt_lim = 10 m = Model() # Binary variable = 1 if associate a is assigned to station s; = 0 otherwise @variable(m, Y[A, S], Bin) # Minimize the total number of associates needed to run the line @objective(m, Min, sum(sum(Y[a, s] for a in A) for s in S)) # All Associates must stay under the takt_lim Z_value = value.(Z) @constraint(m, associate_takt[a in A, p in P], sum(Z_value[a, p]*Pt[p] for p in P) <= takt_lim) set_optimizer(m, Cbc.Optimizer) optimize!(m)