решить функцию библиотеки pulp в python : Ошибка типа: должно быть действительное число, а не str

#python #typeerror #pulp

Вопрос:

Реализация транспортной проблемы в python

https://colab.research.google.com/drive/1ZMW3k-kk_0Zn6esTLPi5D9gyxWoAD4to?usp=sharing

 from pulp import *

destination = ["D1" , "D2" , "D3"]
origin = ["O1", "O2","O3" ,"O4"]
supply = {
    "O1" : 5,
    "O2" : 8,
    "O3" : 7,
    "O4" : 14
}

demand = {
    "D1" : 7,
    "D2" : 9,
    "D3" : 18
}

cost = {
    "O1" :{"D1" : 2 , "D2" : 7 , "D3" : 4},
    "O2" :{"D1" : 3 , "D2" : 3 , "D3" : 1},
    "O3" :{"D1" : 5 , "D2" : 4 , "D3" : 7},
    "O4" :{"D1" : 1 , "D2" : 6 , "D3" : 2}
}

prob = LpProblem("Transportation" , LpMinimize)

routes = [(i , j) for i in origin for j in destination]

route_variables = LpVariable.dicts("Route" , (origin , destination) , LpInteger)

# add the objective function in prob variable
prob  = lpSum([route_variables[o][d]*cost[o][d] for (o,d) in routes])

# add the constraints in prob variable

# supply constraints
for o in origin:
    prob  = lpSum([route_variables[o][d] for d in destination]) <= supply[o]
    
# demand constraints
for d in destination:
    prob  = lpSum([route_variables[o][d] for o in origin]) >= demand[d]

prob.solve()
 

введите описание изображения здесь

Всякий раз, когда я запускаю свой код, я получаю эту ошибку, и я не понимаю, почему.

Ответ №1:

Просто замените строку:

 route_variables = LpVariable.dicts("Route" , (origin , destination) , LpInteger)
 

Для:

 route_variables = LpVariable.dicts("Route" , (origin , destination) , cat=LpInteger)
 

Это связано с тем, что LpVariable.dicts выглядит как:

 def dicts(self, name, indexs, lowBound = None, upBound = None, cat = LpContinuous, indexStart = []):
 

Ответ №2:

Для того, чтобы проблема была решена в первую очередь, проблема должна быть записана в файл lp. Используйте утверждение

 prob.writeLP("NameofFile.lp")
 

перед вычислением с помощью prob.решите()