Как исправить, ошибка типа: индексы кортежей должны быть целыми числами или срезами, а не str

#python #python-3.x #pulp

#python #python-3.x #мякоть

Вопрос:

Я пытаюсь закодировать проблему в scipbook.readthedocs.io/en/latest/flp.html используя pulp в python, и я следую шагу Кейли Цинцеры. это код:

 from pulp import *
FOODS = ['OATMEAL', 'CHICKEN', 'EGGS', 'MILK']
CUSTOMERS = [1,2,3,4,5]
FACILITY = ['FAC1', 'FAC2', 'FAC3']
dem = {1: 80,      
       2: 270,
       3: 250,
       4: 160,
       5: 180}
maxam = {'FAC1': 500,
         'FAC2': 500,
         'FAC3': 500}
actcost = {'FAC1': 1000,
           'FAC2': 1000,
           'FAC3': 1000}
transp = {'FAC1': {1:4, 2:5, 3:6, 4:8, 5:10},  
          'FAC2': {1:6, 2:4, 3:3, 4:5, 5:8},
          'FAC3': {1:9, 2:7, 3:4, 4:3, 5:4}}

prob = LpProblem("FacilityLocation", LpMinimize) 

use_vars = LpVariable.dicts("UseLocation",FACILITY,0,1,LpBinary)  
serv_vars = LpVariable.dicts("Service", [(i,j) for i in CUSTOMERS 
                                               for j in FACILITY],0)
foods_vars = LpVariable.dicts("food", FOODS, 0)

prob  = lpSum(actcost[j]*use_vars[j] for j in FACILITY)   lpSum(transp[j][i]*serv_vars[(i,j)] for j in FACILITY for i in CUSTOMERS)
  

но это выдает мне ошибку для последней строки, TypeError: индексы кортежей должны быть целыми числами или срезами, а не str

как это исправить?

Сообщение об ошибке:

 TypeError                                 Traceback (most recent call last)
<ipython-input-13-7ff9cd483731> in <module>
      7 foods_vars = LpVariable.dicts("food", FOODS, 0)
      8 
----> 9 prob  = lpSum(actcost[j]*use_vars[j] for j in FACILITY)   lpSum(transp[j][i]*serv_vars[(i,j)] for j in FACILITY for i in CUSTOMERS)
     10 

~Anaconda3libsite-packagespulppulp.py in lpSum(vector)
   2226     :param vector: A list of linear expressions
   2227     """
-> 2228     return LpAffineExpression().addInPlace(vector)
   2229 
   2230 

~Anaconda3libsite-packagespulppulp.py in addInPlace(self, other)
    760         elif (isinstance(other,list)
    761               or isinstance(other, Iterable)):
--> 762            for e in other:
    763                 self.addInPlace(e)
    764         else:

<ipython-input-13-7ff9cd483731> in <genexpr>(.0)
      7 foods_vars = LpVariable.dicts("food", FOODS, 0)
      8 
----> 9 prob  = lpSum(actcost[j]*use_vars[j] for j in FACILITY)   lpSum(transp[j][i]*serv_vars[(i,j)] for j in FACILITY for i in CUSTOMERS)
     10 

TypeError: tuple indices must be integers or slices, not str
  

Комментарии:

1. Пожалуйста, укажите полное сообщение об ошибке.

2. Готово, я добавляю полное сообщение об ошибке в свой вопрос

3. Это очень плотная строка! Использование for цикла и разбиение его на более простые операторы вместо нескольких цепочек списков может улучшить его читаемость, и было бы легче указать, где ошибка. Также где transp определена переменная?

4. Добро пожаловать в SO! С указанным кодом я не получаю никаких сообщений об ошибках, используя Python 3.7.3 и pulp 2.3.1