虚拟电厂运行机制

虚拟电厂(VPP)对电力资源的调节是其最核心、最精妙的功能。它本质上扮演着一个“全能电力调度员”的角色,但其调度对象不再是几个大电厂,而是成千上万个分散的、类型各异的分布式资源。

1. 察:全面感知与实时监测

这是调节的基础。虚拟电厂通过安装在各类终端资源上的智能电表、传感器和控制终端,实时收集数据:

  • 发电侧:分布式光伏、风电的实时发电功率和预测。

  • 负荷侧:楼宇空调、工厂生产线、电动汽车充电桩的用电功率和可调节潜力(如空调能调高几度而不影响舒适度)。

  • 储能侧:储能系统的当前荷电状态(SOC)、最大充放电功率。

所有这些数据通过物联网技术汇聚到虚拟电厂的“大脑”——云控平台,形成一个完整的、实时的系统运行状态图。

2. 算:智能决策与优化计算

这是虚拟电厂的“大脑”工作环节。平台基于收到的数据和外部的电网需求指令或电力市场价格信号,进行高速优化计算。

  • 目标:在满足所有约束条件(如用户舒适度、生产过程连续性、储能安全)的前提下,以最低成本或最大收益完成电网的调节需求(如降低1000千瓦负荷)。

  • 算法:采用复杂的优化算法和人工智能模型,决定“让谁调节、调节多少、何时调节”。例如,是让A工厂的空调调节,还是启动B储能电站放电,或是降低C充电桩的功率,抑或是三者组合。

3. 控:精准执行与协调控制

计算得出最优策略后,虚拟电厂平台通过通信网络向各个终端资源下发控制指令。

  • 负荷侧调节(需求响应):这是最常用的手段。

    • 削峰:在用电高峰时段,远程降低商业综合体的空调功率、调节冷冻库的制冷温度、暂停非紧急的工业生产线(如抛光、清洗工序)。

    • 填谷:在用电低谷时段,启动电动汽车充电桩、鼓励工厂在夜间生产。

  • 储能侧调节:

    • 放电:在用电高峰时放电,相当于一个“电源”。

    • 充电:在用电低谷时充电,相当于一个“负荷”,吸收多余的电能(特别是风光发电多时)。

  • 发电侧调节:

    • 如果有自备的分布式燃气轮机等可控电源,可以指令其增加或减少发电出力。

所有这些控制可以是自动化的、毫秒级响应的,无需人工干预。

4. 评:效果验证与收益结算

调节指令发出后,平台会持续监测实际执行效果,验证是否达到了预期的调节目标(如确实减少了1000千瓦需求)。

  • 性能评估:评估每个资源的响应速度、调节精度和可靠性,为未来的优化调度提供数据支持。

  • 经济结算:根据每个资源实际提供的调节服务量,按照事先约定的价格进行收益结算,将钱分给参与的用户。这是激励用户持续参与的关键。

 

网约车平台

你可以把虚拟电厂理解成一个 “电力版的网约车平台”:

  • 分布式资源(空调、储能、电动汽车)就像是路上行驶的私家车。

  • 电网(需要调节电力)就像是需要打车出行的乘客。

  • 虚拟电厂平台就像是网约车平台(如滴滴)。

    • “察”:平台知道所有车辆的位置、状态和空座率(实时监测)。

    • “算”:平台收到乘客的订单后,通过算法计算出由哪位司机来接单最合适、路线最优(智能决策)。

    • “控”:平台将订单发送给指定的司机(下发指令)。

    • “评”:行程结束后,平台从乘客那里收取车费,并按比例分给司机(验证结算)。

虚拟电厂就是这样,将海量、分散的电力资源高效地组织起来,去完成“乘客”(电网)的出行(调峰、调频)需求。

 

实际应用场景举例

场景:夏季用电晚高峰,电网压力巨大,急需降低某区域的用电负荷。

  1. 电网发出需求:向虚拟电厂平台发布指令:“请在30分钟内,降低1000千瓦负荷,持续2小时。”

  2. 平台快速计算:虚拟电厂平台立刻分析旗下所有资源的状态:

    • 商业综合体A:空调可调节,预计可降负荷300kW。

    • 工厂B:有一条非紧急生产线可暂停,预计可降负荷400kW。

    • 储能站C:当前电量80%,可放电300kW。

    • 电动汽车充电站D:可将10个快充桩功率暂时降低,预计可降负荷200kW。

    • 优化决策:选择调用A、B、D的资源(共900kW)和C放电100kW,组合完成目标。这样对用户影响最小,且成本最优。

  3. 下发指令执行:

    • 向综合体A发送指令,将其空调主机功率自动下调。

    • 向工厂B发送指令,暂停指定生产线。

    • 向充电站D发送指令,将10个充电桩功率从60kW暂时降至40kW。

    • 向储能站C发送指令,以100kW功率放电。

  4. 验证与结算:

    • 平台确认总负荷降低了1000kW,响应了电网需求。

    • 事后,平台根据A、B、C、D各自贡献的调节量,向他们支付报酬。

 

