Я очень новичок в Python, так что прости меня, если это глупый вопрос - но я пытался понять, почему я получаю эту ошибку каждый раз, когда пытаюсь определить свои ограничения в задаче оптимизации Я работаю над.
Ниже мой код:
# input parameters
product = ['Chairs', 'Desks', 'Tables'] # list of product names
department = ['Fabrication', 'Assembly', 'Shipping'] # list of constraint names
profit = [15.00, 24.00, 18.00] # list of product profit coefficients
max_sales = [360, 300, 100] # list of maximum sales for each product
hours_req = [[4, 6, 2], [3, 5, 7], [3, 2, 4]] # two dimensional list of hour constraint coefficients
# each sublist corresponds to a constraint
hours_avl = [1850, 2400, 1500] # list of hours available for each department
# initialize LP model object
mymodel = glp.Solver('Lexington', glp.Solver.GLOP_LINEAR_PROGRAMMING)
# define decision variables
dvar = list(range(len(product))) # create a list to store one variable for each product
for i in range(len(product)): # loop to create a variable for each product
dvar[i] = mymodel.NumVar(0, mymodel.infinity(), product[i])
# arguments: (lower bound, upper bound, name)
# define objective function
TotProfit = mymodel.Objective() # create objective function object
TotProfit.SetMaximization() # set direction of optimization
for i in range(len(product)): # loop to set the objective coefficient for each product variable
TotProfit.SetCoefficient(dvar[i], profit[i])
# arguments: (variable, coefficient)
# define constraints
hours_constr = list(range(len(department)))
for h in range(len(department)):
constr[h] = mymodel.Constraint(0, hours_avl[h])
for f in range(len(product)):
constr[h].SetCoefficient(dvar[f], hours_req[h][f])
for a in range(len(product)):
constr[h].SetCoefficient(dvar[a], hours_req[h][a])
for s in range(len(product)):
constr[h].SetCoefficient(dvar[s], hours_req[h][s])
sales_constr = list(range(len(product)))
for s in range(len(product)):
constr[s] = mymodel.Constraint(0, max_sales[s])
for c in range(len(department)):
constr[s].SetCoefficient(dvar[c], max_sales[s][c])
for d in range(len(department)):
constr[s].SetCoefficient(dvar[d], max_sales[s][d])
for t in range(len(department)):
constr[s].SetCoefficient(dvar[t], max_sales[s][t])
Весь приведенный выше код работает нормально, пока я не докажу второе ограничение (sales_constr). В этот момент мне выдается следующее сообщение об ошибке:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-116-a5209111faaa> in <module>
14 constr[s] = mymodel.Constraint(0, max_sales[s])
15 for c in range(len(department)):
---> 16 constr[s].SetCoefficient(dvar[c], max_sales[s][c])
17 for d in range(len(department)):
18 constr[s].SetCoefficient(dvar[d], max_sales[s][d])
TypeError: 'int' object is not subscriptable
Кто-нибудь знает, почему я получаю это сообщение? Я пытался понять это слишком долго, и я совершенно тупик, поэтому любая помощь будет очень признательна!
Спасибо!