Я пытаюсь использовать классы библиотек pulb для решения проблемы LP. У меня проблемы с внедрением ограничения в мой код.
После импорта соответствующих классов и чтения из моего CSV-файла я написал:
prob = pulp.LpProblem("Optimal Number of Bank Tellers", pulp.LpMinimize)
x = pulp.LpVariable("Number of Tellers", lowBound = 0, cat='Integer')
prob += x * (16*4 + 14*4)/8 , "Total Cost of Labor"
for i in [28, 35, 21, 46, 32, 14, 24, 32]:
prob += i / x <= 1/8, "Service Level Constraint for Time Slot {}".format(i)
prob.solve()
К сожалению, я не совсем понимаю, почему я получаю сообщение об ошибке, что «int» и «LpVariable» являются неподдерживаемым типом операнда.
Как бы я правильно смоделировал свое ограничение в противном случае? Что именно я сделал не так здесь?
i / x <= 1/8
явно нелинейна. PuLP предназначен только для линейных моделей. Конечно, вы могли бы написать:
i <= x * (1/8)
что делает это линейным.
На самом деле нет необходимости генерировать все эти ограничения. Мы можем обойтись только одним:
x >= 8*max([28, 35, 21, 46, 32, 14, 24, 32])
Наконец, несколько лучше указать это как нижнюю границу x напрямую.