广域储能容量优化配置:K-means场景聚类与MILP分层求解实践
2026/9/18 7:16:50 网站建设 项目流程

简介:面向风光综合消纳的电力系统广域储能容量优化配置研究,是一份电力系统储能规划方向的学术论文PDF,内容聚焦大规模风电、光伏接入场景下的广域储能选址定容问题,适合电力系统规划、新能源消纳、储能技术方向的科研人员和工程技术人员阅读参考。论文采用K-means聚类方法从风电、光伏出力与负荷的时序数据中抽取典型日场景,以年弃风成本、弃光成本与储能等效年投资成本三者之和最小为优化目标,构建混合整数线性规划模型,并结合智能优化算法求解;同时以宁夏电网实际运行数据验证模型合理性,对电网储能规划与风光消纳提升具有直接借鉴意义。整个资源仅含1个PDF文件,大小约1.46MB,内容涵盖引言、模型构建、算例验证与结论等完整章节,目前已有115人学习/下载,适合作为储能优化配置领域课题研究的参考范文或建模基础。

1. 广域储能优化为什么必须走“场景聚类 + 分层求解”这条路

针对含大规模风光接入的电力系统,弃风、弃光已经不单是调度问题,更是规划问题。储能放在哪些节点、配多大功率和容量,直接决定新能源消纳率和投资回报,这就是广域储能容量优化配置要回答的核心问题。可如果直接对着全年 8760 小时的风光负荷时序数据做混合整数规划,变量规模会迅速膨胀,普通服务器几小时都解不动。这篇研究的思路是:先用 K-means 聚类把全年运行方式压缩成少数典型日场景,再把电网按行政区域分解成多个分区滚动优化,最终把储能投资最小化和风光消纳最大化统一进一个目标函数。适合做电网规划、储能项目前期研究的人参考,也适合刚接触储能选址定容的工程师看清模型边界。

2. K-means 时序场景聚类:从 8760 小时到典型日场景集

2.1 为什么典型日场景集要同时包含风、光、负荷三通道

储能配置不能只看平均出力,而要看风电、光伏和负荷在时序上的错配程度。深夜风电大发而负荷处于低谷,光伏午间出力高峰又常落在负荷爬坡之前,这些反调峰特性才是弃风弃光的直接来源。如果只对风电出力聚类、对负荷取平均,会抹掉峰谷错位,储能容量算出来必然偏小。所以这里采用多维时序样本:每日以 15 分钟为一个采样点,得到 96 点数据,每组样本同时包含负荷序列、风电出力序列和光伏出力序列,三通道作为一个整体参与聚类。这样得到的典型日场景集保留了风、光、负荷之间的时段耦合关系,后续优化模型在场景上的约束才有实际意义。

2.2 改进 K-means 聚类与 CH 指标定 k

经典 K-means 需要预先指定聚类数 k,而 k 直接决定场景集的信息保留程度。k 太小,场景差异被平滑掉,储能容量失去代表性;k 太大,典型场景数量多,混合整数线性规划模型规模成倍增加。研究里采用 CH(Calinski-Harabasz)指标作为聚类有效性判据:CH 值越大说明类内紧凑、类间分离,当 CH 值随 k 增大出现峰值后回落,峰值位置就是合理取值。中卫地区在 k=3 时 CH 指标最大,因此全年 365 个样本被压缩成 3 个典型场景。

改进 K-means 通常指对初始聚类中心做优化,避免随机初始化导致局部最优。常见做法是先用 k-means++ 选定初始质心,再执行标准迭代;也有用多次随机重启取 CH 指标最优的做法。对电力时序数据,我会先做 z-score 归一化,否则风电出力范围远大于负荷或光伏时,距离度量会被量纲最大的通道主导。

提示:固定随机种子再跑聚类。同一份数据如果每次聚类结果漂移,后面 MILP 的储能容量可能差几十兆瓦。

2.3 MATLAB 中的聚类实现与参数说明

在 MATLAB R2017b 平台上,标准 K-means 可以直接调用,但需要把三通道数据改造成二维样本矩阵:每一行是一个样本日,列数为 96 乘以 3。代码如下:

