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

#python #gurobi

#python #gurobi

Вопрос:

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

 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
 

Ответ №1:

Это зависит от того, как вы создали эти переменные. Если у вас есть они доступны в виде многомерного 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]
 

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

Ответ №2:

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

 model.setAttr("LB", x, 0)