Разработка AI-системы управления микрогенерацией
Микрогенерация — солнечные панели, малые ветроустановки, мини-ТЭЦ на стороне потребителя. В России разрешена с 2021 года (ФЗ-471): излишки можно продавать в сеть. AI оптимизирует использование собственной генерации и управляет точкой подключения к сети.
Прогноз генерации и потребления
Задача микрогенератора:
Каждые 15 минут нужно решить: продать излишки в сеть или зарядить BESS; брать из сети или разряжать BESS. Решение зависит от прогноза:
- Следующие часы собственной генерации (солнце/ветер)
- Следующие часы потребления объекта
- Тарифная кривая (дифференцированный тариф: ночь/день/пик)
import numpy as np
import pandas as pd
from prophet import Prophet
class MicrogenerationForecaster:
"""Прогноз генерации и потребления для объекта с микрогенерацией"""
def fit_solar_model(self, historical_generation, capacity_kw):
"""Прогноз солнечной генерации через Prophet"""
df = historical_generation.reset_index()
df.columns = ['ds', 'y']
df['y'] = df['y'] / capacity_kw # нормировать на мощность → capacity factor
model = Prophet(
changepoint_prior_scale=0.05,
seasonality_mode='multiplicative',
yearly_seasonality=10,
daily_seasonality=True,
weekly_seasonality=False # солнце не зависит от дня недели
)
model.fit(df)
return model
def predict_next_day(self, solar_model, load_model, weather_forecast):
"""Объединённый прогноз на следующие 24 часа"""
future = solar_model.make_future_dataframe(periods=96, freq='15min')
# Добавить регрессор погоды
future = future.merge(weather_forecast[['ds', 'ghi', 'temperature']],
on='ds', how='left')
solar_forecast = solar_model.predict(future)
load_forecast = load_model.predict(future)
return pd.DataFrame({
'timestamp': future['ds'],
'solar_kw': solar_forecast['yhat'].clip(0) * self.capacity_kw,
'load_kw': load_forecast['yhat'].clip(0),
'net_kw': (solar_forecast['yhat'] - load_forecast['yhat']).clip(-self.max_load)
})
Оптимизация BESS (Battery Energy Storage)
Стратегия заряда/разряда:
Задача стохастической оптимизации с горизонтом 24–48 часов:
from scipy.optimize import linprog
import numpy as np
def optimize_bess_schedule(
solar_forecast, # кВт по часам
load_forecast, # кВт по часам
tariff_grid_buy, # руб/кВтч по часам (покупка из сети)
tariff_grid_sell, # руб/кВтч по часам (продажа в сеть)
bess_capacity_kwh=10,
bess_max_power_kw=5,
bess_soc_init=0.5,
bess_soc_min=0.1,
bess_soc_max=0.9,
bess_efficiency=0.9
):
"""
Оптимизация расписания BESS.
Переменные: [p_charge_t, p_discharge_t, p_grid_buy_t, p_grid_sell_t] × 24ч
"""
T = len(solar_forecast)
# Линейное программирование (LP)
# Упрощение: не учитываем бинарные ограничения одновременного заряда/разряда
# Переменные: [charge[0..T], discharge[0..T], buy[0..T], sell[0..T], soc[0..T]]
n_vars = T * 4 + T # charge, discharge, buy, sell, SoC
c = np.zeros(n_vars)
# Минимизировать затраты: стоимость покупки - доход от продажи
for t in range(T):
c[2*T + t] = tariff_grid_buy[t] # покупка — расход
c[3*T + t] = -tariff_grid_sell[t] # продажа — доход (отрицательное)
# Ограничения (упрощённо)
# SoC баланс, ограничения мощности, ограничения SoC
result = linprog(c, method='highs') # HiGHS solver
return result
Управление точкой нулевого экспорта
Zero-Export Control:
Если тариф продажи в сеть невыгоден или отсутствует — предотвратить подачу в сеть:
- Прогноз излишков → увеличить нагрузку управляемой (водонагреватель, насос, зарядка EV)
- При невозможности поглотить → снизить мощность инверторов СЭС (curtailment)
- Быстрый контроль (100ms цикл): измерение тока в точке подключения → ПИД-управление выходной мощностью инверторов
Агрегация для программ Demand Response
VPP-агрегатор:
Сотни частных микрогенераторов → агрегатор объединяет в Virtual Power Plant:
- Прогноз суммарного экспорта агрегированного ресурса
- Участие в балансирующем рынке (ФСК ЕЭС, АО «СО ЕЭС»)
- Распределение платежей между участниками по вкладу (Shapley Values)
Мониторинг и диагностика
Оценка деградации панелей:
- Мониторинг Performance Ratio (PR): ожидаемая vs. фактическая выработка
- Снижение PR на 0.5%/год — норма; >1.5%/год — деградация или загрязнение
- IV-кривая анализ: идентификация теневого затенения, обрыва диода байпаса
Срок разработки: 2–4 месяца для системы управления микрогенерацией с прогнозом, BESS-оптимизацией и Zero-Export контролем.