% 样本构建:wind、pv、load均为365x96矩阵 X = [wind, pv, load]; % 365行,288列:三通道时序拼接 [Xn, mu, sigma] = zscore(X); % 各列标准化,消除量纲差异 % 评估k=2到8的CH指标 eva = evalclusters(Xn, 'kmeans', 'CalinskiHarabasz', ... 'KList', 2:8, 'Distance', 'sqeuclidean'); k_opt = eva.OptimalK; % 取CH指标最大值对应的k % 用最优k做正式聚类,20次重复避免局部最优 rng(2020); [cluster_idx, centroid, sumd] = kmeans(Xn, k_opt, ... 'Distance', 'sqeuclidean', 'Replicates', 20, ... 'MaxIter', 300, 'Display', 'iter');

代码逻辑说明:X把风、光、负荷三个通道横向拼接,每个样本日的 96 个点按顺序排成 288 维向量,这样聚类时能够保留时段先后关系,而不是把三通道单独聚类。zscore按列标准化,避免风电功率数值范围压制负荷和光伏通道。evalclusters计算 CH 指标,Replicates设为 20 表示随机初始化 20 次、取组内误差最小的结果,这对改善局部最优很关键。Distance用平方欧氏距离,符合 K-means 默认假设。聚类完成后,cluster_idx给出每个样本日归属的典型场景编号,centroid就是典型场景的风光负荷曲线,除以musigma恢复原始量纲后即可送入优化模型。

实际工程里,每日采样点、样本日数、聚类数 k、归一化方式这几个参数应当写在规划程序的配置头文件里,方便复现和调整。k 的搜索范围不应超过 10,因为典型场景过多会直接拖垮后续 MILP 求解,这也是“以计算效率换精度”的典型取舍。

3. 混合整数线性规划模型:目标函数与约束的完整拆解

3.1 目标函数:弃风弃光成本与储能等效年投资成本之和最小

整个优化模型的核心是把经济性和消纳水平统一到一个目标函数里,而不是分别算两本账。目标函数包含三项:储能等效年投资成本、年弃风成本、年弃光成本。储能投资并非一次性支出,而是通过资金回收系数折算到每年,相当于把设备采购、安装、运维按贴现率分摊到寿命期内的每一年,这样才能和当年弃风弃光成本放在同一个时间维度上比较。资金回收系数的本质是等额年金换算,贴现率越高,每年分摊越重。

用公式表示就是:f = f_ess + f_wind + f_pv。其中,储能年投资成本是资金回收系数乘以节点 k 上固定安装成本和可变功率成本之和;弃风弃光成本则是对所有典型场景、所有电站、所有时段的弃电量求和,乘以对应电价。注意场景要乘上该场景包含的样本数 days,因为不同场景出现概率不同,经济成本是全年尺度。

下表给出模型主要符号的含义,方便对照推导:

符号含义类型
x_ess,k节点 k 是否配置储能的 0-1 决策变量整数
P_ess,k节点 k 配置的储能功率(MW)连续
E_ess,k节点 k 配置的储能容量(MWh)连续
P_wind,t,s场景 s 时段 t 风电实际出力连续
P_pv,t,s场景 s 时段 t 光伏实际出力连续
P_gen,t,s火电机组出力连续
θ_i,t,s节点电压相角连续
c_wind, c_pv单位弃风、弃光电价常数

从这里能看出,x_ess,k 是“装不装”的选址变量,P_ess,k 和 E_ess,k 是“装多大”的定容变量,三者在约束中相互绑定。求解结果既给储能位置,又给每个位置的功率和容量,这才算完整的广域储能容量优化配置输出。

3.2 关键约束群:功率平衡、储能充放电、旋转备用

等式约束里最重要的是节点功率平衡:线路注入功率加上火电、风电、光伏出力,减去储能充电功率,等于负荷。这里储能充电作为负荷项处理,放电则通过 P_ess 的正负号约定来表达。直流潮流方程把线路有功与两端相角差用电纳关联起来,平衡节点相角取 0,这是全模型的基础。

不等式约束里,储能约束最需要仔细处理。储能运行时,充电和放电都受额定功率限制,所以 P_ess,k,t,s 被限制在 [-P_ess,k, P_ess,k] 区间,负值表示充电,正值表示放电。额定功率本身又受上下限约束,且只有安装了储能的节点(x_ess,k=1)才有非零功率,这是通过大 M 法或乘积形式实现的。存储能量 E_ess,k,t,s 有上下界,首末时段能量要相等或用递推式衔接,避免储能“一天结束后还剩不少能量”这种不物理的状态出现在模型边界。

