Установка ограничения в модели Гуроби с подвижной нижней и верхней границей

Моя модель гуроби имитирует работу батареи. Однако мне интересно, можно ли установить скользящую нижнюю и верхнюю границу для полунепрерывной переменной. Ниже приведен пример, показывающий (постоянные) верхнюю и нижнюю границы, для которых я хотел бы использовать разные значения для каждого интервала. T - общее количество интервалов.

P_bat_discharge = m.addVars(T, vtype = gp.GRB.SEMICONT, name="P_bat_discharge", lb = x, ub = y)

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

Что-то типа:

P_bat_discharge = m.addVars(T, vtype = gp.GRB.SEMICONT, name="P_bat_discharge", lb = x[t] for t in range (T), ub = y[t] for t in range (T))


person KVA    schedule 23.05.2019    source источник
comment
Я не эксперт в синтаксисе Гуроби, но не могли бы вы просто построить ограничения в цикле по t, указав правильные границы для каждого t?   -  person LarrySnyder610    schedule 23.05.2019


Ответы (1)


Вы можете передать список значений атрибутов lb и ub при создании переменных. Вот простой пример, который пытается зафиксировать то, чего вы хотите достичь:

import gurobipy as gp
T = 3
lbdata = [1,2,3]
ubdata = [4,5,6]

m = gp.Model()
m.addVars(3, vtype=gp.GRB.SEMICONT, lb=lbdata[0:T], ub=ubdata[0:T])
m.write('a.lp')

На моей машине это генерирует LP

Minimize
  0 C0 + 0 C1 + 0 C2
Subject To
Bounds
 1 <= C0 <= 4
 2 <= C1 <= 5
 3 <= C2 <= 6
Semi-continuous
 C0 C1 C2
End
person Robert    schedule 24.05.2019