Перечисление ограничений в модели LP в пакете Pulp - PullRequest
0 голосов
/ 17 апреля 2020

Я создаю модель линейной оптимизации, используя python, используя пакет целлюлозы. Мне интересно, есть ли простой способ добавить ограничения в модель без большого количества жесткого кодирования каждой переменной. Например ... В настоящее время я использую для l oop для создания следующих установленных ограничений разделения:

for j in range(0,(len(excel_data_df))) :
    i = j * 3
    OptModel += x[i] + x[i + 1] + x[i + 2] == 1

Это работает для небольших задач. Однако, когда переменная i становится больше, добавление всех индексов в ограничение становится очень трудоемким.

Можно ли будет l oop просмотреть все значения, которые я могу принять, а затем автоматически сгенерировать строку кода OptModel + =? Например, если переменная i равна 100, я бы хотел, чтобы код генерировал следующее без необходимости вручную добавлять каждую переменную x [i].

 for j in range(0,(len(excel_data_df))) :
    for i in range(0,100)
       OptModel += x[0] + x[1] + x[2] + ......+ x[100] == 1

1 Ответ

1 голос
/ 17 апреля 2020

Вы можете использовать метод lpSum, который позволяет вам суммировать по спискам vatriables - так что все, что вам нужно сделать, это иметь способ генерирования индексов, по которым вы хотите суммировать. Во втором примере вы можете сделать:

OptModel += lpSum([x[i] for i in range(0, 100)]) == 1
...