1. 电网降负荷需求

这个价格不是固定的,它由市场决定,波动很大。其定价机制主要分为两种:由政府制定的补偿价格 和 由市场竞争形成的价格。

a) 政府制定的补偿价格(主要用于“需求响应”)

在许多虚拟电厂项目的初期,为了鼓励用户参与,政府或电网公司会出台明确的补偿价格标准。通常有两种模式:

  • 固定补贴价格:例如,深圳市曾规定,对参与虚拟电厂需求响应的用户,每响应1千瓦负荷,补偿10元/小时(注意单位是“元/千瓦”,而非“元/度”)。这意味着,如果一个工厂响应了100千瓦的负荷,持续2小时,它将获得 10元/千瓦 * 100千瓦 * 2小时 = 2000元 的补偿。

  • 电费折扣/激励:另一种形式是,参与用户可以在电费账单上获得直接折扣,例如每度电便宜0.1元,而不是直接获得响应补偿。

特点:价格稳定、透明,旨在培育市场,但可能无法完全反映资源的真实市场价值。

b) 市场竞争形成的价格(主要用于“辅助服务市场”)

这是更成熟和高阶的模式。虚拟电厂作为一个整体,像传统电厂一样,参与电力现货市场或辅助服务市场(如调峰市场)进行竞价。

  • 价格由供需决定:

    • 在电力极度紧张时(例如,夏季用电晚高峰,所有机组都满发仍不够用),为了“削峰”,电网愿意支付高昂的价格来购买负荷削减能力。此时的边际出清价格可能会非常高,可能达到3-4元/度电甚至更高。

    • 在电力供应宽松时(例如,春季凌晨,风电光伏大发而用电需求低),为了“填谷”,激励用户多用电的价格就会很低,可能只有0.1-0.2元/度电。

  • 报价模式:虚拟电厂运营商会根据其聚合资源的成本(如给用户的补偿价、自身运营成本)和预期利润,向电力交易中心申报一个价格。交易中心按“价格优先”的原则排序,从低到高调用资源,最后一个被调用的资源的报价,就是市场的统一出清价格。

特点:价格波动大,能真实反映电力商品的时空价值,对虚拟电厂的运营策略和预测能力要求极高,但收益潜力也更大。


2. 支付的主体是哪些?

资金的最终来源是电力用户,但支付的主体(即“谁直接掏钱”)根据不同情况有所不同。

  1. 电网公司:

    • 这是目前最主要的支付主体。当电网公司以“需求响应”项目的形式组织虚拟电厂进行削峰填谷时,它会直接向虚拟电厂运营商支付费用。这笔钱通常来源于电网公司的运营成本,或通过输配电价进行疏导。

  2. 电力市场/交易中心:

    • 在已经开放电力辅助服务市场的地区(如广东、山西、山东等),虚拟电厂作为独立市场主体参与竞价。一旦中标并提供服务,电力交易中心会根据市场出清价格,从所有市场成员(主要是发电厂和电力用户)缴纳的相关费用中,向虚拟电厂支付报酬。

  3. 售电公司/大型电力用户:

    • 一些售电公司为了平衡其购售电偏差(避免罚款),会愿意向虚拟电厂购买调峰服务。

    • 一些执行“峰谷电价”且价差很大的大型企业,如果自身调节能力不足,也可能向虚拟电厂购买服务,以降低其高峰电费支出。

 

虚拟电厂在“填谷”中的具体操作

“填谷”就是在低谷电价时段,引导商户多用电,把电网的负荷“山谷”填高一些。虚拟电厂主要通过以下两种方式实现:

  1. 调整用电时间(负荷转移):

    • 将一些原本要在高峰时段运行的生产或活动,推迟或提前到低谷时段进行。

    • 典型案例:

      • 电动汽车充电站:虚拟电厂引导或直接控制充电桩,在夜间低谷电价时段为车辆集中充电,而不是在白天高峰时段充电。

      • 冰蓄冷空调:在夜间低谷时段,开动制冷机制冰,将“冷量”储存起来;在白天高峰时段,停止制冷机,直接用夜间储存的冰来供冷。

      • 柔性生产制造:将一些高耗能、非连续的生产工序(如电解、电加热、粉碎等)安排在夜间进行。

  2. 增加用电量(负荷增加):

    • 在低谷时段进行一些额外的用电操作,进一步消耗电网富余的电能(特别是风电、光伏大发时)。

    • 典型案例:

      • 储能电站(充电):虚拟电厂指令其聚合的分布式储能系统,在低谷电价时段从电网充电,吸收电能。

      • 调节游泳池/水箱加热:在夜间低谷时段将水加热到比日常所需更高的温度,以备白天使用,减少白天的加热需求。


