问题描述
我尝试在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,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",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",j)] for j in FACILITY for i in CUSTOMERS)
10
TypeError: tuple indices must be integers or slices,not str
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)