Как я могу убедиться, что мое ограничение может математически работать с LpVariable?

Я пытаюсь использовать классы библиотек 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» являются неподдерживаемым типом операнда.

Как бы я правильно смоделировал свое ограничение в противном случае? Что именно я сделал не так здесь?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
 i / x <= 1/8

явно нелинейна. PuLP предназначен только для линейных моделей. Конечно, вы могли бы написать:

 i <= x * (1/8)

что делает это линейным.

На самом деле нет необходимости генерировать все эти ограничения. Мы можем обойтись только одним:

 x >= 8*max([28, 35, 21, 46, 32, 14, 24, 32])

Наконец, несколько лучше указать это как нижнюю границу x напрямую.

Другие вопросы по теме

Как создать категориальный столбец не в алфавитном порядке в Polars Dataframe?
Как имитировать запросы Pandas на основе индекса в Polars?
Как одновременно анализировать последовательные шаблоны и выводить переменные из набора последовательностей?
Как на диаграмме рассеяния построить линию, которая является средним значением всех вертикальных координат точек данных с одинаковой координатой x
Pandas: чтение Excel с объединенными ячейками строк
Как я могу разделить свой фрейм данных по годам или месяцам
Конвейер с XGBoost — Imputer и Scaler предотвращают обучение модели
Python/Seaborn — как отображать имена каждого значения на диаграмме рассеяния
Как я могу добавить новый столбец в фрейм данных (df1), который представляет собой сумму нескольких значений поиска из df1 в другом фрейме данных (df2)
При извлечении текстовых данных из файлов в разных подкаталогах возникает ошибка «ValueError: подстрока не найдена»