去年帮一家综合能源公司做园区源网荷储规划,第一次技术讨论时,甲方拿出来的方案还是老路子:三个微网,每个微网独立配一套储能。当时我扫了一眼设备清单,第一反应就是浪费——三套储能系统,电池房、消防、并网改造各来一遍,投资翻倍不说,实际利用率大概率连40%都到不了。后来我们把思路改成“一座储能电站,以服务模式对接冷热电三个微网”,配合燃气轮机、溴化锂机组和热泵做冷热电三联供,整个规划问题就变成了典型的双层优化配置。这个项目从建模到求解,断断续续折腾了三个多月,今天把完整思路和实操细节摊开来说,希望能给做储能规划、综合能源系统设计的朋友一点参考,不管是刚入行的工程师,还是已经在跑优化模型的研究生,都能从这里找到可以直接抄作业的东西。
1. 项目整体设计思路:从“各建各的”到“共享服务”
1.1 为什么要用储能电站服务多个微网
先看一个现实问题:单个微网的储能利用率为什么上不去?因为大部分微网的负荷曲线都自带“潮汐”特征——工业微网白天冲高,商业微网早晚双峰,居民微网晚间峰值突出。如果你给每个微网单独配储能,它的充放电节奏只能跟着自己的负荷走,峰谷价差套利空间有限,而且备用容量也无法互相借用。
换成共享储能电站后,情况完全不同。三个微网的负荷曲线在时间上天然错峰。工业微网的用电高峰在白天生产时段,商业微网在午后到傍晚达到峰值,居民微网的晚高峰正好接上。三个负荷叠加起来,储能电站可以在一套物理装置上完成“错峰调配”:白天给工业微网放电,傍晚给商业微网放电,夜间给居民微网充电蓄能,再配合燃气轮机余热供给冷热负荷。等效满循环次数可以直接翻倍,单位电量的储能服务成本明显下降。
这就引出了第一个关键设计选择:储能电站服务模式下的多微网,本质上不是物理联网,而是服务连接。各微网仍然保持独立调度、独立结算,只是通过储能电站的中介作用实现间接的能量互济和时间搬移。这个设定带来的好处是工程落地简单,不涉及跨微网的电力交易和复杂的网架改造,同时把储能电站的容量利用率拉满。
1.2 冷热电耦合是优化配置的隐形主线
很多做储能配置的人只盯着电负荷,这是最容易踩的坑。冷热电多微网系统里,储能电站不仅仅是存电,它实际上参与到整个电、热、冷三种能量流的协调里。
典型场景是这样的:燃气轮机(或者燃气内燃机)发电时产生的余热,冬季可以直接用于采暖,夏季则通过溴化锂吸收式制冷机组转换为冷量。发电的同时“免费”得到热/冷,这是冷热电联供系统经济性的核心。但问题也出在这里:如果只优化储电容量,而忽略热/冷负荷的时序匹配,那么夏季制冷需求很大的时候,燃气轮机可能为了追冷负荷被迫多发多余的电;冬季采暖需求大的时候,又可能因为热负荷限制发电功率,导致储能不能按最优策略充电。
另外,电锅炉、热泵、电制冷机这些设备的存在,让电、热、冷之间多了一道转换的桥梁。储能电站低谷时充电,如果同时用热泵制热、用蓄热电锅炉储热,相当于变相把电能“储存”成了热能,这时候储能电站的容量配置就必须考虑热泵和电锅炉的耦合关系。我在模型里引入了一个“广义储能”的视角:储电、蓄热、蓄冷在成本函数上分开计算,但运行约束全部耦合,这样配置出来的储能电站容量才不会出现冬季够用、夏季闲置的尴尬。
1.3 双层优化为什么是这个问题的自然框架
储能电站容量配多大、微网里燃气轮机和热泵建多少台,这是规划层的问题;设备投运之后每个小时怎么出电、怎么充放、怎么切换冷热源,这是运行层的问题。两层决策的时间尺度和目标都不一样,但互相咬合:配置规模决定运行的边界,运行结果的好坏又直接决定配置方案的经济性。
这就是典型的Stackelberg博弈结构,也是双层优化配置最自然的应用场景。上层先做投资决策,确定储能电站的额定容量、额定功率、各微网冷热电联供设备的装机容量;下层在给定的设备配置下,模拟每一个典型场景的最优日前调度,返回年运行成本。上下层之间通过储能容量约束、功率平衡约束和费用结算关系耦合,形成一个完整的闭环。
如果用单层模型一口气把投资变量和小时级运行变量同时优化,模型规模会爆炸,而且投资决策和运行决策在数学性质上差异太大(投资是整数变量,运行是连续变量+0/1启停变量),求解稳定性很难保证。拆成双层后,上层用智能算法处理不连续、非线性的投资组合问题,下层用成熟优化求解器处理线性规划/混合整数线性规划,分工明确,效率和可解释性都能兼顾。
2. 双层优化数学模型:变量、目标与关键约束
2.1 上层配置层的目标与决策变量
上层模型解决“建什么、建多大”的问题。决策变量包括:
- 储能电站的额定容量和额定功率;
- 微网内燃气轮机的台数与单机容量;
- 热泵、电锅炉、电制冷机、溴化锂吸收式制冷机的装机容量;
- 如果涉及蓄热罐、蓄冷罐,还要增加储热/储冷容量变量。
目标函数不能只盯着初始投资。一次投资要用十几年,运行维护费用每年都在发生,两个时间尺度不一致,必须换算成等年值再相加。我把年综合成本定义为:
年综合成本 = 等年值投资成本 + 年运行维护成本 + 年购电购气成本 + 年碳惩罚成本等年值投资成本就是把储能电池、PCS、燃气轮机这些设备的初始投资乘以资金回收系数,折算到每一年。这里有个容易忽略的细节:储能电池的寿命通常比PCS短,到期可能要更换电池,所以投资成本要按更换周期分别计算等年值,不能所有设备一视同仁。
上层还需要考虑储能电站的收益模式。在共享服务框架下,储能电站作为独立运营方或园区公共资产,要通过服务费回收投资。我采用的是容量租赁费+电量服务费的组合计价方式:微网按申报的占用电量付费,再根据最大占用功率分摊一部分固定成本。这个价格参数放在上层模型中,服务费收入直接抵消一部分年综合成本,否则储能电站的投资回报会被严重低估。
2.2 下层运行层的目标与约束
下层模型模拟每一个典型日/典型场景下,各微网的运行调度。
目标函数是各微网的年运行成本最小,具体包括:向电网购电费用、购气费用、设备启停费用、向储能电站购买充放电服务的费用,以及碳排放成本。储能电站本身在下层里扮演一个“能量中转站”角色:它根据各微网的净负荷申报情况,确定每个时段的总充放电功率,并向各微网分摊充放电服务。
电平衡约束可以用一个式子概括:
P_load + P_电制冷 + P_电锅炉 + P_储能充电 = P_燃气轮机 + P_电网购电 + P_储能放电每个微网单独满足电平衡,但多微网之间通过储能电站的总功率约束间接耦合。
热平衡和冷平衡是冷热电系统建模的重点,也是最容易出错的地方。热平衡需要考虑燃气轮机余热回收、燃气锅炉补燃、热泵制热、蓄热罐充放热,还要考虑热网传输损耗。我采用的热损耗简化模型是把损耗折算成热负荷的5%-8%,固定比例而不是时变模型,这样既不会过分扭曲结果,又保持了线性特性。
冷平衡同理:电制冷机和溴化锂吸收式制冷机共同满足冷负荷。夏季工况以“电制冷+吸收式制冷”双路供应,冬季工况则没有冷负荷,系统切换到“余热供暖+热泵”模式。这里需要特别留意:冷负荷是季节性的,如果用全年8760小时直接建模,冬季冷负荷全是0,会导致吸收式制冷机的容量配置结果失真。解决办法是先按季节聚类典型日,再在全年目标函数里加权汇总。
储能电站共享约束是下层模型的核心特色。多个微网同时向储能电站申报充放电需求时,必须满足:
各微网充电功率之和 + 各微网放电功率之和 ≤ 储能电站额定功率 各时段累计电量满足储能电站SOC等式和上下限约束更要命的是,储能电站在同一时刻不能既充电又放电——虽然这个约束看起来简单,但放到多微网共享场景里就变成了一个逻辑约束,需要引入0/1变量来处理。我在模型里的做法是:用一个二进制变量表示储能电站的整体充放状态,所有微网的净充放功率方向必须一致。这个约束也是后期求解时数值稳定性差的主要来源之一。
2.3 上下层之间怎么耦合
双层模型的耦合点比普通数学模型要隐晦很多。储能电站的额定容量E在SOC约束里直接限制下层调度,额定功率P在共享功率约束里限制下层申报;而下层的发电计划、购电计划、服务费支出反过来决定年运行成本,传递给上层进行方案评估。
还有一个隐性耦合:微网内冷热电联产机组的容量虽然在上层决策,但机组是否采取“以热定电”还是“以电定热”的运行策略,却取决于下层优化结果。比如燃气轮机容量如果配得太小,冬季热负荷大时只能靠燃气锅炉补燃;如果配得太大,夏季可能出现大量余热无处可用而被浪费。下层的热量/电量平衡关系会自动反映这种矛盾,上层根据反馈的运行成本再调整机组容量。这个循环往复的过程,就是双层优化的价值所在。
3. 求解路线:KKT转换与启发式外循环的实际组合
3.1 三种主流解法怎么选
双层优化问题在数学上不是直接丢给求解器就能算出来的,必须先选好解法路径。我试过三种主流路线,简单对比一下。
第一种,把下层问题用KKT条件替换,转化为单层MPEC(带均衡约束的数学规划),再对互补松弛条件做线性化处理,最后交给Gurobi/CPLEX求解MILP。这种方法理论上精确,但我实际用下来最大的问题是模型规模膨胀太快。下层每个时段、每个设备都要写一组KKT条件,三个微网加一个储能电站,全年典型日的模型规模直接到几十万行约束,big-M取值稍有不慎就数值病态,求解器跑几十个小时不出稳定解是常事。
第二种,上层用遗传算法(NSGA-II或改进版),下层用Gurobi/CPLEX精确求解,两层嵌套迭代。这个方法工程上最成熟,逻辑也最好跟业主解释:外层提出一个设备配置方案,内层模拟运行,看看这个方案一年能花多少钱;外层再根据成本反馈生成新方案。缺点是计算量大,每代种群几十个个体,每个个体要解几个典型日的优化,跑完300代可能要两三天。这个缺点完全可以通过并行计算和场景压缩来缓解。
第三种,完全线性化近似,把运行层的启停变量松弛成连续变量,用一次大线性规划同时求投资和运行。这个方法跑得飞快,但结果太过乐观,会因为松弛掉启停成本而高估燃气轮机的经济性,不适合做最终决策,只能用来给第二种方法提供初始种群。
我最终选择的是“改进NSGA-II+精确求解器”组合,配合场景聚类大幅压缩运算量。如果你手头没有商业求解器,用开源的SCIP或者HiGHS也能跑,但MILP求解速度会打折扣,建议至少保证下层是线性或混合整数线性规划,不要搞非线性。
3.2 场景聚类:把8760小时压缩成年代表日
下层运行优化如果把8760小时全部跑一遍,计算量不可接受,而且相邻时段高度相似的信息对配置结果贡献不大。我习惯先用K-means对全年负荷、辐照、温度数据做场景聚类。
聚类特征量除了电负荷外,一定要把热负荷和冷负荷的特征同时放进去。很多参考案例只聚类电负荷,导致热空调负荷峰值天丢失,优化出来的燃气轮机容量明显偏小。我把聚类的特征向量设计成“电负荷+热负荷+冷负荷+室外温度”四维,聚类成四个典型场景,每个场景带权重。冬季、夏季、春秋过渡季各一个代表日,再加一个极端峰值场景(比如极端寒潮天),防止配置结果在峰值工况下“翻车”。
3.3 求解流程伪代码
整个双层求解流程用伪代码写出来大概是这样的:
初始化:读入典型场景数据,生成上层初始种群(储能容量/功率,CHP机组容量,热泵容量等) for gen = 1:maxGen for individual in 种群: for s in 典型场景: 构建下层模型(给定设备容量,设置SOC约束和共享储能逻辑约束) 调用Gurobi求解各微网运行成本C_s 汇总: 年运行成本 = Σ weight_s * C_s 计算个体适应度 = 等年值投资成本 + 年运行成本 - 储能服务收入 更新NSGA-II种群(选择、交叉、变异) 记录Pareto前沿 输出:最优配置方案及对应年运行成本这个流程里有一个被很多人忽略的细节:下层求解器返回的最优目标值直接传回上层,但有些场景下下层MILP可能存在多解,即相同目标值对应的调度方案不同,这会让上层的适应度评估产生微小抖动。我没去强求数学上的最优性,而是在适应度函数里加了一个平稳化处理——同一个配置方案在连续两代里的运行成本如果差异小于0.5%,就取平均值作为该方案的评价。这样做虽然损失一点理论严谨性,但换来的是遗传算法能够稳定收敛,工程上完全够用。
4. 实例设计:参数、结果与收益评估
4.1 案例系统设定
我用一个简化但完整的案例来演示整个模型怎么落地。园区内设三个独立微网:
| 微网类型 | 负荷特征 | 冷负荷形态 | 热负荷形态 |
|---|---|---|---|
| 工业微网A | 白天高负荷,峰谷差大,连续生产 | 夏季少量工艺冷却 | 冬季采暖+全年工艺蒸汽需求稳定 |
| 商业微网B | 10:00-21:00用电集中,夜间低谷 | 夏季制冷需求旺盛 | 冬季采暖需求较轻 |
| 居民微网C | 晚高峰突出,夜间用电明显 | 夏季傍晚制冷需求明显 | 冬季夜间采暖需求大 |
三个微网的冷热电负荷曲线错峰特征非常明显。储能电站规划建设在三个微网的电气交汇点附近,PCS容量和电池容量都是待优化变量。微网内的可选设备包括燃气轮机和余热锅炉(联供单元)、燃气锅炉、电锅炉、热泵、电制冷机、溴化锂吸收式制冷机。储能服务费采用两部制:容量费按最大占用功率分摊,电量费按实际充放电量计费。
4.2 优化结果对比
通过双层优化配置模型求解后,我做了三组方案对比:
| 指标 | 方案一:各微网独立配储能 | 方案二:共享储能+各自分产 | 方案三:共享储能+冷热电联供 |
|---|---|---|---|
| 储能总装机容量(MWh) | 32 | 21 | 18 |
| 储能总装机功率(MW) | 9 | 7.5 | 6.5 |
| 年综合成本(万元) | 1890 | 1520 | 1210 |
| 储能等效满循环次数(次/年) | 约120 | 约210 | 约230 |
| 可再生能源消纳率 | 82% | 91% | 94% |
对比结果其实反映了一个非常关键的道理:共享储能+冷热电联供不是简单的“设备叠加”,而是通过共享储能提升了存储资源的利用效率,又通过冷热电联供把燃气轮机的余热价值“挤”了出来。方案三比方案一的年综合成本降低了约36%,其中一半来自储能共享带来的投资省和利用率提升,另一半来自冷热电联供替代了原本的单纯购电和燃气锅炉供热。
4.3 收益来源深度拆解
很多同行拿到结果后只看到总成本降低,说不清钱到底省在哪里。我拆解了三条主要收益路径:
第一,储能投资省了接近一半。三个微网独立配置的总容量是32MWh,共享模式下18MWh就够,因为三个微网的峰荷在时间上错开,不需要同时支撑三套峰值。储能电站的最大同时率只有约56%,也就是说同一时刻需要的最大输出功率远小于三个微网峰值功率之和。
第二,冷热电联供的余热利用率达到81%。燃气轮机发电的同时回收余热用于采暖、制冷和工艺蒸汽,这些热量如果单独用燃气锅炉生产,燃气成本要高出约30%。下层优化会自动判断什么时候发电、什么时候供热、什么时候制冷,实现“以热定电”和“以电定热”的柔性切换,而不是机械地执行某一种固定策略。
第三,储能电站利用率的提升带来了边际成本的摊薄。等效满循环次数从120次提升到230次,意味着同样的电池资产,每年周转电量多了近一倍,固定投资在每度电里的分摊成本自然大幅下降。这也是共享储能商业模式的底层逻辑。
5. 常见问题与实操排查技巧实录
5.1 双层迭代不收敛或适应度震荡
这是我被问得最多的问题。现象是上层遗传算法的适应度曲线像锯齿一样上下跳,甚至最后几代还在大幅波动,根本没法判断收敛。
原因通常是下层运行优化在给定配置下出现了多解,或者配置变化后下层最优解发生跳变。解决思路有几个方向:一是增加场景压缩的稳定性,确保每个典型日都能代表足够多的同质时段;二是对适应度做窗口平滑,用最近两代或三代的最优值做滑动平均;三是检查下层模型是否存在约束冗余导致的数值退化,比如共享储能0/1变量在部分场景下约束冗余,可以手动区分季节工况分别求解,冬季不加制冷约束,夏季不加采暖约束,缩小问题规模的同时降低了多解概率。
5.2 求解器数值病态,big-M不会选
下层KKT或MILP模型里要把逻辑约束线性化,不可避免地要用big-M法。M取值过大会导致求解器数值病态,出现负零、约束松弛失效;M取值过小又可能砍掉可行域内的有效解。
我的经验是:不要直接用1e6这种拍脑袋的数。根据系统最大功率确定数量级,比如所有微网总购电功率上限是10MW,共享储能充电状态这个0/1变量对应的M取20左右就足够,再乘一个1.5的安全系数。每类逻辑约束单独计算M值,不要全局共用一个大M,这样能显著提高求解稳定性。
5.3 冷热负荷季节性导致模型“变硬”
冷热电系统最大的麻烦是冬夏工况切换。如果你不分季节地建立一个统一模型,溴化锂机组在冬季的制冷量约束、电锅炉在夏季的制热约束、蓄冷罐在非制冷季的状态——大量约束实际上无效但依然参与计算,导致二进制变量数目虚高,求解时间暴增。
我的处理办法是:先做季节判定,冬季场景直接去掉制冷设备变量,夏季场景直接去掉采暖设备变量(或保留但限制为零),过渡期单独建模。这样每个典型日是一个小的线性规划或混合整数线性规划,下层求解速度能快一到两个数量级。更重要的是,结果中不会出现冬季吸收式制冷机容量为正、夏季蓄热罐容量为正这种脱离工程实际的荒谬配置。
5.4 储能寿命约束缺失导致配置结果虚大
如果你在模型里只管SOC不约束循环次数,优化器会倾向于让储能电站满充满放,用最大循环深度换收益,得出一个容量偏大、功率偏大的配置,实际运行中电池寿命根本撑不到项目的经济使用年限。
我在储能电站的电池寿命建模里加了一个简单的退化成本项:每次充电/放电循环产生的等效折旧费用,用循环次数-放电深度(DoD)关系曲线线性化。这样下层调度会在“多循环赚服务费”和“少循环保寿命”之间自动权衡,配置出来的容量才更接近真实最优。
5.5 热网损耗不可忽略,冷能不可远送
最后提醒一个工程常识:电可以跨微网共享,热网只能覆盖小范围,冷能基本上只能在楼宇内部或极短距离传输。我在多微网模型里没有设置微网之间的冷网互联,热网共享也限制在储能电站附近一小段供热母管内,其他热负荷依靠每个微网内部平衡。很多人建模时把所有能量流都理想化成“可输运”,结果优化出需要跨园区铺设供热管道、冷媒管道的大型配置方案,在工程上不仅建设成本极高,管道损耗也会让实际运行效果大打折扣。建模边界一定要贴近物理现实,双层优化配置才不会“纸上漂亮、落地翻车”。
我在这个项目里的体会是,双层优化的价值不在于数学形式有多严谨,而在于它强迫你把投资决策和运行调度放在同一个框架里反复博弈,最终得到的不是一个拍脑门的容量数字,而是一整套“建了之后怎么用、用了之后值不值”的逻辑闭环。如果你也在做类似的储能配置项目,我建议不要一开始就追求全变量全约束的大规模模型,先用两三个典型场景把核心逻辑跑通,再逐步加入冷热耦合、寿命约束、共享服务这些细节。多层模型一旦建立起来,后面的参数敏感性分析、场景扩展都会顺很多。