NameError at / free переменная 'y', на которую ссылается перед присваиванием в окружающей области - PullRequest
0 голосов
/ 29 апреля 2020

Мне нужно сделать небольшой проект для моего университетского веб-приложения, которое решит проблему с транспортировкой, и я действительно делаю версию для 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

для одной и той же строки.

1 Ответ

0 голосов
/ 29 апреля 2020

В ограничениях на поставку присвойте Distributors y (в настоящее время y не определено), например:

for x in Warehouses:
    prob += lpSum([route_vars[x][y] for y in Distributors]) <= supply[x], "Sum of Products out of Warehouse %s"%x

Та же ошибка применяется к ограничениям спроса, где Warehouses должно быть назначенным на x.

Для развертывания Apache и mod_wsgi является одним из вариантов. https://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/modwsgi/

...