我尝试使用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
目前没有回答
相关问题 更多 >
编程相关推荐