Гуроби с ошибкой значения ключа словаря Python

Я использую 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.

Мы очень ценим любую помощь, которую вы можете оказать.


person ikonikon    schedule 16.11.2016    source источник


Ответы (1)


Хорошо, оказывается, я был сбит с толку с нулевой индексацией Python; Я определил набор T как диапазон от 1 до 17520, но впоследствии я определяю ограничения для переменных, проиндексированных в 0.

Моя проблема была решена путем определения набора T как

    T = range(0,17519)
person ikonikon    schedule 16.11.2016