Я новичок в 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
У меня есть несколько вопросов:
Я получаю результат -1277, который является противоположным числом суммы цены за 24 часа. Что-то не так с оптимизирующим кодом, но я не могу его найти.
Как сохранить двоичные файлы заряда и разряда во входном файле данных?
Стоит ли повторять модель оптимизации в течение 365 дней для круглогодичных данных?
Спасибо.
---------- ----------- Редактировать 2/19 -------------------------
Вот некоторые примеры данных Я запускаю код на:
Или, на самом деле, 24 случайных числа также будут работать, но это фактические цены, которые я использовал.
У меня целый год данные и как только я выясню, как оптимизировать в течение дня, должен ли я выполнить итерацию в течение 366 дней?
образец данных