收益如何产生?—— 三方共赢的链条

假设低谷电价 0.3元/度,平段电价 0.7元/度。

1. 对于商户(如充电站、工厂)来说:收益来自于 “节省电费”

  • ** before (参与前) **:
    一个充电站白天(平段)为100辆车充电,总用电10000度。
    电费成本:10000度 × 0.7元/度 = 7000元。

  • ** after (参与虚拟电厂后) **:
    虚拟电厂引导该充电站改为夜间(低谷)充电。
    电费成本:10000度 × 0.3元/度 = 3000元。

  • 商户的收益:
    节省的电费 = 7000元 - 3000元 = 4000元。
    对于商户来说,这节省的4000元就是它的“收益”。它不需要直接收到现金,而是体现在显著降低的电费账单上。

2. 对于虚拟电厂运营商来说:收益来自于 “服务分成”

虚拟电厂运营商通过其技术平台和调度策略,帮助商户实现了电费节省。因此,它会与商户共享这部分节省的收益。

  • 运营商与商户事先签订协议,约定分成比例(例如 5 : 5 或 3 : 7,通常商户拿大头)。

  • 在上面的例子中,总共节省了4000元。

    • 如果按5:5分成:

      • 商户额外多得:2000元(相当于电费成本再降2000元)

      • 运营商收益:2000元(这是它的服务费收入)

    • 如果按3:7分成(运营商3,商户7):

      • 商户额外多得:2800元

      • 运营商收益:1200元

3. 对于电网公司来说:收益来自于 “系统优化”

    • 削峰填谷,平衡了电网负荷,提高了电网运行的安全性和稳定性。

    • 促进了新能源消纳(夜间风电多发,正好被用于填谷)。

    • 避免了为了满足短暂高峰而投资建设新的发电厂和输配电设施,节约了巨大的社会公共成本。

 

光伏发电预测:

以日光伏发电量为预测目标,和风天气 API (拿到过去1年的历史天气数据),通常能拿到这些关键特征:

1. 气象特征(最核心)

  • 日照时数(sunshine hours)
  • 总辐射 / 太阳辐射强度(solar radiation)
  • 平均温度、最高温、最低温
  • 湿度(相对湿度)
  • 风速、风向
  • 降水量、降水概率
  • 云量 / 云覆盖率
  • 气压

2. 时间特征(必须加)

  • 年、月、日
  • 季节(春 / 夏 / 秋 / 冬)
  • 星期几
  • 昼长、日出日落时间
  • 历史同期发电量(滞后特征)

3. 可构造的衍生特征

  • 温度 × 辐射 交互项
  • 湿度 × 辐射 交互项
  • 历史 N 天平均发电量
  • 历史同期均值 / 方差

总共构造17个特征,从和风天气拉取:日辐射、日照、温度、湿度、云量、降水,拼接历史发电数据,构造时间特征 + 滞后特征。

数据来源:和风天气接口,包括:温度、天气状况、风力、风速、风向、相对湿度、大气压强、降水概率、露点温度、云量。

  • hourly.fxTime 预报时间
  • hourly.temp 温度,默认单位:摄氏度
  • hourly.icon 天气状况的图标代码,另请参考天气图标项目
  • hourly.text 天气状况的文字描述,包括阴晴雨雪等天气状态的描述
  • hourly.wind360 风向360角度
  • hourly.windDir 风向
  • hourly.windScale 风力等级
  • hourly.windSpeed 风速,公里/小时
  • hourly.humidity 相对湿度,百分比数值
  • hourly.precip 当前小时累计降水量,默认单位:毫米
  • hourly.pop 逐小时预报降水概率,百分比数值,可能为空
  • hourly.pressure 大气压强,默认单位:百帕
  • hourly.cloud 云量,百分比数值。可能为空
  • hourly.dew 露点温度。可能为空
    {
      "fxTime": "2021-02-16T17:00+08:00",
      "temp": "0",
      "icon": "100",
      "text": "",
      "wind360": "341",
      "windDir": "西北风",
      "windScale": "4-5",
      "windSpeed": "25",
      "humidity": "11",
      "pop": "0",
      "precip": "0.0",
      "pressure": "1026",
      "cloud": "0",
      "dew": "-26"
    }
