Изменить нижнюю границу в Гуроби

У меня есть большое количество переменных решения x[i,j,k,l]. Я использую gurobi с Python. Я хочу изменить нижнюю границу некоторых x, которые i в списке. Из-за количества переменных решения, какой способ лучше?
Я хочу использовать цикл for как можно меньше. в настоящее время я использую следующие строки, которые отнимают слишком много времени. Могу ли я сделать это только в цикле, т.е. для i в списке?

for i in list:
   for j in J:
     for k in K:
        for l in L:
             model.getVarByName('x[{},{},{},{}]'.format(i,j,k,l)).LB==0

person amin ahmadi    schedule 09.01.2021    source источник


Ответы (2)


Фактически, вы можете установить нижнюю границу группы переменных с помощью одного простого оператора

model.setAttr("LB", x, 0)
person Wouter    schedule 28.01.2021

Это зависит от того, как вы создали эти переменные. Если у вас есть они доступны в виде многомерного multidict с этими индексами, вы можете получить к ним доступ сразу, не перебирая все измерения и индексы. Вам следует избегать получения переменных по именам.

list = ['a','b','c']
x = model.addVars(list, J, K, L)
[model.setAttr('LB', x['a',j,k,l], 0) for i in I for k in K for l in L]

Вы также можете переосмыслить, являются ли четырехмерные переменные наиболее эффективным способом моделирования вашей проблемы.

person mattmilten    schedule 11.01.2021