Как исправить: TypeError: Может добавлять только объекты LpConstraintVar, LpConstraint, LpAffineExpression или True - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь создать LP, используя PuLP.Переменные решения генерируются путем подсчета строк в CSV и добавления по одной для каждой строки.Когда я хочу создать свою целевую функцию, она возвращает ошибку TypeError.

optimale_bestellmenge = ""
for rownum, row in data.iterrows():
    for i, schedule in enumerate(decision_variables):
        if rownum == i:
            formula = sqrt(2 * row['Kosten'] *row['bedarf'] / row['hkosten'])
            optimale_bestellmenge += formula

prob += optimale_bestellmenge
print ("Zielfunktion: " + str(optimale_bestellmenge))

Я знаю, что такое ошибка TypeError в целом, но я не могу понять, как и какой Type мне следуетпреобразовать формулу в.Это полная ошибка:

Traceback (most recent call last):
  File "C:/Users/T/Desktop/optimizer/eoq.py", line 62, in <module>
    optimales_eoq_modell(budget)
  File "C:/Users/T/Desktop/optimizer/eoq.py", line 37, in optimales_eoq_modell
    prob += optimale_bestellmenge
  File "C:\Users\T\AppData\Local\Programs\Python\Python37\lib\site-packages\pulp\pulp.py", line 1358, in __iadd__
    raise TypeError("Can only add LpConstraintVar, LpConstraint, LpAffineExpression or True objects")
TypeError: can only concatenate str (not "float") to str

Я уже пытался преобразовать формулу с помощью функции str (), но тогда ошибка TypeError изменится только на:

TypeError: Can only add LpConstraintVar, LpConstraint, LpAffineExpression or True objects

1 Ответ

0 голосов
/ 16 мая 2019

Это строка:

optimale_bestellmenge = ""

Это число с плавающей точкой:

formula = sqrt(2 * row['Kosten'] *row['bedarf'] / row['hkosten'])

Это вы пытаетесь добавить число с плавающей точкой к строке:

optimale_bestellmenge += formula

Если вы хотите, чтобы число formula отображалось в конце строки optimale_bestellmenge, сделайте следующее:

optimale_bestellmenge += str(formula)

Если вы хотите продолжать добавлять число в formula к optimale_bestellmenge, измените определение optimale_bestellmenge на float или int:

optimale_bestellmenge = 0
...