Можно ли использовать метки времени в pyomo для набора индексов? - PullRequest
0 голосов
/ 24 февраля 2020

Как видно из заголовка, я пытаюсь использовать метки времени pandas или numpy для набора индексов в Pyomo, так как это очень удобно для добавления временных ограничений (например, состояния в какое-то время x может быть связан с состоянием в предыдущем часе).

У меня есть pandas временной ряд, и я создаю временной индекс с

model.time_ind = pyo.Set(initialize=pandas_timeseries.index)

Модель предназначена для electri c транспортное средство, которое необходимо заряжать в течение определенного времени и где состояние зарядки за один час связано с состоянием зарядки в предыдущем часе и скоростью зарядки в течение предыдущего часа.

model.charge = pyo.Var(model.time_ind, domain=pyo.NonNegativeReals)
model.stateOfCharge = pyo.Var(model.time_ind, domain=pyo.NonNegativeReals)

def stateOfChargeRule(model, time):         
    if time == pandas_timeseries.index[0]:  # set initial charges
        return model.stateOfCharge[time] == soc_init
    prev_hour = time - pd.Timedelta('1 hour', freq='H') # relate charging to previous hour
    return model.stateOfCharge[time] == model.stateOfCharge[prev_hour] + model.charge[prev_hour]                         


model.SOCconstraint = pyo.Constraint(model.time_ind, rule=stateOfChargeRule)

кажется, что он работает нормально, пока я только зацикливаюсь на этом индексе, но он не работает, когда я пытаюсь ввести дельту времени.

Я получаю это сообщение об ошибке:

IndexError: допустимы только целые числа, срезы (:), многоточие (...), numpy .newaxis (None) и целые или логические массивы

Так почему я могу oop над индексом, но не использовать метку времени для i ndex напрямую?

...