lines = range(3)
products = range(3)
workers = range(20)
cost_per_worker = [700,1000,1500] # on production lines 1,2,3
products_per_worker = [[50,90,120],[75,110,130],[90,125,150]] # product i/line j
demand = [600,800,1000] #for products 1,2,3
# Production line setup costs
setup = [2000,3000,4000]
m = Model('Rader 3.3')
# Variables
# y[i] = 1 if line i is used; 0 otherwise
y = {}
for line in lines:
y[line] = m.addVar(obj=setup[line],vtype=GRB.BINARY,name='y%s' % (line))
# w[i,j,k] = 1 if worker i produces product j on line k
w={}
for i in workers:
for j in products:
for k in lines:
w[i,j,k] = m.addVar(obj=cost_per_worker[k],vtype=GRB.BINARY,name='w%d%d%d' % (i,j,k))
m.update()
#Meet demand for product j
for j in products:
m.addConstr(quicksum(products_per_worker[j,k]*quicksum(w[i,j,k] for i in workers)
for k in lines) >= demand[j], 'demand_%d' % (j))