Как сформулировать матричное ограничение для оптимизации затрат в 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, для этой переменной решения.

Любая помощь будет оценена. Спасибо!!


person Utkarsh Srivastava    schedule 14.09.2020    source источник


Ответы (1)


Подумав немного ... Думаю, я взломал этот ...

  1. Создайте фиктивную одномерную переменную двоичного решения для активных дней. 0- Неактивный 1-Активный.

ActiveDays = LpVariable.dicts ('активные дни', Дни, 0,1, LpBinary)

  1. Создайте фиктивную очень большую константу.

M=200000

  1. Добавьте первое ограничение.

prob + = LpSum (m [j] для j в днях) == 3

  1. Добавить второе ограничение

    for j in Days:
    
         prob += LpSum(vars[i][j] for i in TruckTypes) <= M*m[j]
    
person Utkarsh Srivastava    schedule 14.09.2020