Я использую Gurobi 7 с Python 2.7 и хочу реализовать следующую задачу линейной оптимизации:
Я перевел все вышесказанное на Python и Gurobi, используя следующий код:
T = range(1,17520)
# Create variables - defined as dictionaries
p = {} # power
s = {} # SOC
b = {} # buy
for t in T:
p[t] = m.addVar(vtype = GRB.CONTINUOUS, lb = -R, ub = R, name = "power_{}".format(t))
s[t] = m.addVar(vtype = GRB.CONTINUOUS, lb = 0, ub = E, name = "SOC_{}".format(t))
b[t] = m.addVar(vtype = GRB.CONTINUOUS, lb = 0, name = "Buy_{}".format(t))
# constraints
for t in T:
m.addConstr(b[t] == demand[t] + p[t], name = "balance_{}".format(t))
if t == 0:
m.addConstr(s[t] == p[t], name = "charge_{}".format(t))
else:
m.addConstr(s[t] == s[t-1] + p[t], name = "charge_{}".format(t))
# integrate variables and constraints
m.update()
# Objective function
obj = quicksum(
b[t]*SBP[t]
for t in T
)
m.setObjective(obj,GRB.MINIMIZE)
# start optimization
m.optimize
Сообщение об ошибке, которое я получаю (показанное ниже), вероятно, связано с индексом [t-1]; однако я не понимаю, почему это не принимается компилятором. Нужно ли мне определять эти ограничения по-другому?
Я не нашел других примеров задач оптимизации гуроби, определяемых с помощью этой структуры (переменная является функцией предыдущей переменной и т. Д.), Но это очень типичная структура для задач LP.
Мы очень ценим любую помощь, которую вы можете оказать.