含热电联供的智能楼宇群协同能量管理:主从博弈建模与需求响应设计
发布时间:2026/9/29 8:25:02 作者:尧图编辑部 阅读量:1,286

这几年做综合能源系统优化被问得最多的一个问题就是楼宇里都已经装了自己的热电联供、屋顶光伏、储能为什么还要大费周章搞“智能楼宇群协同能量管理”单独把每一栋楼自己的那一亩三分地优化好不行吗答案是不太行。单栋楼的热电联供机组容量有限热负荷和电负荷又天然耦合冬夏尖峰时段问题特别明显——要么热有多余无处消化要么电不够用时只能靠电网硬扛孤岛式调度很难同时把设备利用率和用户舒适度都照顾好。如果把一个园区范围内的多栋楼放到同一个博弈框架下运营商作为上层定价格、出策略楼宇作为下层做响应配合需求响应机制让用户不再只是“被动接受电价”而是主动把自己的可调能力上传给系统整体协同潜力会非常可观。这篇文章就围绕含热电联供的智能楼宇群协同能量管理聚焦主从博弈建模和需求响应设计把我做这类项目的思路、模型、求解细节和踩过的坑展开说一下供正在做园区能量管理、楼宇智能化的朋友参考。1. 项目概述与核心问题拆解1.1 为什么单楼孤岛式调度越来越“不够用”先说一个最直接的现象不同楼宇的用能特性差异很大。办公楼白天电负荷高、夜间几乎没什么需求酒店热负荷和电负荷全天都有但波动曲线和办公楼完全不同学校到了寒暑假基本处于休眠状态。如果每栋楼各自独立优化那就意味着每栋楼都要按照自己的尖峰负荷去配置热电联供机组和储能容量投资拉满、利用率却很低这是典型的“各自为政”式浪费。更麻烦的是热电联供机组本身的电热耦合特性。一台燃气内燃机或者燃气轮机带余热回收运行时会同时产生电和热电负荷达到高峰的时候热负荷未必在同一时段出现峰值反过来冬季深夜热负荷达到顶峰时电负荷往往又比较低。单栋楼想要解开这个耦合通常得靠电锅炉、蓄热罐这些辅助设备但容量和投资成本都是有限制的。当多栋楼组成一个楼宇群就把原本孤立分散的可调节资源汇集成了一个“池子”。A楼电负荷爬坡的时候B楼的热负荷正好在低谷B楼的热电联供机组可以多发电、把余热送到热网给A楼使用或者B楼的蓄热罐在夜间蓄热、白天释放来支撑整个热网。这种跨楼的能量互补是单栋楼靠自身设备没办法实现的。楼宇群协同要解决的本质问题就是如何把这种互补价值量化出来并在调度中真正兑现。1.2 热电联供楼宇群协同的能源“锚点”热电联供是这类项目里最核心的物理设备它的原理其实不复杂燃气先在发电机组里做功发电发电之后产生的废热通过换热装置回收用于供暖、热水或者驱动吸收式制冷机。相比单纯发电机加燃气锅炉的方案热电联供走的是能量梯级利用的路子综合能源利用效率能做到80%到90%这是“电热分开生产”的传统模式很难达到的。放到楼宇群里看热电联供不仅仅是一台发电设备它实际上是整个能量管理系统的“锚点”。一方面它的发电出力可以跟随电力市场的价格信号灵活调整给上层运营商提供了一个很有效的电价套利和削峰填谷工具另一方面它的余热回收量又和发电量强耦合这导致了楼宇群热网和电网之间存在深度的交互耦合。只要算热电联供的调度计划就必须同时算电功率平衡和热功率平衡无法把电和热分开独立决策。在实际项目中还要区分机组类型。燃气轮机热电联供的余热品位高适合拖动溴化锂机组做制冷燃气内燃机热电联供的发电效率更高余热里还有一部分缸套水低温热适合直接供暖。不同机组的热电比差异很大建模时如果不根据设备实际参数去标定热电比曲线算出来的“最优调度”拿到现场根本执行不了。这是我在项目里最早吃到教训的地方后面细说。1.3 主从博弈与需求响应如何“咬合”在一起很多刚接触这个方向的人都会问需求响应和主从博弈是不是两个独立模块先做需求响应建模再做博弈其实不然。在主从博弈框架里需求响应是下层楼宇对上层价格信号的行为反应而主从博弈均衡就是考虑了这种反应之后上层策略的最优结果两者本质上是一个闭环。可以这样看上层是园区的能源运营商它掌握热电联供、蓄热罐、外部购电渠道这些资源负责制定各时段的售电价格、售热价格也可能给出激励型需求响应的补偿单价。下层是各个楼宇用户他们在看到价格信号之后自动调整自己的用电用热计划比如把空调设定温度在舒适范围内稍微调低一点、把电动车充电挪到低价时段、把蓄热罐改成夜间蓄热白天放热。楼宇对这些信号的响应反过来又会改变整个楼宇群的负荷曲线影响运营商对热电联供出力和外购电量的安排。运营商在决策时如果完全忽略楼宇的响应定出的价格和调度计划一定是不准确的而楼宇如果完全不信任价格信号也没有动力参与调节。主从博弈正是把这种“有先后的互动决策”数学化运营商先出策略楼宇后做最优响应最后两边同时达到一个谁都不想单方面改变的状态这个状态就是均衡。2. 主从博弈建模从“我说你做”到“你猜我会怎么做”2.1 Stackelberg博弈先手优势与前瞻最优主从博弈的学名是Stackelberg博弈它描述的是决策者之间有先后顺序、而且后者能观测到前者策略的一类互动决策问题。用一个生活化的类比房东出租房子定租金租客看了租金再决定租不租、租哪套。房东如果想让自己收益最大就不能漫天要价因为他知道租客会在租金和别人家质量、位置之间做权衡定得太高反而可能租不出去。所以房东定价时要做的是“把租客的最优反应当作已知条件”再做自己的收益最大化。对应到楼宇群场景园区运营商就是房东楼宇就是租客。运营商出台分时电价、热价和激励性补偿方案楼宇获得这些信息之后在自身设备约束和舒适度约束下做成本最小化的用能优化。运营商当然也可以完全不考虑楼宇反应直接压一个高价想多赚售电收益但楼宇会立刻削减外购电量、加大自身光伏和蓄热设备出力结果运营商的售电量反而大幅下降总收入可能更差。这就是“先动优势”和“前瞻最优”的直观含义。运营商的价值不在于拥有多强的定价权而在于能否准确预判楼宇对自己每个价格策略的反应曲线。把这个反应曲线代入到上层优化里最终得到的调度方案才是博弈均衡对应的方案也才是真正可以落地的方案。2.2 上层模型运营商的决策空间上层优化问题可以写成这样一类数学模型给定楼宇对价格的响应函数运营商在电功率平衡、热功率平衡、设备运行约束和价格上下限约束下决定各时段热电联供的发电出力和产热出力、从外部电网的购电量、蓄热罐的充放策略以及售电售热价格。目标函数通常包含两部分一部分是自己的运行成本包括外购电力成本、燃气消耗成本、设备运维成本另一部分是售能收益也就是向各楼宇售卖电和热得到的收入。如果项目还包含激励型需求响应还要减去支付给楼宇的激励补偿费用。整体呈现“成本最小化 收益最大化”的混合形式实际建模时习惯写成总运行成本最小化售能收益和激励费用都放进目标里统一处理。约束条件里最容易被忽略的是价格钳制。我记得第一次做这类模型时直接把电价设成连续决策变量结果求解器给出的最优电价几乎全部顶在上下限上非常极端。后来意识到这是因为没有给价格波动范围设定合理边界也没有约束相邻时段价格变化的平滑性。实际工程中售电价通常在基准目录电价上浮动一定比例比如上下20%到30%售热价的调整幅度更要保守一些因为热用户的舒适度耐受范围比电用户更敏感。如果不做价格钳制博弈问题在数学上会变得病态求出来的均衡没有实际价值。2.3 下层模型楼宇用户怎么做决策下层模型描述的是每一栋楼宇在给定电价和热价之后如何调整自身用能计划。决策变量包括各时段从电网购电的功率、从热网购热的热功率、楼宇内部分布式光伏和储能的充放电功率、暖通空调系统的运行功率、蓄热罐的蓄放热功率以及参与激励型需求响应的负荷削减量。目标函数是购能成本最小化加上一个舒适度偏离惩罚项。比如房间温度偏离用户设定温度越多惩罚越大。这个惩罚项非常重要如果没有它模型为了让成本最低会把室内温度一直压到舒适边界的最冷点用户必然投诉。把舒适偏差的二次项放进目标之后楼宇会自动在省钱和舒适之间做权衡这也更贴近真实用户的行为。约束方面每一栋楼要满足自身的电功率平衡和热功率平衡设备的功率上下限、储能的SOC动态方程、蓄热罐的容量限制、室内温度的动态方程以及可削减负荷的单日最大削减次数限制。这些约束叠加起来形成的是一个凸二次规划问题或者带有混合整数变量的优化问题。正因为它结构上比较规范后面才能用KKT条件把它等价转成上层问题的约束。2.4 均衡的存在性与最终调度策略在没有整数变量干扰、底层问题凸性较好的情况下斯坦克尔伯格均衡通常存在且可以通过求解一个被称为MPEC的数学规划问题得到。所谓MPEC全称是“带均衡约束的数学规划”宏观上看是把下层的KKT条件当作上层的约束等于把两层模型压缩成了一层。求解得到的结果就是运营商最优的前瞻策略与楼宇最优响应的组合也就是均衡点。实际计算中我们并不需要让每栋楼真的“跑一轮优化”来响应每一个试探价格。在集中式求解路径下是把所有楼的KKT条件同时放入一个大规模混合整数线性规划里交给求解器处理在分布式求解路径下则是通过交替迭代的方式让楼宇各自返回本地最优购能曲线运营商再更新价格信号反复逼近均衡点。这两种路径在第四部分细讲。最终输出的运行计划既包含运营商对热电联供机组的调度指令也包含电价热价曲线和激励型需求响应调用方案这就是一整份可以下发给现场执行的协同能量管理策略。3. 协同需求响应机制设计让楼宇“愿意动”3.1 价格型需求响应内生电价的生成与钳制价格型需求响应是楼宇群项目里应用最广的一类它的实现方式很简单运营商把一天分成若干个时段每个时段设定不同的售电价和售热价楼宇看到价格后自动调整用能行为。在主从博弈框架里电网的分时电价不再是外部给定的常数而是由上层模型内生生成的决策变量这是本项目和传统电价优化最大的区别。内生电价的好处在于它能够精准反映系统内部的供需关系和成本变化。比如楼宇群夜间热负荷高而电负荷低运营商为了鼓励电锅炉和蓄热罐在夜间蓄能可以把夜间售电价定得较低白天电负荷高电价自然升高楼宇就会主动削减非必要负荷。这个过程不需要运营商逐栋楼去下命令价格就是信号载体。但是价格设计必须非常谨慎。我见过一个失败案例运营商为了引导楼宇削减晚高峰负荷把19点到21点的电价直接抬高了150%结果楼宇确实削减了但把大量负荷平移到18点和21点之后形成了两个新的次高峰整体负荷曲线变得更差。这就是“负荷反弹”现象。后来项目组做了平滑约束限制相邻时段电价变化幅度同时要求楼宇侧模型里加入设备爬坡约束和启停次数限制次高峰才被压下去。价格信号的本质是引导不是惩罚信号太陡只会让用户行为产生过冲。3.2 激励型需求响应可中断负荷的补偿定价价格型DR和激励型DR并非互斥很多项目是同时使用的。激励型DR的逻辑更像签协议运营商会和部分楼宇提前约定在特定时段需要时楼宇愿意削减一定量的负荷运营商按削减量支付补偿。这样做的好处是削峰更有确定性不像价格型DR那样依赖用户的自发响应。建模的时候一般把可中断负荷设成0-1变量或者连续变量加最大削减量约束。0-1变量的语义是“这栋楼在这个时段到底响应了还是没有响应”连续变量描述“响应了多少千瓦”。补偿单价可以是固定值也可以是阶梯式的削减越多单价越高这样做是为了防止用户把本来就要削减的负荷拿来“薅羊毛”。这里有一个极其容易踩的坑可中断负荷调用次数和持续时间如果没有约束某些楼可能被连续多天调用室内温度跌出舒适范围用户会直接投诉甚至终止合同。后来我做的项目里所有激励型DR合同都加了硬约束每栋楼单日最多被调用两次、每次连续削减不超过两小时、相邻两次调用间隔至少三小时。这些约束看似增加了模型复杂度但换来的是用户愿意长期参与实际价值比多削那几百千瓦负荷大得多。3.3 热弹性与舒适度约束别把用户冻着楼宇群协同里“热”的部分往往比“电”的部分更微妙。电力负荷可以很快响应热负荷则带有很大的惯性和舒适度模糊性。室内温度允许在22到26度之间波动热负荷就具备天然的柔性热水箱的温度在一定范围内波动也完全可以接受。这种“热弹性”是楼宇群协同需求响应的重要资源。建模时室内温度通常用一阶等效热参数模型描述也就是用一个RC电路类比房间的蓄热特性和热阻特性。温度动态方程被写成线性差分形式后和舒适温度区间一起构成约束条件。蓄热罐则用SOC状态方程描述输入是充放热功率损耗系数代表罐体散热损失。这些模型本身不难难的是准确标定参数。如果房间等效热容取大了系统会以为温度变化很慢、可以长时间停供现场实测温度却大幅下降取小了又会把空调系统调度得过于保守削峰效果明显变差。在实际项目中我强烈建议花至少一到两周时间做现场参数辨识用温度传感器实测数据和机组运行数据反推RC参数而不是直接套用文献里的典型值。一次准确的参数辨识带来的调度收益提升往往比换一个更复杂的求解算法显著得多。4. 求解实现细节与工具链4.1 两层模型转一层KKT条件与MPEC主从博弈最经典的求解路径就是把下层问题用KKT条件替代从而把双层变成单层。具体做法是把下层优化问题的拉格朗日函数写出来对决策变量求偏导令其为零再加上互补松弛条件。如果下层问题是凸二次规划KKT条件就是最优性的充要条件替换是严格成立的。困难在于互补松弛条件是非线性的。比如拉格朗日乘子乘以松弛变量必须等于零这类条件没法直接交给线性求解器。工程上的处理方式是用大M法引入0-1变量把互补松弛条件线性化。大M的取值是个技术活M太小会把可行域砍掉M太大会让线性松弛问题数值病态。我的经验是M取该约束对应物理量的最大可能范围乘1.5到2倍而不是随手写一个很大的数这样求解器数值稳定性会好很多。转化完成后整个问题会变成一个混合整数线性规划MILP。对24时段、10栋楼的中等规模场景变量数通常在几千个的量级Gurobi或者CPLEX在几分钟内能稳定求解。如果楼宇数增加到几十栋集中式MPEC的规模就会比较可观这时候就需要考虑分布式路径。4.2 分布式迭代求解隐私保护和通信鲁棒性集中式求解的前提是运营商能拿到每栋楼的完整模型参数包括设备功率上限、舒适温度区间、储能SOC甚至用户偏好权重。这在学术仿真里没问题项目落地时却会遇到强烈的阻力楼宇物业往往不愿意把内部设备细节交给运营商这是很现实的隐私顾虑。分布式求解的思路就是让楼宇只和运营商交换“价格”和“响应曲线”而不交换模型本身。比较常用的是ADMM框架运营商发布一组价格信号每栋楼在本地求解自己的优化问题把购能曲线返回给上层运营商汇总所有响应曲线后根据系统功率平衡偏差更新价格信号然后进入下一轮迭代。这个过程重复几十次之后价格和负荷曲线会收敛到和集中式求解几乎一致的结果。ADMM相对集中式MPEC还有一个工程上的优势——容错性好。现场通信偶尔断几秒很常见如果用的是集中式求解一次通信失败可能导致整个MPEC求解失败而ADMM迭代中某栋楼某一轮没有返回数据时上层可以沿用上一轮的响应曲线继续迭代等到通信恢复后再修正系统不会直接崩溃。4.3 典型规模的求解耗时和工具选型参考做一个24时段的日内调度时间尺度选1小时模型规模中等偏小用Python加Pyomo建模、Gurobi求解是最顺手的方案。如果楼宇数量超过20栋、还要考虑15分钟粒度MILP的求解时间可能会突破十分钟接近在线调度的极限这时候考虑把时间粒度放宽到半小时或者把部分条件做聚合近似。也有团队喜欢用MATLAB加Yalmip这套组合在学术界非常流行调试KKT条件时能看到更清晰的表达式结构。但到了工业落地阶段Python生态对接SCADA、时序数据库和云平台更方便我自己的项目里基本都迁移到了Python。如果只是做离线仿真的模型验证用哪套工具都可以关键是别在工具选择上花太多时间建模思路和参数标定才是决定结果质量的核心。5. 常见问题与项目落地实录5.1 一张好用的排查速查表做这类项目一年多把最常见的几个问题按“问题描述、根本原因、解决办法”整理了一张表分享出来供参考。问题现象根本原因解决办法求解出的电价几乎全部顶在上下限价格钳制约束缺失或范围过大增加价格上下限和平滑性约束限幅20%-30%楼宇参与需求响应的积极性低于预期舒适度惩罚权重过高赔偿低调低舒适度惩罚系数提高激励型DR补偿单价博弈迭代结果震荡、难以收敛迭代步长偏大或者下层问题非凸调小ADMM惩罚参数增加阻尼项检查模型凸性热负荷削峰效果远低于仿真房间RC模型参数取了文献典型值用现场温度实测数据做参数辨识修正热容和热阻负荷被大范围平移到相邻时段形成次高峰价格信号变化幅度过大对相邻时段电价差增加约束限制负荷转移距离实时优化结果抖动剧烈负荷预测误差被模型放大增加低通滤波预处理或者采用鲁棒约束区间楼宇连续多日被调用激励型DR用户投诉可中断负荷调用次数无约束增加单日调用次数上限和最小间隔约束这张表基本上是每个项目都会遇到的通病。别看问题看着简单每一项背后都是真金白银的教训。5.2 一次现场试点的复盘集中式向分布式切换有一次在某个园区做试点园区里办公楼、酒店和研发楼一共8栋每栋楼都有自己的燃气内燃机热电联供机组和蓄热罐看起来条件非常理想。第一版方案用的是集中式MPEC在仿真环境里效果惊艳园区总运行成本下降超过18%削峰率也达到了预期。到了现场试运行问题立刻暴露两栋楼的物业不愿意提供内部详细的HVAC设备参数理由是涉及商业机密。集中式MPEC瞬间失去了求解基础。我们临时切换为ADMM分布式方案上层只发布价格信号和热力供应计划各楼在本地跑自己内部的优化程序只需要上传一个聚合的响应曲线问题就绕过去了。切换过程花了大约两周最后实际运行效果和集中式仿真结果差距不到3%。这次试点的复盘让我深刻体会到分布式博弈方案在真实世界的工程价值和学术价值是成正比的。它不光是数学上更优雅更重要的是在数据所有权边界、隐私保护和系统鲁棒性这几个实际工程痛点上有实质优势。5.3 从单栋到楼宇群建议的实施节奏最后聊一下落地节奏。我不建议一个园区上来就搞十几栋楼的全量协同工程风险太大出了问题很难定位。按我的经验比较稳妥的路径分五步走。第一步梳理每一栋楼的负荷特性和柔性资源清单摸清楚哪些楼具备参与需求响应的潜力写一份资源台账第二步做单栋楼的需求响应测试拉一条基线负荷曲线然后发一组试探性的价格信号观察这栋楼的实际响应能力和响应速度第三步选两栋相邻楼宇做小范围协同试点验证跨楼热电互补的实际效果第四步再引入主从博弈策略信号把价格生成和楼宇响应形成闭环第五步逐步扩展到整个楼宇群同时完善合同机制和结算机制。每步之间至少要留出一到两周的观察和调参时间。我看到过不少团队跳过前两步直接上大规模协同最后都是折在“模型算出来的计划现场执行不下去”这个问题上。能量管理系统的落地本质上是把人对设备、对用户行为的认知一点点固化到模型里这个过程急不得。这几年在这个方向上来回折腾我最大的体会是主从博弈的模型框架大家都能搭起来真正的差距在参数标定和机制设计上。一个准确的热容参数、一条合理的价格钳制约束对最终效果的影响往往比把求解算法从Gurobi换成CPLEX大得多。如果你正准备做类似的项目我的建议是先把真实电价曲线和用户舒适度阈值拿准把楼宇的实际可调能力测清楚再去谈博弈算法的事。模型是骨架数据和机制才是血肉。