#python #optimization #linear-programming #pulp #integer-programming
#python #оптимизация #линейное программирование #pulp #целочисленное программирование
Вопрос:
Я пытаюсь сформулировать это сложное ограничение на основе матрицы в PuLP для задачи оптимизации затрат: у меня есть vars[(i,j)] for i in TruckTypes for j in Days
в качестве переменной решения, которая может принимать только неотрицательные целые значения. Я пытаюсь реализовать ограничение на количество active
дней.
Теперь, поскольку Days
они обозначаются как столбцы, любой столбец, который имеет все нулевые значения, является inactive
днем, а все остальные столбцы — active
днями. Есть 6 столбцов, обозначающих понедельник- субботу. Например, в приведенной ниже матрице :
1 0 0 1 3 0
0 0 0 1 1 0
2 0 0 1 0 0
0 0 0 1 0 0
Столбцы 2,3 и 6 являются inactive
, а столбцы 1,4 и 5 являются active
. Теперь, как сформулировать ограничение, такое Number of active Days == 3
как для этой переменной решения.
Любая помощь будет оценена. Спасибо!!
Ответ №1:
Подумав некоторое время.. Я думаю, что я взломал это…
- Создайте фиктивную 1-D двоичную переменную решения для активных дней. 0- Неактивный 1-Активный.
ActiveDays = LpVariable.dicts(‘activedays’, Days, 0,1, LpBinary)
- Создайте фиктивную очень большую константу.
M = 200000
- Добавьте первое ограничение.
проблема = LpSum (m[j] для j в днях) ==3
-
Добавьте второе ограничение
for j in Days: prob = LpSum(vars[i][j] for i in TruckTypes) <= M*m[j]