旋转备用约束容易被忽略,但它决定多装储能是否挤占系统调峰能力。系统要求火电最大出力加风电出力减储能充电功率后,仍要大于等于负荷加备用需求。这条约束保证了低谷时段储能充电不会把系统备用吃掉,实际调试时经常因为这条约束导致储能配置功率上不去,需要对备用需求 R_t,s 按场景比例放宽。

3.3 决策变量与 GUROBI 求解流程

这个模型是典型的混合整数线性规划,求解器可以直接处理。研究里在 MATLAB 中调用 GUROBI,用 intlinprog 或 gurobi 接口都行,关键是组织好矩阵形式。GUROBI 处理 0-1 变量采用分支定界加割平面,对含几百个整数变量的储能选址问题是可接受的。在 MATLAB 中的调用框架大致如下:

% model为结构体,包含目标系数、约束矩阵、变量类型定义 model.A = sparse([A_balance; A_line; A_ess; A_reserve]); % 各约束矩阵纵向拼接 model.obj = [cost_inv; cost_wind; cost_pv]; % 目标函数系数,与变量顺序一致 model.rhs = [rhs_balance; rhs_line; rhs_ess; rhs_reserve]; model.sense = [repmat('=', n_balance, 1); repmat('<', n_line, 1); ... repmat('<', n_ess, 1); repmat('<', n_reserve, 1)]; model.vtype = vtype_list; % 储能位置变量为'B',其余为'C' model.lb = lb; model.ub = ub; params.outputflag = 1; % 输出求解日志 params.mipgap = 0.01; % 1%最优性间隙,工程上足够 result = gurobi(model, params);

参数说明:model.A是稀疏矩阵,每一行对应一条约束,变量排序必须全局统一,否则约束会对错列。model.obj与变量顺序完全对应,顺序错位会导致储能容量配到错误节点。model.vtype中 0-1 变量用'B',连续变量用'C',这个声明比任何其他设置都重要。mipgap设为 0.01 可以显著缩短求解时间,实际电网规划中追求 1% 以内的相对间隙已经满足工程精度,不必强求整数最优解。求解完成后,result.x按变量顺序给出储能选址和功率,再从日志里提取 objective 值和 gap 值,判断是否需要调整模型或放宽约束。

4. 多区域分解协调:广域储能配置如何从整网模型落地

4.1 为什么整网直接求解不现实,要按行政区域分区

宁夏电网覆盖 6 个地市,主网涵盖 750 kV、330 kV、220 kV 三个电压等级,新能源装机突破 1.8 万 MW。如果所有节点、线路、机组和候选储能站址放进一个 MILP,整数变量和连续变量数量成倍增加,而且输电约束和机组爬坡约束在时间序列上强耦合,分支定界树会迅速膨胀。分解的思路是拆成 N 个子问题,各分区独立优化,再用边界条件协调。

按行政区域划分的另一个好处是工程可解释性。储能规划最终要落到变电站和土地资源,按地市分区后,各分区内部网架结构相对清晰,新能源场站可以按地区合并统计,避免对单个风电场逐台建模。相比按电气距离或社团结构分区,按行政区域划分不会因网架改造而失效,电网公司也容易接收入库。

4.2 多区域迭代求解流程与边界节点处理

分区后,每个分区与原网架有联络线。论文中的做法是把线路 ij 的边界节点 j 同时划归两个区域,区域 1 计算时把节点 j 的电压相角作为常数,这样区域 1 的潮流约束就闭合了;区域 2 同理,在自身计算时把区域 1 给的边界相角固定住。两轮之间用松弛迭代不断更新,直到边界条件不再变化。

具体滚动优化流程是:先做全网基态潮流计算,得到初始边界条件;然后按分区编号逐区优化,第 i 分区优化时,已优化分区(1 到 i-1)的边界节点取上次优化结果,尚未优化的分区(i+1 到 N)取基态潮流或上次结果;每一轮扫描完所有分区后,检查每个分区目标函数相对上次变化的绝对值是否小于给定精度,若不满足则继续下一轮,满足则输出全网配置结果。这个“单区域优化—区域间滚动—广域优化结果”的模式,本质上是一种 Gauss-Seidel 型分解算法。

