基于粒子群算法的夏季综合能源系统冷电联调优化调度

发布时间:2026/9/30 8:33:26
基于粒子群算法的夏季综合能源系统冷电联调优化调度
1. 夏季的冷负荷和电负荷为什么不能当两个独立问题处理每年六到九月很多做园区综合能源管理的朋友都会遇到同一个现象电网的峰时电价还没到办公楼和工厂的空调负荷就已经把配电容量顶到了上限等到光伏满发的时候冷负荷反而可能已经过了午高峰。你要是不管这茬只按电负荷去优化机组出力要么冷量不够靠电制冷机硬扛扛出一个极高的电费账单要么冷量过剩吸收式制冷机组白烧天然气余热回收系统形同虚设。这个问题的根子在于综合能源系统里的冷负荷和电负荷不是两条平行线它们通过燃气轮机的余热、电制冷机和吸收式制冷机的出力分配、蓄冷罐的充放策略紧密耦合在一起。传统的以电定冷策略思路是先满足电负荷再用余热去补冷这样的逻辑在冬季供暖季勉强能跑因为热负荷和电负荷的同步性相对较好。但到了夏季冷负荷峰值通常出现在午后到傍晚和光伏出力峰值的错位经常达到两到三个小时和电价峰值的对齐又非常微妙如果再叠加峰谷电价差整个调度问题就变成了一个多变量、强耦合的非线性优化问题。这正是优化调度算法发挥价值的地方。粒子群优化算法在这一类问题里特别合适它不像线性规划那样要求目标函数和约束条件必须线性化也不像动态规划那样对状态空间维度极其敏感。你可以在目标函数里直接放非线性效率曲线在约束条件里直接写复杂的设备运行区间只要能把问题表达成一组决策变量一个适应度函数粒子群算法就能在一些合理的时间内给出一组工程上可用的调度方案。所以这篇文章的核心是围绕一套夏季综合能源系统的优化调度模型展开的读者主要是在做园区能源调度、微电网运行控制或者相关课题研究的人。我会把建模过程、PSO编码细节、冷电联调策略、仿真对比结果以及实际调试中踩过的坑都拆开讲争取让拿到这套思路的人能直接照着落地。2. 从物理设备到数学表达夏季综合能源系统建模的完整拆解粒子群优化算法本身不关心你在优化什么它只负责在决策空间里搜索使适应度函数最小的粒子位置。所以建模这一步才是整个调度问题的灵魂。建模做得粗糙后面算法再精致也白搭建模做得过细粒子维度爆炸迭代半天收敛不了。下面我按设备逐台拆解。2.1 燃气轮机与余热回收环节燃气轮机是综合能源系统的主力发电设备也是冷热电三联供的核心源头。它的燃料输入功率记为 (P_{gas}(t))以天然气低热值折算。发电效率 (\eta_e) 通常取 0.3 到 0.4发电输出就是[ P_{GT}(t) \eta_e \cdot P_{gas}(t) ]这里有个容易忽略的点燃气轮机的余热。燃气轮机做功之后的烟气里还有大量热能余热回收系数 (\eta_{recover}) 一般在 0.4 到 0.5 之间回收到的热功率可以写成[ Q_{recover}(t) (1 - \eta_e) \cdot \eta_{recover} \cdot P_{gas}(t) ]这部分热量有两个去向直接供给吸收式制冷机或者进入余热锅炉转成蒸汽。在夏季调度里热负荷几乎不需要考虑余热主要就是用来制冷。所以余热的分配变量 (u_{AC}(t)) 控制着有多少热量进了吸收式制冷机。如果系统里有蓄热罐或者蓄冷罐余热还可以通过蓄冷间接存储起来避开冷负荷低谷期的浪费。2.2 吸收式制冷机与电制冷机夏季冷负荷由三路供应吸收式制冷机、电制冷机、蓄冷罐释放。吸收式制冷机消耗的是热功率制冷性能系数 (COP_{AC}) 一般在 1.2 到 1.5 之间输出冷功率为[ C_{AC}(t) COP_{AC} \cdot Q_{in,AC}(t) ]电制冷机就是我们常说的离心式冷水机组或螺杆机组消耗电功率名义 COP 通常在 3.5 到 5.5 之间[ C_{EC}(t) COP_{EC} \cdot P_{EC}(t) ]看到这组对比你会立刻意识到一件事吸收式制冷机的 COP 只有 1 出头电制冷机的 COP 动辄 4 以上。单纯从热力学效率上讲电制冷机远优于吸收式制冷机。那为什么还要用吸收式因为输入能量品位的差异——吸收式用的是燃气轮机的余热属于搭便车的废热利用电制冷机用的则是高品位电能。所以判断吸收式制冷机值不值得启动不能只看 COP要看它的热源是否来自余热。如果吸收式制冷机需要额外烧锅炉产生蒸汽来驱动那多半就不划算了。2.3 储能电池与蓄冷罐储能电池的模型大家都熟关键是荷电状态SOC的递推[ SOC(t1) SOC(t) \eta_{ch} \cdot P_{ES,ch}(t) - \frac{P_{ES,dis}(t)}{\eta_{dis}} ]充放电功率有上限约束SOC 有上下限约束调度周期结束时的 SOC 一般需要回到初始值这叫日周期循环约束。这个约束在实际优化中特别容易踩坑后面我会专门讲。蓄冷罐的模型和电池类似区别在于它的充电是用冷量完成的。谷价时段用电制冷机产冰或产冷水蓄存峰价时段放冷。蓄冷罐的状态转移可以写成[ SOC_{cold}(t1) SOC_{cold}(t) \eta_{c,ch} \cdot C_{TS,ch}(t) - \frac{C_{TS,dis}(t)}{\eta_{c,dis}} ]蓄冷罐的价值在于把电制冷机的制冷时间点挪到电价便宜的时段。这相当于把电-冷的能量时移在峰谷电价差足够大的场景下蓄冷罐的经济性非常可观。2.4 能量平衡约束有了设备模型接下来就是把它们用能量平衡约束串起来。电功率平衡约束[ P_{GT}(t) P_{PV}(t) P_{grid,buy}(t) P_{ES,dis}(t) P_{load}(t) P_{EC}(t) P_{ES,ch}(t) P_{grid,sell}(t) ]冷功率平衡约束[ C_{AC}(t) C_{EC}(t) C_{TS,dis}(t) C_{load}(t) C_{TS,ch}(t) ]这两个等式是硬约束。在粒子群算法的框架下等式约束不能像线性规划那样交给单纯形法处理必须通过罚函数方式引入适应度函数或者采用决策变量降维的办法在迭代过程中自动满足平衡约束——这是我强烈推荐的做法因为罚函数调的不好结果很容易出现看起来适应度很低实际能量不平衡的假象。3. 冷能电能联调的目标函数设计成本账怎么算才公平夏季调度策略的目标函数既要算电力的经济账也要算天然气的消耗账还要算设备启停、寿命损耗和碳排放的隐性成本。这一节我讲清楚目标函数的每一项构成以及为什么冷电联调的目标函数不能简单把两边成本相加。3.1 运行成本函数的完整表达式以典型园区为例目标函数可以写成[ F \sum_{t1}^{T} \left[ C_{buy}(t) \cdot P_{grid,buy}(t) - C_{sell}(t) \cdot P_{grid,sell}(t) C_{gas} \cdot \frac{P_{gas}(t)}{LHV} \right] ]三项分别是购电费用、售电收益和燃气成本。燃气成本中的 (LHV) 是天然气低热值在 9.7 kWh/m³ 左右。如果要纳入碳排放约束可以在目标函数后面叠加一个碳税项[ F_{carbon} C_{CO2} \cdot \left( \lambda_{grid} \cdot P_{grid,buy}(t) \lambda_{gas} \cdot P_{gas}(t) \right) ]这里的电网侧碳排放因子 (\lambda_{grid}) 取决于当地电网的清洁能源比例燃气侧 (\lambda_{gas}) 则基于天然气燃烧的固定排放系数。3.2 峰谷电价机制下的时间维度分时电价是调度优化的核心驱动力。我见过很多初做调度的朋友习惯把目标函数只写成总体电量费用却忽略了分时电价的阶梯形态。以我常用的某地夏季电价为例峰时10:00-15:00、18:00-21:00约 1.0 元/kWh平时约 0.6 元/kWh谷时23:00-07:00约 0.3 元/kWh。在这样的价差结构下调度策略的核心目标就变成了让电气设备尽量在谷时消耗电能让储能和蓄冷在峰时释放让燃气轮机在电价峰时段多发电以替代高价购电。有意思的是这个目标和单纯的碳减排目标存在冲突。燃气轮机多发电意味着多烧天然气即使抵消了电网购电碳排放因子对比下来也不一定更低碳。所以在做多目标优化的时候我的建议是先算经济效益再在满足一定碳排放约束的前提下做经济最优不要一上来就把两个目标加权成一个那样很难给决策者一个清晰的解释。3.3 冷负荷响应与蓄冷的边际收益到了夏季冷负荷曲线的形态波动很大。工业园区的冷负荷集中在上午九点到下午五点酒店和商业综合体则会在傍晚到深夜保持较高的冷负荷。蓄冷罐的边际收益计算方式是[ \Delta R_{cold} \sum_t P_{EC,shift}(t) \cdot (C_{buy,peak} - C_{buy,valley}) \cdot COP_{EC} ]其中 (P_{EC,shift}(t)) 是通过蓄冷从峰时挪到谷时的电制冷功率。举个例子如果一台电制冷机 COP 为 4峰谷电价差为 0.7 元/kWh那么每度电在谷时制冷并移到峰时使用能省下约 0.7 元的电费成本扣掉蓄冷罐的损耗系数后大约 0.55 元。蓄冷罐的投资如果在两三个夏季能回收这个方案就值得推进。3.4 冷负荷与电负荷的时间错位如何影响目标函数夏季典型日的挑战在于冷负荷的晚高峰19:00-21:00往往和电负荷晚高峰重叠而这个时段恰好没有光伏出力。冷电联调的最优策略通常是把蓄冷罐的放冷安排在这个时段让电制冷机少开甚至不开省下的电用来满足照明、动力等刚性电负荷还可以把燃气轮机的发电推到晚高峰以替代高价购电。所以冷电联调的目标函数不是一个简单的加法电气侧的成本降低可能会被制冷侧的成本增加抵消反之亦然。唯一的出路是让优化算法同时调节制冷设备的出力分配和储能设备的充放时序这恰恰是粒子群算法的强项。4. PSO 落地调度问题的工程细节编码方式、参数标定与收敛技巧粒子群优化算法从鸟群觅食行为抽象出来的灵感最早可以追溯到 1995 年 Kennedy 和 Eberhart 的工作。在综合能源调度这个应用场景里它变成了一把很趁手的工具但工具的用法有不少门道。我自己从被早熟收敛折磨到稳定输出调度方案中间经历了不少调试下面把这些经验梳理出来。4.1 粒子编码直接编码还是降维编码假设调度周期是 24 小时时间分辨率取 1 小时可控设备有燃气轮机出力、电制冷机功率、储能电池充放电功率、蓄冷罐充放冷功率每个设备每个时段就是一个变量算下来 4 个设备乘以 24 个小时等于 96 维。再加上一些开关状态量粒子维度超过 100 维这种情况下标准 PSO 的收敛速度会非常慢而且容易陷入局部最优。我在工程实践中更推荐降维编码。思路是利用能量平衡约束把部分设备的出力写成其他变量的函数。例如把燃气轮机出力 (P_{GT}(t))、电制冷机功率 (P_{EC}(t))、储能电池充放电功率作为决策变量蓄冷罐的充放冷功率可以采用规则式推导或者只把每天的蓄冷罐放冷总量作为决策变量再按时段权重分配到具体的放冷时段。这样粒子维度一下子从近百维降到 40 到 50 维收敛速度表现完全不同。另一种实用的编码方式是逐时段序列编码。把每个时段的燃气轮机出力作为一个基因位但不要求每个粒子都满足爬坡约束而是在适应度计算时通过罚函数或修复机制处理。这种方法在实际运行中效果也不错关键在于约束处理的力度要到位。4.2 参数标定惯性权重、学习因子与种群规模的取舍标准 PSO 的核心更新公式相信大家都很熟悉[ v_{i}(k1) w \cdot v_{i}(k) c_1 r_1 (pbest_i - x_i) c_2 r_2 (gbest - x_i) ][ x_i(k1) x_i(k) v_i(k1) ]惯性权重 (w) 控制着粒子的飞行惯性。(w) 太大粒子飞过头全局搜索充分但收敛慢(w) 太小粒子迅速被吸引到当前最优附近容易陷入局部最优。我的经验是采用线性递减策略从 0.95 线性降到 0.4前 40% 迭代偏重全局搜索后 60% 偏重局部精细搜索。学习因子 (c_1) 和 (c_2) 分别控制向个体最优和全局最优学习的强度。经典取值是 (c_1 c_2 2)但在多变量耦合的调度问题里我建议适当增大 (c_1)、减小 (c_2)比如取 (c_1 2.0,\ c_2 1.5)。这样做的好处是让粒子不要过早被全局最优吸附保持种群多样性。种群规模设置与决策变量维度直接相关一般取 3 到 5 倍维度数。50 维左右的决策变量建议种群数在 150 到 250 之间。再增大种群规模对解的质量提升趋于饱和反而拖慢单次迭代速度。4.3 约束处理罚函数系数怎么定才不翻车调度模型里的约束条件包括功率平衡等式约束、设备出力上下限、SOC 上下限、爬坡速率约束、日循环约束等。其中等式约束的罚函数处理是 PSO 落地最容易翻车的地方。罚函数的基本形式是[ F_{penalty} \lambda \cdot \sum_t \left( |\Delta P_{balance}(t)| |\Delta C_{balance}(t)| \right) ]关键在于 (\lambda) 的取值。如果 (\lambda) 太小粒子会找到能量不平衡的漏洞让适应度很低但实际物理上根本跑不了如果 (\lambda) 太大罚函数项会把目标函数的量纲完全淹没算法对经济性的敏感性下降调度方案会变成只管满足约束不管省不省钱。我的做法是动态罚函数在迭代初期把 (\lambda) 设在 1e3 到 1e4随着迭代次数增大逐步提高到 1e6 以上。这样前期允许粒子在宽松约束下探索可行域后期强制收敛到可行解。同时对等式约束采用修复罚函数双保险每代迭代之后手动修正粒子中蓄冷罐 SOC 的初末一致性效果比单纯靠罚函数好得多。4.4 收敛判据与局部最优陷阱收敛判据不能只看适应度值的变化量。在多峰问题上适应度曲线平缓并不代表找到了全局最优很可能整个种群都挤在了一个局部极小值附近。我的经验做法是同时监控两个指标适应度方差和个体最优解的方差。如果种群适应度方差掉到 1e-6 以下而个体最优解分布范围还很大说明粒子已经丧失了探索能力需要考虑重启机制或引入变异算子。引入高斯变异是一种有效的防早熟手段。对每个粒子每代以 0.01 到 0.05 的概率对某一维决策变量施加一个小幅扰动。这个扰动幅度设为该变量可行域的 2% 到 5% 比较合适太小没作用太大又破坏了收敛性。5. 一个典型夏季日的仿真验证三种策略的经济性对比这一节我给出一个实际仿真算例数据做了脱敏处理但逻辑和量级是有代表性的。场景是一个中等规模的商业综合能源园区包含一台 800 kW 的燃气轮机、600 kW 吸收式制冷机、900 kW 电制冷机、200 kW/400 kWh 的储能电池以及容量为 800 kWh 的蓄冷罐。光伏装机 700 kW。5.1 基础数据与夏季典型日负荷夏季典型日的电负荷峰值约为 1200 kW冷负荷峰值约为 1100 kW。光伏出力从早八点开始上升中午十二点到下午两点达到 700 kW 的峰值下午四点后快速衰减。分时电价采用前面提到的峰平谷三段式天然气价格按 2.5 元/m³ 折算。这个日负荷曲线的特征很有代表性电负荷的高峰在下午两点到六点冷负荷的高峰在上午十一点到下午三点以及晚上七点到九点的双峰结构。正是这种错位给优化调度留出了很大的操作空间。5.2 三种调度策略的定义策略 A传统以电定冷零蓄冷。燃气轮机全力跟电负荷剩余电负荷由电网购电补足冷负荷优先用余热吸收式制冷不足部分由电制冷机补足。策略 B以冷定电固定比例分配。根据冷负荷大小提前确定吸收式制冷和电制冷各承担的比例燃气轮机按热电比匹配出力。策略 C本文的 PSO 优化调度冷电联调蓄冷罐和储能电池同时参与日循环优化。5.3 优化结果对比策略日运行成本万元碳排放与策略 A 相比蓄冷罐利用率购电峰值kW策略 A4.78基准01100策略 B4.36-6.2%0950策略 C3.75-14.8%87%620策略 C 的日运行成本比策略 A 降低了约 21.5%。成本下降的主要来源有三个一是蓄冷罐把大约 300 kWh 的制冷负荷从峰时挪到谷时执行二是储能电池在电价峰值时放电降低购电峰值三是燃气轮机在晚高峰时段全力发电减少了高价购电比例。PSO 算法在迭代到第 120 代左右时适应度曲线基本趋于平稳种群规模取 200粒子维度 48总计算时间在普通 i5 处理器上约 90 秒。对于日前调度这种以小时为颗粒度的场景这个计算速度已经完全够用了。5.4 关键时段的调度结果解读看几个典型时刻能发现这套方案的调度逻辑。凌晨 2 点到 5 点谷价时段电制冷机满功率运行一边直接供冷一边给蓄冷罐充冷燃气轮机处于低负荷运行状态仅用于维持基本的热电平衡。上午 10 点到 12 点电价进入峰段电制冷机降载蓄冷罐开始放冷吸收式制冷机跟随燃气轮机的余热量出力。下午 14 点到 16 点光伏出力充足燃气轮机降低出力储能电池开始充电为晚高峰做准备。晚上 19 点到 21 点电价高峰期储能放电、蓄冷放冷、燃气轮机满发购电功率被压到全天最低水平。这套时序逻辑之所以能得到是因为 PSO 在搜索过程中同时权衡了分时电价、设备效率曲线和负荷约束你要是只靠人工经验和手算很难在一个日循环里同时安排好这四类设备的时序。6. 现场调试中必须绕开的六个坑模型跑通了、仿真结果也很漂亮但真正落地到实际项目或者做工程部署的时候会遇到一堆仿真环境里根本不会暴露的问题。下面这些坑是我在不同项目里用真金白银换回来的教训。6.1 粒子维度高导致的维数灾难第一个坑在前面已经埋了伏笔变量全展开粒子维度上百PSO 基本转不动。我在一个项目里曾经做过 120 维的完整编码调试了一周收敛后的方案仍然处于一种半可行状态——能量平衡误差大约在 5% 左右看起来不大但实际调度时根本没法执行。解决办法有两个方向。第一是前面提到的降维编码把耦合变量用平衡方程推导出来第二是分时段优化把 24 小时的调度拆成四个 6 小时的子问题每个子问题保留前一子问题的末尾状态作为初始条件。后一种方案的缺点是全局最优性会打折扣但考虑到滚动调度的实际需求分段优化的策略在工程上往往更能接受。6.2 罚函数系数不匹配导致的假最优罚函数系数的问题前面讲理论时提过这里给个具体案例。某次调试中我把等式约束的罚函数系数统一设成 1e5目标函数量纲是万元级。结果算法找到了一组解蓄冷罐全天没有充放冷储能电池也不用全靠电网购电。这组解当然满足功率平衡但经济性一塌糊涂——原因就是罚函数项把约束满足的权重拉得太高算法根本不关心经济成本了。后续改为动态罚函数后问题立即解决。在迭代的前 20 代罚函数系数从 1e2 线性增长到 1e6粒子在前期有机会探索经济性更优但约束略有违反的区域后期再被迫修正到可行域。这个技巧对等式约束多的综合能源系统几乎是必需的。6.3 惯性权重固定导致的早熟收敛固定惯性权重 (w0.7) 能跑通多数标准测试函数但面对夏季冷电联调这种多峰问题固定权重很容易让种群在 30 代内就聚集到一个局部最优附近。我实测过自适应惯性权重的效果按适应度排序动态调整权重适应度高的粒子保持低权重适应度低的粒子保持高权重效果比线性递减权重还好一点。但要注意一个问题自适应权重会减慢收敛速度。如果调度系统的实时性要求高比如滚动调度每 15 分钟要求重新计算一次还是建议用线性递减权重并配好最大迭代次数保证在有限时间内完成搜索。6.4 初始解偏离可行域导致搜索效率低下PSO 的初始种群通常是均匀随机生成。在综合能源调度问题里随机初始种群的大部分粒子会落在不可行域中——比如充放电功率同时为正、蓄冷罐进出同时存在。这些粒子的适应度主要受罚函数主导彼此之间差异很小导致早期迭代的种群多样性虚高但没有有效探索方向。工程上有效的办法是用上一次调度方案的结果作为本次优化的初始解之一其余粒子在初始解附近做高斯扰动。这个方法在滚动调度中特别管用因为相邻调度时刻的最优解本身就具有较强的连续性相当于给算法提供了一个很好的启动点。6.5 SOC 初末一致性约束被忽略导致次优解储能电池和蓄冷罐的日循环约束要求调度周期结束时的 SOC 回到调度开始时的水平。很多初做调度的朋友把这个约束放进罚函数就完事了结果算出来的方案会透支储能设备——把白天存储的能量全用完调度周期末 SOC 掉到下限以下第二天根本没能量可用。我的处理方式是在每代粒子更新后进行等式修复把末尾 SOC 与初始 SOC 的差值按充放变量同比例修正回来。这相当于在约束层面做了硬性修复比罚函数更干净。在代码实现里其实就是修改粒子向量中储能设备对应的若干维度的值计算开销几乎为零。6.6 计量数据质量对调度输入的干扰最后一个坑不在算法内部而在数据采集端。实际园区里冷负荷和电负荷的计量数据并不是理想采样点电能计量设备在变频设备大量运行的时候会引入谐波分量导致计量偏差。别小看这个偏差如果用来做日前调度的负荷预测数据本身就偏了 3% 到 5%优化结果再漂亮实际执行时也会出现能量不平衡。所以在部署优化调度系统时我会同时关注计量侧的精度。对变频空调、水泵、风机这类非线性负载密集的节点建议选用具备谐波测量功能的电能计量芯片保证采集到的功率数据能够真实反映基波分量下的负荷水平。一个数据精度达标的采集系统给优化调度带来的收益远远大于把算法迭代次数从 100 加到 500。7. 实际项目中我对这套系统的进一步思考这套基于粒子群优化算法的夏季综合能源调度策略在多个仿真和试点项目中验证下来整体效果是相当可观的。成本降低的主要来源不是某个设备效率的突飞猛进而是把时间维度上的能量转移做到了位——蓄冷罐在谷时蓄能、储能电池在峰时放电、燃气轮机在电价峰值时段最大化利用这些手段单独拿出来都不是新东西但放在一个统一优化的框架里去协调运行收益却远远大于各个手段单独使用的叠加。我个人在实际项目操作中的一个体会是不要迷信算法的新颖性PSO 本身已经有三十年历史了但它面对综合能源调度这类复杂非线性问题的适配度依然非常高。与其追求更花哨的改进算法不如先把建模的精度、约束的完整性和数据的质量做扎实。很多项目所谓的算法效果不好归根结底是模型和数据的锅算法只是背锅侠。最后分享一个小技巧在 PSO 的主循环里加上一个解修复模块——每次迭代后检查粒子是否违反了设备爬坡约束如果违反就把该维度的出力值线性拉回上一时刻出力允许的范围附近。这个操作看起来只是让算法守规矩但实际上能显著提高搜索到可行域的效率因为粒子不会在不可行的爬坡路径上浪费时间。就这么一个简单的处理往往能让收敛时间缩短一半以上。