Мне нужно сделать небольшой проект для моего университетского веб-приложения, которое решит проблему с транспортировкой, и я действительно делаю версию для MVP. Я использую Django для веб-приложения и PuLP для части проблемы транспортировки.
При запуске моей логики решения проблем c я получаю сообщение об ошибке:
NameError at / free variable ' y 'ссылка перед присвоением в прилагаемой области действия
для строки:
prob += lpSum([route_vars[x][y] for x in Distributors]) <= supply[x], "Sum of Products out of Warehouse %s"%x
Я использовал пример PuLP из их GitHub здесь
Мой код для этой части приведен ниже:
Warehouses = [0,1,2]
supply = { 0: deliver1,
1: deliver2,
2: deliver3
}
Distributors = [0, 1, 2]
demand = { 0: receiver1,
1: receiver2,
2: receiver3
}
costs = [ #dsitributors -static variables for debugging will change that later on
#D E F
[3, 5, 7],#A Warehouse
[12, 10, 9],#B Warehouse
[13, 3, 9],#C Warehouse
]
prob = LpProblem("Transportation Problem",LpMinimize)
Routes = [(x,y) for x in Warehouses for y in Distributors]
route_vars = LpVariable.dicts("Route",(Warehouses,Distributors),0,None,LpInteger)
prob += lpSum([route_vars[x][y]*costs[x][y] for (x,y) in Routes]), "Sum of Transporting Costs"
for x in Warehouses:
prob += lpSum([route_vars[x][y] for x in Distributors]) <= supply[x], "Sum of Products out of Warehouse %s"%x
for y in Distributors:
prob += lpSum([route_vars[x][y] for y in Warehouses]) >= demand[y], "Sum of Products into Distributors %s"%y
prob.writeLP("TransportationProblem.lp")
prob.solve()
print("Status:", LpStatus[prob.status])
for v in prob.variables():
print(v.name, "=", v.varValue)
print("Total Cost of transportation = ", value(prob.objective))
Я думаю, что это просто глупая ошибка, которую я допустил, но не могу ее найти ... Кроме того, мой обходной путь для получения был назван Складами и Дистрибьюторами по номерам, а не по именам.
Ошибка типа: индексы списка должны быть целыми или кусочками, а не str
для одной и той же строки.