如何修复,TypeError:元组索引必须是整数或切片,而不是str

2024-06-25 06:14:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用python中的纸浆在scipbook.readthedocs.io/en/latest/flp.html中编写问题代码,并遵循Caylie Cincera的步骤。代码如下:

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 

~\Anaconda3\lib\site-packages\pulp\pulp.py in lpSum(vector)
   2226     :param vector: A list of linear expressions
   2227     """
-> 2228     return LpAffineExpression().addInPlace(vector)
   2229 
   2230 

~\Anaconda3\lib\site-packages\pulp\pulp.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

Tags: inforvarspulpdictsfacilityfoodscustomers