Могу ли я оптимизировать автономную батарею с помощью MIP и вывести схему зарядки / разрядки? - PullRequest
0 голосов
/ 18 февраля 2020

Я новичок в Python. Я использую пакет mip для оптимизации автономной батареи с учетом почасовой стоимости электроэнергии в год. Мне нужна программа, чтобы выбрать 5 часов по самой низкой цене для зарядки аккумулятора и 4 часа по самой высокой цене, чтобы разряжать его каждый день в течение года. Но сначала я опробую решатель на 24 часа.

Данные:

время, месяц, день, час, цена за электроэнергию (24 записи)

Q:

Решение для оптимальной схемы зарядки и разрядки автономной батареи

Номинальная мощность батареи: 1 МВт с возможностью хранения 4 МВтч (хранение 4 часа)

Вывод: две колонки двоичных переменных

Батареи требуется 4,7 часа для полной зарядки и разрядки в течение 4 часов

Эффективность при обратном цикле 85%, зарядка за 1 час обеспечивает разрядку 0,85 часа

Ограничения:

Состояние батареи: доступная мощность> 0 (накопительный заряд - накопительный разряд)> 0

0 <накопительный разряд <4 </p>

0 <совокупный заряд <4.7 </p>

Ниже мой код:

import numpy as np
import pandas as pd
import mip
from mip import Model, xsum, maximize, BINARY, CONTINUOUS, OptimizationStatus

# Define model and var
m = mip.Model(sense=maximize)
maxdischargepower = 4
maxchargepower = 4.7
H = 24
charge = [m.add_var(var_type = BINARY) for i in range(H)]
discharge = [m.add_var(var_type = BINARY) for i in range(H)]

batterystate = np.cumsum(charge) - np.cumsum(discharge)

# Define objective function
m.objective = xsum(discharge[i]*price[i] for i in range(H)) - xsum(charge[i]*price[i] for i in range (H))

# Constraints
m += np.cumsum(discharge) <= maxdischargepower
m += np.cumsum(charge) <= maxchargepower
m += np.cumsum(discharge) >= 0
m += batterystate >= 0 

У меня есть несколько вопросов:

  1. Я получаю результат -1277, который является противоположным числом суммы цены за 24 часа. Что-то не так с оптимизирующим кодом, но я не могу его найти.

  2. Как сохранить двоичные файлы заряда и разряда во входном файле данных?

  3. Стоит ли повторять модель оптимизации в течение 365 дней для круглогодичных данных?

Спасибо.

---------- ----------- Редактировать 2/19 -------------------------

Вот некоторые примеры данных Я запускаю код на:

Или, на самом деле, 24 случайных числа также будут работать, но это фактические цены, которые я использовал.

У меня целый год данные и как только я выясню, как оптимизировать в течение дня, должен ли я выполнить итерацию в течение 366 дней?

образец данных

1 Ответ

0 голосов
/ 18 февраля 2020

Похоже, что основная часть алгоритма состоит в том, чтобы задавать эти вопросы в начале каждого часа:

  • В какое время аккумулятор будет разряжаться?
  • Какой час между время от времени будет самый дешевый для перезарядки?
  • ЕСЛИ это текущий час, затем включите перезарядку.

Кажется, что это было бы оптимальным, если вы можете перезарядить меньше чем час. Я не понимаю числа, которые у вас есть - 4 и 4.7 - звучит так, как будто вам нужно перезаряжать почти все время.

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

Вы не можете ждать слишком долго, чтобы решить, заряжать или нет. Я предполагаю, что стоимость принятия решения по существу равна нулю. Итак, пересчитывайте каждый час (по крайней мере) и не двигайтесь вперед слишком далеко. Похоже, у вас осталось менее 5 часов до того, как аккумулятор разрядится; пытаться оптимизировать дальнейшее будущее будет бесполезно, если оно мертво.

...