Пьомо: изо всех сил пытается заставить работать - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь смоделировать расписание движения автомобиля Electri c, чтобы минимизировать счет за электричество. Конечно, электромобиль сможет заряжаться только каждый раз, когда он подключен к зарядной станции (т. Е. Он не может заряжаться во время движения автомобиля). По сути, это стационарный аккумулятор, который можно отсоединить и снова подключить.

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

В наборе данных, который я использую, автомобиль подключается в определенные периоды времени, и я использую такой словарь availDict = dict(enumerate(df[avail])), который содержит значения 1 = plugged и 0 = not plugged в разное время суток. Например, если предположить, что когда автомобиль подключен к сети, когда он не движется, то с 7:00 до 9:00 не подключен, когда автомобиль движется, с 9:00 до 18:00 подключается, поскольку транспортное средство не движется, с 18:00 до 20:00 не подключается, поскольку автомобиль находится за рулем, и с 20:00 до 7:00 он подключен, поскольку автомобиль не движется.

На данный момент я попытался смоделировать ограничение как логическое значение, например: думал использовать BigM, чтобы заставить модель ограничивать зарядку автомобиля в это время, но мне трудно это настроить.

Для дальнейшего объяснения, это уравнения, которые я пытаюсь модель, которую я нашел в статье:

SOCmin(t) <= SOC(t) <= SOCmax(t)

if avail = 0 (not plugged)

SOCmin(t) = SOCmax(t) = 0

if avail = 1 (plugged) but idle

SOCmin(t) = 0 and SOCmax(t) = SOC

if avail = 1 (plugged) and needed by time (t)

SOCmin(t) = SOCmax(t) = SOC

Я надеюсь, что я правильно объяснил свою проблему, и, надеюсь, вы сможете понять, что я имел в виду.

Если есть другое предложение или вам нужна дополнительная информация, дайте мне знать, и я предоставлю ее как можно скорее.

1 Ответ

0 голосов
/ 16 июня 2020

Привет, DVRJ и добро пожаловать в stackoverflow,

Это больше вопрос математической формулировки проблемы, а не проблемы Python / Pyomo, но я думаю, что могу помочь.

Во-первых, термины avail_bool и not_avail_bool не обязательно должны быть переменными, так как вы ничего не решаете относительно них. Вместо этого они могут быть параметрами, которые в основном определяют, может ли электромобиль заряжаться / разряжаться с заданным c временным шагом model.Time или нет.

Таким образом, я бы определил один логический параметр avail_bool, что равно 1, когда электромобиль подключен, и 0, когда он не подключен. Для этого вы можете прочитать значения через словарь availDict, который у вас уже есть.

Затем, если мы вызовем переменную начисления Qch, вам потребуются два ограничения, которые говорят:

Qch <= BigM * avail_bool
Qch >= 0

Это означает, что если avail_bool равно 0, то член Qch будет равен 0, что означает, что аккумулятор EV не может быть заряжен. Когда avail_bool равно 1, тогда Qch примет значение, продиктованное задачей оптимизации.

Вам также понадобятся аналогичные термины для переменной разрядки аккумулятора.

Надеюсь, это полезно!

...