Как видно из заголовка, я пытаюсь использовать метки времени 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 напрямую?