python, gurobi: эффективное добавление ограничений

Я пытаюсь оптимизировать модель с 800+ измерениями и 3000+ неравенствами в gurobipy. Поскольку я не смог найти способ добавления всей матрицы в качестве ограничений, я добавляю их с помощью следующего кода:

for index,inequality in enumerate(inequalities):
    expression = 0
    for index2,variable in enumerate(inequality):
        expression += variable*x[index2]
    m.addConstr(expression >= rhs[index])

где x - переменные. На эту часть программ нужно 70+ секунд, а задача оптимизируется за доли секунд. Может ли кто-нибудь указать мне направление, как более эффективно добавлять ограничения?


person Stefan Kober    schedule 09.11.2018    source источник


Ответы (1)


Мне удалось улучшить время до менее одной секунды за счет того, что почти вся матрица состоит из нулей путем изменения строки

for index2,variable in enumerate(inequality):

to

for index2,variable in [(index2,variable) for index2,variable in enumerate(inequality) if variable!=0]:

поскольку необходимо выполнить лишь небольшую часть операций. Меня по-прежнему интересовал бы более чистый способ добавления этих ограничений в мою модель.

person Stefan Kober    schedule 09.11.2018