首页 / 资讯中心 / 文章详情

热电联供智能楼宇群协同能量管理:MATLAB实现与优化

热电联供智能楼宇群协同能量管理:MATLAB实现与优化 ★ FEATURED ARTICLE
含热电联供的智能楼宇群协同能量管理从建模思路到MATLAB实现做智能楼宇能量管理系统BEMS时间久了你会发现一个特别微妙的现象单栋楼宇的优化调度做得再完美放到楼宇群里依然不是最优解。原因很简单楼和楼之间是有互补潜力的。某栋楼的余热可能正好是隔壁楼缺的某栋楼的屋顶光伏峰值也可能恰好对冲另一栋楼的空调负荷高峰。这篇文章我想聊聊之前做的一个模拟项目X含热电联供CHP系统的智能楼宇群协同能量管理基于MATLAB实现重点讲清楚数学模型怎么搭、代码怎么组织、协同调度到底能省多少以及那些不跑几遍根本发现不了的坑。这个项目适合谁如果你是做建筑能源管理、综合能源系统优化、或者刚开始接触园区级能量调度仿真的同学这篇应该能帮你少走不少弯路。内容不涉及高深的算法推导但我会把细节抠到位尤其是从物理模型到代码落地的中间那些衔接缝。1. 项目全景楼宇群协同能量管理到底在做什么1.1 为什么单栋楼宇管理不够需要协同先说个直觉层面的理解。单栋楼宇的能量管理本质上是自身平衡——电不够就从电网买热不够就启动燃气锅炉储能不够就少放。这种模式有个问题就是设备容量必须按最不利工况来配置同时每栋楼的波动全靠自己吸收。比如某栋楼白天光伏出力大但负荷不匹配多余的电力要么低价卖给电网要么削减出力而旁边那栋楼明明还缺电却要从电网高价购买。这就是典型的局部最优全局不优。楼宇群协同管理的本质是把多栋楼宇看成一个大系统让电、热两种能量形态在楼宇之间流通和互济。热能通过热网共享电能通过联络线共享再加上各楼宇内部的CHP机组、储能系统、热储罐等设备构成一个多能互补的优化调度问题。协同之后设备总容量可以适当缩减、购电成本整体下降、新能源就地消纳率也会上去。学术界叫它多能源枢纽Energy Hub协同工程上通俗点说就是大家抱团取暖把富余的能量送到最需要的地方。1.2 热电联供在系统中的角色CHPCombined Heat and Power是这个系统的核心供能设备一块燃气烧下去同时产电和产热。它的优势在于梯级利用——发电过程中产生的高温烟气不再直接排掉而是通过余热回收装置供给建筑采暖或生活热水综合能源利用效率可以从单纯发电的35%左右提升到80%以上。在楼宇群协同调度的语境下CHP的价值被进一步放大了。因为热负荷和电负荷的峰谷时段往往不完全一致CHP的热电比是固定的但楼宇群的总体需求可以通过电热之间互相调配来适配。比如夜间电负荷低、热负荷高CHP可以多发电、多产热多出来的电恰好充给储能或卖给其他楼宇白天电负荷高、热负荷低CHP就可以偏向电出力不足的热由燃气锅炉或热储罐补充。这种灵活性只有放到楼宇群层面才真正体现得出来。1.3 整体架构与数据流我做的这个模拟项目X是3栋楼宇组成的楼宇群。每栋楼内部包含一个CHP机组、一个燃气锅炉GB、一个电池储能系统BESS和一个热储罐TES楼顶还有光伏PV。楼宇之间通过一条公共电母线和一条供热管网实现能量交换电网作为外部电源天然气作为燃料输入。数据流大概是这样先根据历史数据做负荷预测电负荷、热负荷、光伏出力然后以预测数据作为输入求解一个混合整数线性规划MILP问题得到未来24小时、时间分辨率1小时的调度计划——每台设备每个时刻的出力、储能充放电功率、楼宇间的交换功率。MATLAB里我用YALMIP作为建模层Gurobi作为求解层整个求解过程自动化结果输出到Excel里做后处理分析。提示如果你不熟悉YALMIP可以理解为它把数学上写的优化问题翻译成求解器认识的格式。你只管用变量和约束描述问题剩下的事交给它。2. 数学模型把协同变成可求解的优化问题2.1 目标函数设计目标函数我选择了最小化总运行成本这是工程上最关心的指标。总成本包括两部分从电网购电的费用、购买天然气的费用。如果系统允许向电网售电还可以把售电收益从总成本中扣除。用数学语言描述就是minimize C Σ (c_elec(t) * P_grid(t) * Δt) Σ (c_gas * F_total(t) * Δt) - Σ (c_sell(t) * P_sell(t) * Δt)其中c_elec是分时电价P_grid是购电功率c_gas是天然气单价F_total是所有设备的总耗气量c_sell是上网电价。Δt取1小时。这里有一个关键细节如果目标函数只有经济成本优化器可能会过度排放。所以我后来又加了一个可调节的碳排放惩罚项让目标函数变成经济成本和碳排放成本的加权和。这样可以在对比中同时输出经济最优调度和经济环保综合调度两套结果算是对项目深度的一种扩展。2.2 核心设备建模设备建模是整个模型准确性的根基。每个设备的模型都包含运行区间、输入输出关系和动态约束三个方面。CHP机组的建模我采用了简化的可行运行域方法。令P_chp(t)为电出力H_chp(t)为热出力约束条件为P_chp_min ≤ P_chp(t) ≤ P_chp_max表示电出力上下限0 ≤ H_chp(t) ≤ H_chp_max表示热出力上下限H_chp(t) ≤ α * P_chp(t) β这是热-电联合运行约束反映了背压式和抽凝式机组的不同运行特性燃气消耗量F_chp(t)则与电出力近似线性F_chp(t) a * P_chp(t) b * u(t)其中u(t)是开停机0/1变量a和b是燃料曲线系数。这种线性化的处理很适合MILP求解比纯效率模型更贴合实际。储能设备的建模相对标准化但要注意几个容易出错的地方。蓄电池的状态量SOC以0和1之间的小数表示动态方程是SOC(t) SOC(t-1) - P_dis(t) * Δt / (η_dis * E_cap) P_chg(t) * η_chg * Δt / E_cap其中P_dis和P_chg分别是放电和充电功率η是充放电效率E_cap是容量。额外还需要两个约束防止同时充放电通过0/1变量来处理互斥关系。热储罐TES的建模方式完全类似只是把电功率换成热功率。注意光有SOC动态方程还不够必须加不能同时充放电的约束。我见过很多人漏掉这一点结果求解器聪明地同时充放电费用凭空多算出一大截。2.3 协同约束能量平衡与楼宇间交换协同的核心在于楼宇间的能量交互约束。电能部分每栋楼的节点平衡方程为P_grid_self(t) P_chp(t) P_pv(t) P_dis(t) P_buy_building(t) P_load(t) P_chg(t) P_sell_building(t)其中P_buy_building和P_sell_building是楼宇从公共母线购入/向公共母线售出的功率。公共母线的功率平衡约束则要求所有楼宇的净购电之和等于系统与外部电网的净交互功率这样保证电能只在一个大系统内部流通。热能的交互类似只不过热网方向固定从供热楼宇流出、流入需热楼宇且传输过程中存在热损耗。这里有一个工程上重要的简化思路输电阻塞不考虑认为公共母线和热网容量足够大。如果想更严谨可以加一个交互功率上限约束限制楼群之间的最大交换功率这样模型更接近真实物理网络容量约束求解复杂度和结果真实性同时提高。我在这个项目里就设置了交互功率上限效果比较理想模拟出的调度结果不会出现单条母线同时输送超大功率的不合理情况。3. MATLAB代码架构与关键实现3.1 工具箱选型YALMIP 求解器怎么搭MATLAB环境下做优化调度主流的组合是YALMIP Gurobi/CPLEX。YALMIP是一个免费的建模工具箱它最大的优势是把建模和求解解耦——你可以用同一套代码切换不同求解器尤其是在学生和科研场景下Gurobi的学术授权也容易获取APMonitor、OSQP这类开源求解器也能在YALMIP里无缝接入。安装顺序有讲究。我自己习惯先装YALMIP再把Gurobi的MATLAB接口配好。Gurobi的安装包里自带MATLAB接口文件只需将路径添加到MATLAB搜索路径中。一个检验安装成功的简单方式是在MATLAB里输入yalmiptest它会自动运行一组测试问题末尾会显示所有可用求解器列表。3.2 数据生成与参数设定参数设置我把它集中放在一个结构体里比如params.e_chp_max、params.h_chp_max这样。这么做的实际好处是后续做灵敏度分析时你只需要修改结构体里的一个字段而不用满代码去搜索和修改散落的参数。建议你也采用这种集中式的参数管理方式。负荷数据我用了一个典型冬季日的数据——冬季里热负荷高电负荷相对平稳更能体现CHP联供的价值。每栋楼生成一条电负荷曲线和一条热负荷曲线形状上错开一些峰值便于观察协同优化带来的互济效果。电价曲线用的是常见商业综合体的分时电价峰期1.1元/度、平期0.7元/度、谷期0.3元/度。天然气价格设为2.6元/立方米。下面的伪代码展示了变量定义的核心部分% 时间与决策变量定义 T 24; P_chp sdpvar(params.n_buildings, T, full); H_chp sdpvar(params.n_buildings, T, full); u_chp binvar(params.n_buildings, T, full); % CHP启停状态 SOC sdpvar(params.n_buildings, T1, full); % 储能SOC P_chg sdpvar(params.n_buildings, T, full); P_dis sdpvar(params.n_buildings, T, full);变量定义之后就可以用YALMIP的约束语法AddConstraint逐条加约束最后调用optimize。3.3 核心代码片段解读因为代码量比较大我只挑一个关键片段讲那就是楼宇间电能交互的平衡约束。这里我使用的是虚拟母线建模方法。每栋楼的电平衡约束和数据流逻辑如下楼宇i的净交换功率定义为该楼宇向公共母线卖出和从公共母线买入之差。通过一个等式约束把它和楼宇内部各设备的功率关联起来。公共母线的全局平衡约束则要求所有楼宇交互功率的代数和等于系统与外部电网的交换功率。两套约束合在一起才能保证系统整体的能量守恒。我举个例子。如果楼宇1的CHP多发了200kW电而楼宇2恰好在峰值电价时段缺200kW那么优化结果会自动让楼宇1向母线卖出200kW楼宇2从母线买入200kW同时外部电网购电相应减少200kW。这个效果就是协同带来的附加值不需要你额外写调度逻辑只要约束建模正确求解器自然会找到这个最优解。热网部分也是如此只是热功率不能跨楼宇大规模传输我会给热交互功率设置一个上限比如每栋楼最多向公共热网输送300kW热功率模拟现实供热管网的容量限制。4. 算例分析独立运行对比协同运行4.1 场景设定与对比方案为了验证协同调度的价值我在同一个数据条件下跑了两套方案。方案A是独立运行即每栋楼各自满足自己的电气负荷不允许楼宇间交换能量方案B是协同运行即楼宇间可以通过公共母线和热网互相交易电能和热能。其他所有参数设备容量、负荷、电价、气价完全一致。这样做的好处很直观二者的成本差异纯粹来自协同效应不受参数扰动干扰。为了让结果更有说服力我把方案B又细分成了仅电协同和电热协同两个版本这样可以单独拆解电协同和热协同分别带来的收益。4.2 结果解读成本、碳排放、设备利用率算例结果不出所料也让我对协同调度有了更直观的概念。协同运行相比独立运行总运行成本下降了约11.7%。这个降幅主要来自三个方面第一是购电结构改善。协同之后楼宇群的整体购电曲线明显变得更加平滑峰值购电功率降低了将近150kW这意味着高峰时段的高价电减少了而谷段电从电网有更多购入和储充机会。第二是CHP运行更饱和。独立运行时楼宇1的CHP夜间可能因为自身热负荷不足而被迫降出力协同模式下楼宇1产出的多余热功率输送给楼宇3CHP维持高效率满发整体气耗被摊薄。第三是储能套利机会更多了。储能不再局限于本栋楼的负荷调节还可以参与楼宇群内部的能量转移。碳排放方面单算燃料消耗量和电网购电量折合的碳排放总量协同模式比独立模式下降了8.2%。道理也简单CHP的高效运行替代了部分电网煤电和低效燃气锅炉供热单位供能碳排放自然降下来了。4.3 灵敏度分析与规律我另外做了一组灵敏度测试把CHP容量从80kW逐步提高到250kW观察成本下降幅度的变化。结论是协同收益并不是线性的在CHP容量接近楼宇平均负荷的70%~80%时收益最大再往上扩容边际收益迅速下降。这个发现对项目规划很有指导意义——不是说CHP越大越好合适最重要。另一个规律是电价峰谷差越大协同的收益空间越大。当峰谷电价差扩大一倍时协同优化带来的购电节省又增加了约5个百分点。尤其在高电价差场景下谷段储电峰段释放和楼宇间在峰时互济的操作频次明显提高。这些规律加在一起其实指向一个判断协同能量管理不是一套固定的优化代码而是一种基于实时价格信号和负荷状态的自适应调节机制。你在实际做项目时不要只关注模型本身更要对边界条件保持敏感知道什么参数变化会显著影响方案价值。5. 常见问题与调试经验5.1 YALMIP建模常见报错与解决用YALMIP的人基本都会遇到几个经典报错。第一个是Your installed version of YALMIP is outdated这个不用慌直接命令行敲yalmiptest看看求解器是否还在正常工作通常更新一下YALMIP路径即可。第二个是No suitable solver found说明当前问题类型超出了已装求解器的能力范围。排查思路是这样check一下模型类型——如果你定义了0/1变量就需要MILP求解器Gurobi、Cplex或者开源的CBC都可以如果全是连续变量那么linprog就够用。装好对应求解器后记得重新运行yalmiptest确认接口正常。5.2 求解器选择与性能调优实际调试中我发现求解器选择和参数调节对求解时间的影响相当大有时候甚至比模型本身还关键。Gurobi求解这个1200多个变量、包含600多个0/1变量的MILP问题默认参数下需要几十秒而稍微调一下MIPFocus参数把它设成2让它更侧重可行解搜索求解时间能缩短到10秒以内。如果你的问题规模更大我建议开启Gurobi的多线程资源同时在求解完一轮后把上一轮的整数解作为MIP start传给下一轮优化这样能显著加速后续迭代。这里有一个经验值得记住不要在建模阶段过度追求把所有细节都写成约束。我一开始曾经试图精确模拟热网的暂态热惯性结果模型里加了一堆非线性的热力学方程和大量的时间耦合约束求解直接卡死。后来改成静态热功率传输模型结果在可接受的误差范围内与详细模型非常接近求解效率则提升了一个数量级。三维管网动力学放在离线模拟阶段做校验就够了调度模型里能简化就简化。5.3 模型失真的排查思路还有一种情况比求解失败更隐蔽就是模型结果看起来对但实际不合理。比如我遇到过CHP整个调度周期内一直满发而燃气锅炉几乎不出力的情况。一开始以为CHP效率参数设置合理结果一查是CHP的热出力上限设得太宽松导致CHP产热的边际成本始终低于锅炉优化器当然偏好CHP满发。这个现象不能说模型完全错了但如果你希望看到CHP和锅炉分时段配合的合理结果就应该注意给CHP的爬坡速率设一个物理约束避免出力陡增陡降同时检查热出力上限和可行运行域是否设置得过大。注意调参的目标是让调度结果贴近工程实际而不是让模型产出最漂亮的曲线。我见过一些案例把效率参数调得虚高结果CHP曲线完美但成本和能耗数据明显失真。用自己知道答案的基准场景来校验模型是避免这个问题的好办法。另外我建议你务必做一个退化测试。把楼宇间交互功率上限设为0看协同模型的结果是否与独立运行模型完全一致。如果两者不一致说明公共母线平衡约束或者交互变量定义出了问题这会是你调试时最有力的锚点。最后分享一个实用技巧别看协同调度听起来高级它的落地关键往往在边界条件的设置上。我踩过几次坑之后习惯在代码的最前面预留一组场景开关——是否允许电交互、是否允许热交互、是否把碳排放成本纳入目标函数。这三个开关用0/1值控制切换场景只需要改一个数字极大方便了对比分析。你如果打算把这个代码扩展成更大的项目比如纳入电动汽车充放电、氢能储运或者CCHP冷热电三联供也建议沿用这种开关式设计它能让你后续的扩展过程省力不少。最后再提一句细节本文所有参数计算都是基于我个人常用的典型设定具体工程应用一定根据自己的数据重新标定尤其注意负荷曲线的时间分辨率——如果你有15分钟级的数据就直接把Δt改成0.25目标函数和储能动态方程里的系数同步调整不要沿用1小时的参数。这个看起来很小的改动往往决定了仿真结果和真实运行之间到底差多少。
阅读完成 · 觉得有帮助?
咨询建站