import pandas as pd
import numpy as np
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler

# ===================== 1. 数据准备(模拟和风天气数据 + 光伏数据) =====================
# 实际使用时替换为:从和风天气API拉取数据后整理成DataFrame
# 特征列对应和风天气可获取的核心特征,目标列为日光伏发电量(kW·h)
data = pd.DataFrame({
    # 气象特征(和风天气API可获取)
    '日照时数': [6.2, 7.5, 5.8, 8.1, 4.9, 7.8, 6.5, 8.3, 5.2, 7.1, 6.8, 7.9],
    '太阳总辐射': [4.2, 5.1, 3.8, 5.5, 3.2, 4.9, 4.0, 5.3, 3.5, 4.7, 4.4, 5.0],
    '平均温度': [25, 28, 24, 30, 22, 29, 26, 31, 23, 27, 26, 30],
    '相对湿度': [65, 58, 70, 55, 75, 60, 68, 52, 72, 62, 66, 54],
    '风速': [2.1, 1.8, 2.5, 1.5, 3.0, 1.9, 2.2, 1.4, 2.8, 2.0, 2.3, 1.6],
    '云量': [20, 10, 30, 5, 40, 15, 25, 8, 35, 18, 22, 10],
    '降水量': [0, 0, 0.5, 0, 2.0, 0, 0, 0, 1.0, 0, 0, 0],
    # 时间特征(构造)
    '月份': [6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7],
    '昼长': [14.2, 14.5, 14.1, 14.6, 13.9, 14.7, 14.4, 14.8, 14.0, 14.6, 14.5, 14.7],
    # 目标列:日光伏发电量(kW·h)
    '日发电量': [850, 980, 780, 1020, 650, 950, 820, 1050, 700, 920, 880, 1000]
})

# ===================== 2. 数据预处理 =====================
# 分离特征(X)和目标(y)
features = ['日照时数', '太阳总辐射', '平均温度', '相对湿度', '风速', '云量', '降水量', '月份', '昼长']
X = data[features]
y = data['日发电量']

# 划分训练集/测试集(7:3)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 特征标准化(可选,但能提升XGBoost稳定性)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 转换为XGBoost专用DMatrix格式(提升训练效率)
dtrain = xgb.DMatrix(X_train_scaled, label=y_train)
dtest = xgb.DMatrix(X_test_scaled, label=y_test)

# ===================== 3. XGBoost模型参数设置 =====================
# 核心参数(针对日级光伏预测调优)
params = {
    'objective': 'reg:squarederror',  # 回归任务(平方误差损失)
    'max_depth': 5,                   # 树最大深度(避免过拟合)
    'learning_rate': 0.1,             # 学习率
    'n_estimators': 100,              # 树的数量
    'subsample': 0.8,                 # 采样比例(防止过拟合)
    'colsample_bytree': 0.8,          # 特征采样比例
    'random_state': 42,
    'eval_metric': 'rmse'             # 训练时评估指标
}

# ===================== 4. 模型训练 =====================
# 训练模型
model = xgb.train(
    params,
    dtrain,
    num_boost_round=100,
    evals=[(dtest, 'test')],  # 训练过程中验证测试集
    early_stopping_rounds=10, # 早停(防止过拟合)
    verbose_eval=10           # 每10轮打印一次评估结果
)

# ===================== 5. 模型预测 & MSE评估 =====================
# 预测测试集
y_pred = model.predict(dtest)

# 计算MSE(均方误差)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)  # 均方根误差(更直观,同发电量单位)

# 输出评估结果
print(f"\n测试集MSE(均方误差): {mse:.2f}")
print(f"测试集RMSE(均方根误差): {rmse:.2f} kW·h")

# 打印真实值 vs 预测值对比
result = pd.DataFrame({
    '真实发电量': y_test.values,
    '预测发电量': y_pred.round(2)
})
print("\n真实值 vs 预测值:")
print(result)

# ===================== 6. 特征重要性分析(关键!) =====================
# 查看哪些特征对光伏预测最关键(和风天气数据中辐射/日照通常排前)
importance = pd.DataFrame({
    '特征': features,
    '重要性': model.get_score(importance_type='weight')  # weight:特征被使用的次数
}).sort_values(by='重要性', ascending=False)
print("\n特征重要性排名:")
print(importance)

 

posted @ 2025-09-15 09:40  wangssd  阅读(243)  评论(0)    收藏  举报