MATLAB 中可以用 while 循环实现,伪代码如下:

% 初始化:基态潮流结果作为边界相角初值 theta_boundary = base_theta; delta = inf; max_round = 20; round = 0; while delta > precision && round < max_round round = round + 1; obj_prev = obj_total; % 按分区编号顺序优化 for i = 1:N % 构造分区i的子模型:固定边界相角为theta_boundary sub_model = build_sub_model(i, theta_boundary); result_i = gurobi(sub_model, params); % 更新分区i的边界节点相角 theta_boundary = update_boundary(theta_boundary, result_i, i); end % 计算所有分区目标函数之和 obj_total = sum_region_objective(); % 收敛判据:目标函数变化量小于阈值 delta = abs(obj_total - obj_prev); end

这里需要说明两点。第一,build_sub_model构建的只是该分区的约束矩阵,边界节点的相角作为常数项移到等式右边;第二,update_boundary只更新与当前分区相连的联络线边界节点,不要全量覆盖。收敛精度我一般取目标函数相对变化量小于 1e-4,太严会导致迭代次数过多且没有实际意义。整个流程的计算瓶颈是反复调用 GUROBI 时的模型重建开销,可以在循环外预分配变量索引,避免每次都重新查矩阵维度。

4.3 分区粒度选择的边界约束

分区不是越细越好。分区过多,边界节点数量大,迭代协调次数增加,收敛可能变慢;分区太少,每个子问题规模仍然很大。对省级电网,按地市级行政区划成 6 到 10 个区是比较常见的做法。另外,每个分区内的新能源和常规电源配比要相对均衡,如果某分区几乎全是风电场而没有负荷支撑,储能配置结果会显著偏高,影响全局最优性。遇到这种情况,可以把该分区与相邻负荷中心合并处理,而不是机械按行政区切。

5. 宁夏电网算例:从成本敏感性到配置结果的验证

5.1 典型场景概率与成本系数拐点

中卫地区最佳聚类数为 3,三个典型场景概率分别为 0.368、0.421、0.211,三者和为 1,说明全年 365 天都被完整覆盖。这些概率作为场景权重进入目标函数,对应公式中的天数参数。储能成本系数 γ_ess 从 1.0 往下调时,弃风弃光成本曲线在 0.7 附近出现明显拐点:大于 0.7 时储能配置总功率很低,小于 0.7 时总功率迅速上升,弃风弃光成本显著下降。这说明储能单位成本是决定配置规模的触发条件,规划时应按成本上下浮动 30% 给出方案区间。

5.2 广域配置结果与关键经济指标

成本系数 0.7 对应的配置结果分散在宁夏电网各分区:福祥 300 MW、步桥 280 MW、月牙湖 300 MW、平吉堡 300 MW、枣园 260 MW、中卫 340 MW、宁安 300 MW、启明 400 MW、固原 300 MW。选址不是集中在某一新能源富集区,而是呈广域分散布局,这正是广域储能与场站侧储能的区别:前者通过全网调峰改善消纳,后者只能就地平滑波动。

安装地点配置容量/MW安装地点配置容量/MW
福祥300中卫340
步桥280宁安300
月牙湖300启明400
平吉堡300固原300
枣园260--

配套经济性指标:储能成本 27.8 亿元,年减少弃风弃光成本 2.68 亿元,弃风率 12.25%,弃光率 7.83%。计算投资回收期时,不能简单用 27.8 除以 2.68,因为减少弃风弃光只是收益的一部分,还要考虑储能参与调峰、备用等辅助服务收益,以及循环寿命衰减带来的置换成本。

5.3 一个验证技巧:用时序回代检查潮流越限

拿到储能配置结果后,把配置参数带回基态潮流,对三种典型场景各 96 个时段做时序回代计算。重点检查储能充电时段是否引起线路反向过载,放电时段是否让关键断面潮流越限。如果配置前后线路潮流变化不大,说明储能功率偏小,约束没有充分起作用;如果某个边界节点电压相角连续两轮优化结果相差超过 0.01 弧度,说明分区收敛精度设置过严,可以放宽到 0.05 弧度。这个闭环验证,正是把广域储能优化配置从理论模型落成可交付规划方案的关键一步。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询