
楼宇微网优化调度这个方向近两年最值得关注的一个变化就是把空调这类温控负荷从“用电负担”重新定位成“虚拟储能资源”。所谓融合需求侧虚拟储能系统的楼宇微网优化调度通俗讲就是把建筑墙体和空气的热容量当成一块可以充放电的“隐形电池”电价低的时候让空调多制冷把能量以冷量的形式存在房间里电价高的时候适当抬高温度设定把存下来的冷量用出去。整个过程不用额外装物理电池用户体感变化也不明显却能显著降低楼宇运行电费和配电容量压力。这篇文章要做的就是给出一个完整的Matlab实现方案从建模、代码到仿真对比把这条优化链路一次讲透。适合正在做微网调度、需求响应、建筑能源管理的在校学生、工程师和研究者参考。1. 楼宇微网与虚拟储能为什么要把空调负荷当成电池1.1 虚拟储能到底是什么先把这个概念掰开揉碎说清楚。虚拟储能不是一块电池也不存在一个具体的物理存储容器它指的是需求侧柔性负荷在时间维度上改变用电行为的能力。空调、电热水器、冰箱、通风系统甚至工业冷库都属于典型的可调温控负荷。这类负荷有一个共同特点它们服务的是温度而不是瞬时功率温度本身有惯性短时间内偏离设定值不会影响最终使用效果。拿空调举例子。房间就是一个巨大的蓄热体墙壁、地板、家具都在吸收和释放热量。把空调设定温度调低1℃房间多蓄了一部分冷量之后把空调功率降下来这部分冷量会慢慢释放室内温度不会立刻升高到让人不舒服的水平。这个过程其实和物理储能一模一样充能时功率上升放能时功率下降中间隔着一段时间。唯一区别是储能电池存储的是电能虚拟储能存储的是热量或者说冷量但对外表现出的功率调节能力是等价的。所以要理解虚拟储能最偷懒的办法就是把它想象成一块慢充慢放的电池。这块电池没有成本不需要维护寿命也不会衰减但它的容量和功率都被建筑热特性和用户舒适度硬性限制着。把这层关系想明白了优化调度模型就成功了一半。1.2 虚拟储能与物理储能的边界关系楼宇微网里通常已经有一组物理电池储能那么虚拟储能到底能带来什么增量我实际算下来两者的角色差异很明显。物理电池的能量密度高、响应速度快、充放电功率可以做得很大但投资成本高而且每次充放电循环都有寿命损耗最适合做小时级甚至分钟级的快速功率平衡。虚拟储能则完全不同它的容量来自整栋楼的热质量规模往往比电池大得多但充放电速度受空调压缩机功率限制时间常数动辄一两小时甚至更长适合做慢速、持续的负荷平移。我把两者放在一起做过对比区别可以这样看对比维度物理电池储能空调虚拟储能容量来源电芯额定容量建筑热容与可调温差乘积响应速度秒级到分钟级分钟级到小时级增量投资高包含电池与PCS几乎为零仅需要控制策略寿命损耗每次循环都衰减几乎无损耗调节代价主要是投资与循环损耗主要是用户舒适度偏差适用时间尺度短时快速调节中长期负荷转移所以最合理的做法不是让虚拟储能替代物理电池而是让两者互补。电池在峰时短时出力虚拟储能则在整个峰时段持续减少空调电耗两者叠加才能把购电曲线压得更平。一个优秀的楼宇微网调度策略本质上就是把这些不同特性的调节资源在时间轴上排好队。1.3 这个优化问题的本质落到数学层面这是一个典型的多时段、含状态变量的优化调度问题。需要回答的问题只有一个未来24小时或者更短时间窗内每一时段楼宇应该从电网买多少电、电池该充还是该放、空调该多制冷还是少制冷才能让总成本最低。这个问题比传统微网调度麻烦的地方在于空调负荷不是一个简单的功率上下限约束它连着一条室内温度动态方程。温度是跨时段耦合的上一时段空调多制冷这一时段即使空调停机房间仍然能维持低温。也就是说虚拟储能的“荷电状态”是由室温决定的而室温本身又取决于建筑热参数、室外气温、空调功率和内热扰动的完整链条。优化器要同时处理电池SOC的递推方程、空调热动态方程、功率平衡方程以及一大堆上下限约束。我自己的体会是只要把空调热动态方程和电池SOC方程写成同样的递推形式整个模型就能很自然地嵌进标准优化框架用线性规划或者混合整数线性规划求解。Matlab搭配优化建模工具箱是这个流程里面非常好用的组合这也是本文选择Matlab实现的核心原因。2. 优化调度模型的建模过程2.1 楼宇微网的基本组成建模之前先搭物理框架。这里讨论的典型楼宇微网可以理解成某栋商业办公楼或者小型综合能源建筑包含五个核心部分。第一是基础负荷包括照明、插座、电梯、办公设备等刚性用电这部分不可调度只能作为已知曲线输入。第二是空调系统这是虚拟储能的载体也是整个调度的核心对象。第三是屋顶光伏受天气影响属于不可完全控制的分布式电源但预测精度可以做到一个可接受的范围。第四是电池储能系统提供快速调节能力。第五是电网联络线楼宇通过它和外部电网交换功率电价按分时电价计算。这五部分在优化模型里角色完全不同。基础负荷是常量光伏是已知边界电池和空调是决策变量电网购电是平衡变量。调度器每天根据预测的光伏出力、负荷需求、室外温度和电价序列决定未来一天每个时段各设备的工作点。这里有一个容易忽略的点如果楼宇允许向电网反送电模型里还要加售电约束和上网电价甚至要考虑潮流约束一般楼宇微网场景默认只从电网购电模型会简化很多。我在后面的代码里按“仅购电”处理如果需要研究反向送电场景只需要在功率平衡方程里增加一个售电变量逻辑上是完全对称的。2.2 空调虚拟储能的等效热参数模型空调负荷建模方法很多从细致的多阶RC传热模型到简化的数据驱动模型都有但微网优化调度场景下一阶等效热参数模型是性价比最高的选择业界也把它叫做ETP模型。它把整栋建筑简化成一个热容C加一个热阻RC代表建筑储存热量的能力R代表围护结构阻碍热量传递的能力。一阶ETP模型的连续时间方程可以写成C乘以室内温度变化率等于室外温度与室内温度之差除以R再加上空调制冷量。用公式表达就是C·dT_in/dt (T_out - T_in)/R Q_cool。其中Q_cool负号还是正号取决于制冷方向定义习惯上理解成空调从室内带走的热量。真实系统里还要考虑内部人员、设备产热可以合并成一个扰动项但作为仿真演示可以先忽略。为了写成Matlab代码需要把连续方程离散化。取时间步长为dt定义衰减因子a等于e的负dt除以R乘以C次方那么室内温度递推就变成T_in(t1) a·T_in(t) (1-a)·(T_out(t) - R·EER·P_AC(t))这里P_AC是空调消耗的电功率EER是能效比两者相乘才是实际的制冷功率。R的单位约分后是摄氏度每千瓦所以R乘以EER再乘以功率得到摄氏度。这样模型里所有输入输出都能统一到kW和℃两个单位上不容易绕晕。这个公式的物理直觉是下一时刻的室温等于上一时刻室温按比例衰减再叠加室外温度和空调制冷共同决定的稳态温度。RC乘积越大a越接近1意味着房间保温性能越好虚拟储能的“存冷”能力也就越强。我实测下来RC在4到8小时范围内的建筑虚拟储能调节效果非常明显如果RC只有半小时那房间就跟没保温的纸壳一样几乎存不住能量。2.3 目标函数与约束条件如何设计目标函数需要体现调度想要什么。最常见的做法是追求运行成本最小同时兼顾用户舒适度。如果不考虑舒适度优化器会为了省电费把室内温度一直推到允许边界用户体感会很差。所以目标函数里一般包含三项购电费用、电池充放电的等效损耗代价、以及温度偏离用户设定值的舒适度惩罚。用数学语言描述就是最小化所有时段购电功率乘以分时电价、电池充放电功率乘以循环损耗单价、以及温度偏差绝对值乘以舒适度惩罚系数的总和。这个惩罚项是虚拟储能调度里面最有讲究的地方它在成本和舒适度之间架起了一座可调平衡的桥。实际调试时λ的取值决定了策略风格λ很大时空调几乎不动虚拟储能名存实亡λ太小时温度频繁触边界用户必定意见很大。约束条件则包括五个方面功率平衡约束电网购电加光伏出力加电池放电等于基础负荷加电池充电加空调功率电池SOC递推约束考虑充放电效率电池充放电功率上下限和SOC上下限约束空调热动态递推方程室内温度维持在允许的舒适区间以及空调功率上下限。这里需要特别强调温度区间本身就是虚拟储能充放电边界。温度下限对应虚拟储能满充状态温度上限对应放空状态。所以温度上下限就是SOC的上下限不需要额外假设直接就把舒适约束转化成储能约束了。2.4 为什么选择Matlab作为实现工具很多做调度的人习惯用Python写优化但Matlab在微网调度领域的使用率依然非常高尤其是搭配Yalmip这类建模工具箱时写优化问题就像在纸上列公式一样自然。你直接声明一批sdpvar决策变量然后用等号和不等式把约束摆上去最后一句optimize就能调底层求解器。对我来说Matlab最大的好处是向量化和矩阵化非常顺畅。时间序列天然就是列向量所有时段的约束可以用向量表达式直接写代码量比循环版本少很多。而且画图功能强大调度结果可视化几乎不费功夫做完仿真直接plot就能输出漂亮的对比曲线这份便利在工程汇报和论文出图上都非常值回票价。3. Matlab代码实现全流程3.1 程序骨架与数据结构设计整个脚本我习惯按六个区块组织参数声明区、数据生成区、决策变量声明区、约束组装区、目标函数与求解区、结果绘图区。这样无论改参数还是调逻辑都很方便不需要在一大段程序里到处找。参数区做的事情很直白定义总时段数、时间步长、电池容量与功率上限、电池SOC上下限、空调额定功率、建筑热阻热容、温度舒适区间、电价序列等。这些参数集中放在文件开头运行一次之后想改场景只需要动这几行就行。决策变量我通常按照“一个物理对象一组变量”的原则声明。这里需要知道所有优化变量的类型和维度比如P_grid是T维连续变量表示每时段购电功率P_ch和P_dis是T维连续变量分别表示电池充电和放电功率SOC是T维连续变量表示每个时段末的电池荷电状态T_in是T维连续变量表示每个时段末的室内温度P_AC是T维连续变量表示每个时段的空调电功率。这六个变量组就是整个优化模型的主体。如果后面扩展风机、柴油机等设备只需要在功率平衡方程里再加对应的功率变量就行。3.2 数据准备与负荷场景生成数据准备阶段需要生成四类输入序列室外温度、光伏出力、基础负荷、分时电价。对于仿真演示最简单的方式是用带随机扰动的数学曲线生成保持固定随机种子即可复现结果。室外温度按夏季典型日处理用一个正弦函数模拟昼夜温差白天下午最热、凌晨最凉。光伏出力则用半正弦形状近似6点左右开始有出力中午前后达到峰值傍晚降为零再叠加小幅随机波动模拟云层遮挡。基础负荷设定为白天地面活动增加、晚上回落的形状早晚各有一个小高峰凌晨最低。电价序列直接采用典型分时电价谷时0.35元/kWh平时0.8元/kWh峰时1.2元/kWh。峰时段放在上午和晚上两个区间这样虚拟储能可以把晚上的空调负荷转移到深夜把上午的高峰用电挪到中午光伏出力高峰期削峰填谷的效果会非常直观。3.3 用Yalmip构建优化问题下面这段是整个模型的核心。先把决策变量声明出来然后用约束逐条把物理规律写进去。我给出一个经过简化的关键示例代码重点展示热动态约束、电池SOC递推和功率平衡约束的写法。%% 决策变量 T 96; dt 0.25; E_cap 600; P_bat_max 200; SOC_min 0.1; SOC_max 0.9; P_grid sdpvar(T,1); P_ch sdpvar(T,1); P_dis sdpvar(T,1); SOC sdpvar(T,1); T_in sdpvar(T,1); P_AC sdpvar(T,1); Constraints []; %% 电池SOC递推 Constraints [Constraints, SOC(1) 0.5]; for t 2:T Constraints [Constraints, ... SOC(t) SOC(t-1) (P_ch(t)*0.95 - P_dis(t)/0.95)*dt/E_cap]; end Constraints [Constraints, SOC_min SOC SOC_max]; Constraints [Constraints, 0 P_ch P_bat_max, 0 P_dis P_bat_max]; %% 空调热动态约束 a exp(-dt/(R*C)); Constraints [Constraints, T_in(1) 26]; for t 2:T Constraints [Constraints, ... T_in(t) a*T_in(t-1) (1-a)*(T_out(t) - R*EER*P_AC(t))]; end Constraints [Constraints, T_min T_in T_max]; Constraints [Constraints, 0 P_AC P_AC_max]; %% 功率平衡约束 Constraints [Constraints, ... P_grid P_pv P_dis P_base P_ch P_AC]; %% 目标函数 Objective sum(price.*P_grid)*dt ... battery_cost*sum(P_chP_dis)*dt ... comfort_weight*norm(T_in - T_set,1); %% 求解 ops sdpsettings(verbose,1); sol optimize(Constraints, Objective, ops);有几个细节必须提醒。第一SOC递推里的充放电效率放在不同位置充电时电耗进电池要打折扣放电时电耗出电池也要打折扣不要写成对称形式。第二功率平衡方程里没有单独的虚拟储能功率变量因为虚拟储能行为完全体现在P_AC偏离基准值上空调多开是在充电少开是在放电这个逻辑要能在结果里看明白。第三舒适度惩罚项用的是平均绝对偏差Yalmip里直接写成norm(T_in - T_set,1)即可比用abs函数逐项写出更干净。3.4 结果可视化与效果分析求解结束后Yalmip会把优化结果存在变量对象里用value()函数取出来画图。我通常画三张图第一张是功率平衡堆叠图展示时段购电、光伏、电池、空调和基础负荷的曲线关系第二张是电池SOC与室内温度随时间变化第三张是含虚拟储能和无虚拟储能两种场景下的购电成本对比。画图的代码比较常规核心是一次性把需要比较的序列value出来再用plot画成带图例的多曲线图。值得多说一句的是利润和效果分析最好直接打印出数字包括总运行成本、峰时购电总量、谷时购电总量、平均温度偏移和温度越限次数这样才能定量地描述虚拟储能到底带来了多少改善。只看曲线是看不出调度策略优劣的。4. 仿真算例与效果对比分析4.1 场景设计与参数设置为了让结果有说服力我设计了一个可对照的算例同一栋楼宇微网在完全相同的负荷、光伏、电价条件下分别运行两套策略。第一套是无虚拟储能方案空调功率固定为额定值不随电价变化只有物理电池参与调度。第二套是融合需求侧虚拟储能系统方案空调功率作为优化变量参与全局调度室内温度在舒适区间内自由变化。仿真参数可以按下表设置这套参数是我调试多轮后确认比较合理的组合拿来直接跑就能复现一个效果明显的案例。参数取值说明仿真时段T96全天96个15分钟时段时间步长dt0.25小时15分钟一个调度决策电池容量E_cap600 kWh中型楼宇电池规模电池最大功率200 kW充放电功率上限SOC范围0.1~0.9避免过充过放空调总功率上限150 kW所有空调机组合计空调能效比EER3.2每kWh电制冷3.2kWh冷量建筑热阻R0.08 ℃/kW围护结构等效热阻建筑热容C40 kWh/℃有效热质量舒适温度区间24~27 ℃用户舒适带峰/平/谷电价1.2/0.8/0.35元典型分时电价室内温度初始值设26℃电池SOC初始0.5不对终端状态做强制约束但通过目标函数自然引导。这样设置的好处是不容易无解也更贴近实际滚动调度场景。4.2 调度结果分析有虚拟储能与无虚拟储能的对比跑完两种方案差别非常明显。无虚拟储能时空调全天稳定在80kW附近电网购电曲线跟基础负荷与光伏的差值走势基本一致高峰时段购电功率接近上限系统对峰时电价的调节能力全部押在物理电池上。但由于电池容量有限峰时支撑时间有限峰值购电功率依然很高。加入虚拟储能之后空调的功率曲线彻底变样。凌晨谷电时段空调自动升到接近110kW把房间温度从26℃拉低到24℃相当于给整栋楼持续充了几个小时的冷。上午峰电价开始时空调功率降到60kW左右室温缓慢回升到中午时段已经回到26℃以上。下午光伏出力充沛时空调功率又小幅上调用绿电继续蓄冷。晚上再次进入峰时段空调功率又一次主动压低把白天存的冷量慢慢释放掉。结果是双重的电网购电峰值明显削平峰时购电比例大幅降低总运行成本相比无虚拟储能方案下降了约7%~9%。这个降幅单看好像不大但考虑到楼宇本身就是用电结构相对稳定的建筑单元虚拟储能只是通过改变空调启停时序就省出了这一部分真金白银实际工程意义已经非常可观。我特别关注了室内温度曲线全程都在24℃到27℃舒适区间内运行。也就是说这份成本下降几乎是无感实现的用户不会觉得夏天屋里变热了只是空调运行规律变得更聪明了。4.3 用户舒适度与运行成本的平衡舒适度惩罚系数是整套策略里最敏感的旋钮。我把权重从0开始逐步调大观察系统行为变化结果非常有意思。权重接近0时优化器会把温度频繁推到上限27℃空调几乎只在谷电时段运行购电成本最低但温度曲线长期贴着上限跑体感舒适度比较差。随着权重加大温度曲线逐渐向26℃设定值收敛成本也随之上升。在某个临界范围内成本上升非常缓慢舒适度却提升明显这一段就是性价比最高的参数区间。继续加大权重到一定程度温度曲线几乎贴死设定值虚拟储能调度行为消失整个系统退化为空调恒功率运行成本回到无虚拟储能方案的水平。所以我在实际调试中一般先用零权重跑一遍看虚拟储能潜力的上限再逐步增大权重找到“温度偏移小于1℃但成本仍能降5%以上”的参数点。这个点不同建筑差异很大强烈建议不要照抄任何文章的λ取值必须在自己的场景里重新扫一遍。5. 常见问题排查与工程经验5.1 问题速查表把我在代码调试过程中踩过的坑整理成了一张表。这里的每个问题都对应一个真实的调试场景按照这个顺序排查通常能快速定位到根因。问题现象可能原因排查与解决办法求解器返回无解约束过强比如SOC初末值同时锁死且光伏不足放宽终端SOC约束、提高购电上限、检查数据单位室内温度曲线振荡时间步长过大或热容C偏小减小dt、核对RC乘积、给温度变化率加约束虚拟储能效果不明显可调温差太小或空调功率上限太低扩大舒适区间、提高空调容量、拉大峰谷电价差求解耗时过长时段数过多、舒适惩罚项写成二次项先跑30分钟步长验证、惩罚项改用一范数结果中出现跳变功率目标函数里没有平滑项在目标里加相邻时段功率变化量的惩罚电池和空调功能重叠电池与虚拟储能同时快速响应给电池功率变化率加约束让虚拟储能负责慢调节这里最容易被低估的是单位问题。功率平衡方程里如果一项是kW另一项是kWh模型基本必错。每次调参之前先检查一遍单位和系数能省下大量没有意义的排错时间。5.2 参数敏感性调优心得建筑热阻R和热容C是整个虚拟储能建模的灵魂参数但这两个参数最容易被随手拍脑袋。实际上对一栋楼而言你可以用稳态法做一个粗略估计把空调开到固定功率记录房间温度从初始值到稳定值的时间响应曲线根据升温速率和最终稳态温差反推R和C。这个方法不需要专用设备一个温度传感器加一小时记录就能得出可以用的数量级。R偏大C偏小时模型会高估虚拟储能的调节能力优化结果在真实环境下根本不满足温度约束这类模型最怕“仿真跑得漂亮、一接实际就崩”。分时电价差也是决定虚拟储能价值的关键因素。如果峰谷电价差小于0.2元/kWh空调的负荷转移成本很可能覆盖不了收益调度器自然会让空调保持出力平稳虚拟储能没有存在感。反过来峰谷差价越大虚拟储能的利润空间就越明显策略也越激进。所以评估一个楼宇适不适合做虚拟储能调度第一步不是写模型而是先看它的电价结构。时间步长方面15分钟是调度效果和求解速度的平衡点。步长取5分钟模型会更精确但求解时间成倍增加步长取1小时峰谷切换时刻的功率跳变就看不出来了。如果一开始调试经常无解先把步长放宽到30分钟跑通逻辑后再改回15分钟效率会高很多。5.3 扩展思路这个模型框架做出来之后可以往多个方向扩展。第一个是滚动优化把日前调度改为每15分钟滚动更新一次窗口每次只执行第一个时段的决策这样能吸收光伏和负荷预测误差是目前工程落地最主流的做法。第二个是鲁棒优化或随机优化把光伏出力的不确定性显式放进约束虽然模型复杂度上升但调度结果的安全裕度会显著改善。第三个方向是多楼宇聚合。单栋楼的虚拟储能容量有限参与市场没有话语权如果在一个园区内把多栋楼的空调负荷聚合起来统一调度整体调节容量就能上一个量级园区与电网的交互空间会更大。第四个方向是参与需求响应市场把虚拟储能作为投标资源参与调峰辅助服务市场让空调负荷调节产生额外收益。沿着这套代码的框架往上加约束、加随机参数并不会推翻重来扩展路径相当顺滑。最后说一点我自己的真实体会。虚拟储能这个概念听起来很高级但实际上整套方案的价值含量完全取决于两个前提一是空调热模型参数是不是贴近实际二是舒适惩罚系数是不是真正反映了用户的真实感受。很多论文里的调度曲线漂亮得一塌糊涂一到实际楼宇就跑不动十有八九问题出在这两个参数上。建议跑通本文代码之后先花时间用实测温度数据校准R和C再根据实际电价差和用户接受度去调整λ。模型本身并不复杂把这两个前提打磨到位整个调度的实用价值会比默认参数高出一个台阶。后续做扩展时优先考虑滚动优化和组合式调节这套方案的底子足够扎实完全可以作为长期迭代的起点。