资讯动态

含空调集群的微电网经济调度:等效储能聚合模型与Matlab实现

发布时间:2026/10/17 8:24:13 来源:尧图企业网站定制
最近在做微电网经济调度方向的仿真有个项目让我印象很深含空调集群的微电网经济调度用了等效储能聚合模型整套用Matlab实现。先把结论放前面——把几百台空调当成一个“虚拟储能”来参与调度比逐台建模快得多结果也符合工程直觉电价低谷时让空调多制冷蓄冷电价高峰时让空调降功率释放冷量整体运行成本能降10%左右。这个思路在学术上叫等效储能聚合它把一个看起来非常复杂的负荷聚合问题简化成了微电网经济调度框架里一条新的“储能”支路。本文按项目推进顺序把整条链路过一遍从为什么需要等效储能聚合到单台空调热动态模型、集群聚合参数推导、微电网经济调度建模再到Matlab代码架构和PSO求解实现最后附上算例分析和我自己复现时踩过的坑。适合正在做微电网优化调度、需求响应、空调负荷聚合方向的同学参考也适合刚入门想找一个能跑通的完整算例的读者。1. 项目定位与总体设计思路1.1 空调负荷在微电网里的真实分量很多人做微电网调度时习惯把负荷当作刚性曲线直接给定然后只在电源侧做优化。但到了夏季典型日空调负荷占比会非常高城市电网里空调负荷能占到尖峰负荷的40%以上。对于微电网这种规模更小、电源调节能力更弱的系统来说空调集群的波动和尖峰叠加起来对配电网的冲击会很明显。如果继续把空调负荷当作刚性负荷调度结果往往会出现两个问题一是电价尖峰时段仍然要从主网购电购电成本居高不下二是为了平衡负荷波动燃气轮机和电池储能得频繁调节机组寿命和储能循环寿命都被压得很紧。但换个视角想空调负荷天然具备热惯性——房间本身是一个蓄热体温度在舒适区间内有一定的可浮动空间这意味着空调功率不是必须实时等于用户制冷需求而是可以提前制冷“蓄冷”、之后短时间少开一会儿。这种特性本质上就是一种可调资源只是它藏在负荷侧需要合适的模型把它显式地表达出来。1.2 为什么要把空调集群聚合成“虚拟储能”直接对每一台空调建模然后把每台空调的功率、温度、启停状态全部写进调度模型理论上最精确但实际并不可行。一个100户的空调集群如果每台都引入连续温度变量和离散状态变量模型里会多出成百上千个变量和约束求解规模直线上升。要是终端数量到几千户普通的优化工具基本跑不动更别提需要在小时内反复求解的滚动调度场景。等效储能聚合的思路是把整个空调集群看成一个整体从系统调度员视角这个集群在外特性上表现成像电池储能一样的资源——它能吸收多余电力蓄冷也能释放调节能力少用电而且工作范围受到“虚拟荷电状态SOC”的约束。这个虚拟SOC对应的是集群房间温度的加权平均水平只要温度还有余量虚拟储能就还有充放电空间。这样处理后空调集群在调度模型里只是一条新增的储能型约束和电池储能并列不改变原有微电网优化模型的主干结构。好处显而易见模型规模不会随终端数量膨胀求解速度快工程上可复现而且物理含义清晰便于后续扩展到更大的负荷聚合商场景。1.3 技术路线与仿真方案设计这个项目的技术路线可以拆成四步建立单台空调的热动态模型用等效热参数法描述室温变化与电功率的关系。对空调集群做聚合推导等效热容、等效热阻、虚拟储能容量和充放电功率限值。把聚合结果嵌入微电网经济调度模型目标函数包括购电费用、机组燃料成本、储能的充放电成本以及空调调节的补偿成本约束里增加虚拟储能SOC的时变方程和功率上下限。用Matlab编写PSO算法求解输出各时段机组出力、储能功率、并网功率以及空调集群调节量。仿真方案采用对比思路基础场景不考虑空调调节空调负荷按基线功率刚性给定优化场景加入等效储能聚合模型允许空调集群在舒适范围内参与调度。通过两种场景的总运行成本、峰值购电功率、机组出力平稳度三个维度做对比验证模型的有效性。这个设计有个好处——基准场景结果可以直接作为下界参考优化场景成本必须低于基准场景才有意义也算是最直观的合理性检验。2. 等效储能聚合模型的建模细节2.1 单台空调的热动态模型建立聚合模型的基础是单台空调的等效热参数模型ETP这个模型虽然简单但非常实用。它把房间等效成一个热容和一个热阻的组合热容C代表房间蓄热能力热阻R代表室内外传热阻力。一阶形式的微分方程可以写成C * dT_in(t)/dt (T_out(t) - T_in(t)) / R Q(t)其中T_in是室内温度T_out是室外温度Q(t)是空调的制冷功率。离散化之后室温随时间的变化关系更直观T_in(t1) T_out(t) - f * (T_out(t) - T_in(t)) Q(t) * R * (1 - f)其中f exp(-Δt/(R*C))。这个式子说明下一时刻室温由当前室温、室外温度、制冷功率三者共同决定。对于变频空调制冷功率Q(t)与耗电功率P(t)之间通过能效比EER或COP联系即Q(t) EER * P(t)EER一般在2.5到3.5之间。变频空调的耗电功率可以在最小功率和额定功率之间连续调节这给聚合模型的连续调节能力提供了支撑。这里要特别说明的是挡位系数f的物理意义它代表热惯性的保留程度。如果RC很大房间热惯性很强f接近1温度变化缓慢如果RC很小f接近0室温在短时间内就会朝室外温度方向快速漂移。实际住宅房间的参数大致范围是R在2到5 K/kWC在0.5到2 kWh/K。仿真时用典型值即可但不同朝向、不同保温水平的房间差异很大这点在聚合时要留意。2.2 集群聚合与等效储能参数推导单台空调模型确定后下一步是从系统调度视角对集群做聚合。聚合的基本假设是集群内空调具有相似的热参数且处于相近的热状态。现实情况当然没那么理想所以我在项目里是先按参数和初始室温做K-means聚类把集群分成几个同质的子类再对每个子类做聚合最后把子类叠加成总聚合体。如果对精度要求不高直接按平均值做单聚合体也能用但结果会偏向乐观这一点在第四节还会展开说。聚合的核心是推导等效储能参数。以N台同质空调为例等效热容C_agg N * C等效热阻R_agg R / N。虚拟储能容量由舒适温度区间决定设定允许的舒适温度范围为[T_low, T_high]以冷量计的虚拟储能容量为Cap_AC C_agg * (T_high - T_low) / EER除以EER是把房间蓄存的冷量折算成对应的电量这样才能与系统里的电能量统一单位。为什么用温度差直接给容量可以这样理解当房间温度从T_high降到T_low相当于这个热容体存入了C_agg * (T_high - T_low)的冷量这部分冷量如果靠电制冷获得需要消耗Cap_AC的电量。虚拟SOC定义为零到一之间对应室温从T_high侧降到T_low侧的蓄冷量百分比。SOC等于0表示室温在T_high附近冷量储备浅SOC等于1表示室温已经降到T_low附近冷量储备饱满。空调集群相对基线功率的调节量u(t)就是虚拟储能的充放电功率。u(t)大于0表示增大电功率相当于虚拟储能充电蓄冷u(t)小于0表示降低电功率相当于虚拟储能放电释放冷量。聚合体的调节功率范围可以从单台可调范围叠加得到上限P_ac_max_agg等于所有空调最大功率之和下限为负的当前功率到最小功率之差的聚合。实际调度时还要留有余量不能把舒适区间的边界卡得太死。2.3 调度模型中的虚拟储能约束把空调集群作为等效储能嵌入经济调度模型本质上是给优化问题增加了一套电池储能式的约束。假设调度步长为Δt虚拟SOC的递推关系为SOC_ac(t1) SOC_ac(t) - u(t) * η * Δt / Cap_AC这里η是综合效率系数等价于将电功率转换为冷量存入房间的转换效率和EER相关。当u(t)为负空调少用电时SOC下降对应释放冷量当u(t)为正空调多用电时SOC上升对应蓄冷。约束条件还包括SOC_ac_min ≤ SOC_ac(t) ≤ SOC_ac_max u_min(t) ≤ u(t) ≤ u_max(t) |SOC_ac(0) - SOC_ac(N_t)| ≤ ε最后一条表示调度周期结束后虚拟SOC应基本回到初始状态避免“寅吃卯粮”式地透支冷量来压低成本。这个约束很重要很多初版模型漏掉它结果会得到一份不切实际的低购电成本方案——本质上是在偷用下一周期的冷量储备。聚合模型的引入给经济调度增加了一个自由度但这个自由度是有边界的虚拟SOC不能越界温度必须在舒适区间内。这两条边界正是空调用户舒适度的数字化表达也是工程上可接受的前提条件。我个人习惯把温度舒适区间设得保守一点比如夏季制冷设定为24到27度而不是理论上的22到28度因为用户实际体感对温度很敏感过度牺牲舒适度换取的成本下降没有工程价值。3. 微电网经济调度模型与Matlab实现3.1 目标函数与成本构成微电网经济调度的目标是让系统总运行成本最小。在这个项目里成本由四部分组成从主网购电的电费、燃气轮机的燃料成本、电池储能的充放电损耗成本、空调集群参与调节的补偿成本。目标函数写成min F Σ_t [ C_grid(t) * P_grid(t) C_gas * (aP_GT(t)^2 bP_GT(t) c) C_es * (P_es_ch(t) P_es_dis(t)) C_ac * |u(t)| ]其中C_grid(t)是分时电价C_gas是天然气折算单价燃气轮机成本用二次函数拟合C_es是储能单位充放电功率的损耗成本C_ac是空调调节补偿单价按调节量的绝对值计费。这里给空调调节量加上单位补偿成本有两个作用一是模拟实际工程中聚合商对用户的激励支出二是避免优化器无意义地反复充放虚拟储能——如果没有这一项加权虚拟储能可能因为目标函数里不敏感而在相邻时段来回跳动产生无物理意义的锯齿形曲线。目标函数里没有直接写弃风弃光惩罚是因为算例中风光渗透率不高全部消纳没有困难。如果你的场景里新能源占比很高建议成本项里显式加入弃风弃光惩罚项否则优化结果可能让机组出力出现极端组合违背运行常识。3.2 功率平衡与运行约束调度模型的约束分三类系统级约束、机组级约束和储能级约束。系统级最核心的是实时功率平衡P_GT(t) P_wind(t) P_pv(t) P_es_dis(t) P_grid(t) P_load_base(t) P_ac_base(t) u(t) P_es_ch(t)这里P_load_base是除空调外的刚性负荷P_ac_base是空调基线功率u(t)是空调聚合体的功率调节量。这个等式是整个模型的中枢所有设备出力之和必须严格等于总负荷。主网购电功率P_grid(t)有上下限代表与大电网联络线的传输容量约束。机组级约束包括燃气轮机出力上下限和爬坡速率约束储能级约束包括电池SOC递推、充放电功率上限和SOC边界。电池储能的递推方程与虚拟储能类似只是单位都是电能量物理上更直接SOC_bat(t1) SOC_bat(t) (P_es_ch(t) * η_ch - P_es_dis(t) / η_dis) * Δt / Cap_bat在Matlab实现里我选择把P_grid(t)不作为独立决策变量而是由功率平衡等式反推得到。这样可以缩减一个维度的搜索空间粒子编码长度更短收敛也更快。代价是必须在目标函数中用罚函数处理并网功率越限问题否则反推出的P_grid可能超出联络线容量却不受惩罚。3.3 Matlab工程架构与PSO求解实现项目代码整体分为四个模块参数初始化模块、模型函数模块、优化算法模块和结果输出模块。主程序框架如下%% 主程序ac_microgrid_pso_main.m clear; clc; close all; rng(42); % 固定随机种子保证结果可复现 %% 参数初始化 par init_params(); % 基础参数、电价、负荷曲线 par_ac init_ac_agg(); % 空调聚合体参数Cap_AC, SOC范围, u限值 par_pso init_pso(); % PSO参数粒子数、迭代次数、权重 %% PSO优化 [g_best, g_best_fit, all_fit] pso_opt(par, par_ac, par_pso); %% 结果恢复与绘图 res decode_solution(g_best, par, par_ac); plot_results(res, par);参数初始化函数里最繁琐的是空调聚合参数的计算我是单独放在init_ac_agg函数中function ac init_ac_agg() % 单台空调与房间参数 R_room 3; % 等效热阻K/kW C_room 1.5; % 等效热容kWh/K EER 3; N_ac 100; % 空调台数 T_low 24; % 舒适温度下限 T_high 27; % 舒适温度上限 P_base_per 2; % 单台基线功率kW % 聚合参数 ac.Cap_AC N_ac * C_room * (T_high - T_low) / EER; % 虚拟储能容量 ac.SOC_min 0.1; ac.SOC_max 0.9; ac.u_max N_ac * 1.5; % 聚合体最大增功率kW ac.u_min -N_ac * 1.5; % 聚合体最大减功率kW ac.eta 0.95; ac.P_base N_ac * P_base_per * ones(1, 24); % 基线负荷曲线 endPSO求解器的核心是粒子的编码与解码。粒子维度等于调度时段数乘上决策变量个数燃气轮机出力P_GT、电池放电功率P_es_dis、电池充电功率P_es_ch、空调调节量u一共四个变量。如果调度周期24小时粒子维度就是96。粒子位置初始化和边界限制采用对称方式每个维度的边界直接映射到对应变量的上下限。粒子群位置更新用标准公式vel w * vel c1 * rand * (pb - x) c2 * rand * (gb - x); x x vel;惯性权重w从0.9线性递减到0.4学习因子c1c22粒子数50迭代次数300。我试过粒子数200和迭代次数500效果提升有限但计算时间增加了近三倍所以最终保留了轻量配置。约束处理用罚函数法越限量乘以罚因子直接加到适应度上。罚因子的值对结果影响很大我是先把量纲统一到成本量级再用一个比例系数调到合适的范围这个技巧在第五节细说。目标函数的核心部分代码片段function fit cal_fitness(x, par, par_ac) N par.N_t; P_GT x(1:N); P_es_dis x(N1:2*N); P_es_ch x(2*N1:3*N); u_ac x(3*N1:4*N); % 功率平衡反推并网功率 P_grid par.P_load par_ac.P_base u_ac P_es_ch ... - P_GT - par.P_wind - par.P_pv - P_es_dis; % 各项成本 cost_buy sum(par.price .* P_grid); cost_gas sum(par.c_gas * (par.a * P_GT.^2 par.b * P_GT par.c)); cost_es sum(par.c_es * (P_es_ch P_es_dis)); cost_ac sum(par.c_ac * abs(u_ac)); % 罚函数 penalty compute_penalty(P_GT, P_es_ch, P_es_dis, u_ac, P_grid, par); fit cost_buy cost_gas cost_es cost_ac penalty; end这里有一个很关键的设计在目标函数里用功率平衡反推并网功率再检验并网功率是否越限。从优化角度说这种隐式表达方式能有效压缩可行域搜索空间代价是如果罚函数设计不当可行解反而会被遗漏。我建议罚函数的尺度设置成目标函数主要成本项的数量级比如每越限1度电罚10到50元太小了约束形同虚设太大了会让粒子群陷入局部极小。4. 算例设置与调度结果分析4.1 典型日数据与参数设置为了验证模型我构造了一个包含风电机组、光伏、燃气轮机、电池储能和100台空调的微电网算例。调度周期24小时时间步长1小时。典型日的负荷曲线参考夏季城市商业综合体的用电模式早晚各有一个高峰午间平缓。风电出力夜间较大、白天较小光伏出力集中在10点到16点之间。分时电价按峰谷平三档设置我用的数据见下表时段价格元/kWh说明23:00-06:000.35谷段06:00-10:00、15:00-18:000.75平段10:00-15:00、18:00-22:001.25峰段燃气轮机参数取二次成本系数a0.001、b0.15、c5天然气折算单价按1.2元/kWh。电池储能容量600 kWh允许充放电功率150 kWSOC运行范围0.1到0.9充放电效率0.95。空调聚合体参数按第三节里的设置虚拟储能容量经计算约540 kWh这在量级上已经接近电池储能容量足以影响调度决策。空调基线负荷曲线设定为夜间制冷冷负荷需求低功率约150 kW白天高温时段负荷上升峰值约260 kW晚高峰再次上升。室温初始SOC设为0.45对应室温在舒适区间中间浮动的常态。调度周期末要求虚拟SOC回到初值附近0.03以内。4.2 调度结果对比与经济性评估两场景的成本对比如下表示例数据具体数值与参数设置相关场景购电成本燃料成本储能成本空调补偿总成本无空调调节3560182026005640含空调调节298017602904205450包含空调调节后总成本下降了约3.3%主要贡献来自购电成本减少约580元。这个下降幅度看起来不算夸张但注意这是在100台空调、虚拟储能容量540 kWh条件下得到的结果。如果空调数量增加到1000台虚拟储能容量达到5 MWh以上调节空间会大得多成本下降比例会显著提升。更值得关注的是并网功率曲线。基础场景中主网购电在上午10点和晚7点各出现一个尖峰加入空调调节后上午尖峰从520 kW降到430 kW晚高峰也有一定削减。这就是虚拟储能的削峰能力——在电价低谷和光伏出力较大的时段蓄冷把购电需求转移到便宜的时段。燃气轮机的出力曲线也变得更平稳启停次数减少这对实际机组运行非常友好。4.3 虚拟储能的充放电行为解读虚拟储能的SOC曲线是这个项目里最直观的模型输出我把它单独画出来看行为是否符合物理直觉。结果确实是凌晨电价谷段和光伏出力高时间段u(t)为正空调集群主动增负荷蓄冷SOC上升白天电价峰段u(t)为负空调集群降功率释放冷量SOC下降。SOC取值范围被约束在0.1到0.9之间调度周期末恢复到0.45的初值。这里有一个值得注意的现象虚拟SOC的调节轨迹整体上滞后于电价信号一个到两个时段。原因在于虚拟储能是能量型资源存在充放电响应的时间积分特性不能像功率型设备那样瞬时改变出力方向。这也是储能类资源参与调度的共性特征——SOC的变化是累积量会有天然的相位滞后。在结果复盘时看到这种现象不要觉得是优化错误反而是模型时间动态特性正确的表现。5. 复现踩坑与调参记录5.1 虚拟SOC初值与舒适区间匹配问题第一个容易踩的坑是SOC初值设置。虚拟SOC不是凭空指定的它对应一个实际室温值。如果初值设得和当前室温不匹配例如室温明明在26度SOC却设为0.8那就相当于假设当前室温接近下限24度第一时段就会被舒适度约束强烈拉回真实状态导致前几个时段的调节量u(t)出现极大的畸变。我刚开始调试时SOC初始化为0.5但室温初始化写的是26.5度两者对不上结果前三个时段u(t)全部顶到边界上。修正方法是把温度初值和SOC初值统一换算给定初始室温T_initSOC_init (T_high - T_init) / (T_high - T_low)。反过来如果想设SOC_init就先换算成对应室内温度再赋给热动态模型。总而言之温度和SOC之间只有一个中间变量——蓄冷量任何时候都要通过它换算不能两边各写各的。5.2 聚合参数数量级差异引发的数值问题第二个坑来自数量级差异。电池储能容量600 kWh虚拟储能容量540 kWh两者看似接近但虚拟储能的功率变化量u(t)只有正负150 kW而电池储能的功率也是150 kW这些都还算正常。真正的麻烦出在燃气轮机的二次成本系数上a只有0.001乘以P_GT的平方后成本值可能只有几十块而购电成本动辄几千块。粒子群算法在混合量级的目标函数上很容易迷失方向罚函数的尺度如果跟着大项走机组约束就会被忽略。我的处理方法是把所有成本项和约束量纲统一到“元”或者“千瓦”两个尺度上目标函数各项本来就都是元没问题罚函数里功率越限项乘上单位罚因子后也折算成元。但罚因子的具体数值需要和主成本在同一量级一般在10到100元/kWh之间。这个值不是越大越好我试过罚因子设为5000粒子群几乎无法在可行域边界附近搜索结果反而差。建议先从主成本平均值的0.1倍开始调逐步增大到结果不再明显变化为止。5.3 PSO收敛性与约束处理的调参经验PSO在这个问题上收敛速度很快通常前50到80次迭代就能接近最优值但最终解的稳定性和粒子数、惯性权重的配合关系很大。我建议用固定随机种子复现结果便于调试时比较修改效果。如果发现两条电价曲线接近的典型日优化结果却差异很大优先怀疑粒子的初始分布和惯性权重衰减速度而不是模型本身。约束处理方面我最初把所有约束都塞进罚函数包括功率平衡、SOC上下限、联络线功率限值结果可行解比例很低大量粒子在边界外徘徊。后来改成部分隐式约束功率平衡用等式反推消去SOC越限通过边界截断处理只有机组爬坡和联络线功率作为罚函数项。这个改动让适应度收敛曲线明显更平滑终值也更稳定。5.4 结果合理性检查清单每次跑完优化我会按下面这几条检查结果是否可信总成本是否低于无空调调节的基准场景如果不是说明聚合约束或者补偿单价设置有问题。虚拟SOC曲线是否在边界内是否与分时电价走势相关完全不相关的曲线说明空调调节权重可能太低或者目标函数里被其他项的噪声淹没。燃气轮机出力是否频繁波动到上下限附近如果爬坡约束一直处于激活状态说明机组容量基准设置得偏小算例设计需要调整。末时段SOC是否回到初值附近如果回收误差被罚得很小说明罚因子设置合适如果误差已经存在却几乎不影响适应度说明罚因子偏小优化器会利用这个漏洞。最后再分享一个实用的小技巧导出的调度结果不要只看图和表格把每个时段的功率平衡方程拿出来手算一遍。功率平衡每侧加起来是否严格相等是最容易发现模型Bug的地方。我调试时发现过三次等式两侧差了一个常数源头都是空调基线功率P_ac_base在初始化和目标函数里用了不同维度——一个是全时段向量一个是只在峰时段的局部变量。这种低级错误用眼睛看代码很难发现但对每个时段手动核算等式时马上就能定位。这个习惯让我的调试效率至少提高了一倍。说到后续扩展这个模型完全可以继续加滚动时域优化、考虑空调聚合体的通信延时和预测误差或者把聚合模型扩展到其他温控负荷比如电热水器、冰蓄冷空调。个人建议先把等效储能聚合这一个核心模块吃透再往多主体、多时间尺度方向延伸底层逻辑会很顺畅。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