#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