python, gurobi: эффективно добавлять ограничения - PullRequest
0 голосов
/ 09 ноября 2018

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

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

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

1 Ответ

0 голосов
/ 09 ноября 2018

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

for index2,variable in enumerate(inequality):

до

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

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

...