☰
基于改进灵敏度分析的IEEE33配电网智能软开关选址定容优化
2026/9/26 21:30:48 网站建设 项目流程

光伏一多,有源配电网的规划就绕不开一个新问题:智能软开关(SOP)到底该装在哪、装多大。SOP不是传统意义的开关,而是两个背靠背换流器组成的柔性设备,装到IEEE33节点这种经典配网算例上,配合改进灵敏度分析,能在Matlab里做一整套选址定容优化。这篇文章就围绕这个主题,把我从灵敏度筛选到配置求值的完整过程整理出来,包括建模、代码结构和几个特别容易踩的坑。如果你是做配电网规划的研究生,或者刚开始接触SOP优化的工程师,这份东西应该能帮你少走很多弯路。

传统配电网里的联络开关只有开和合两个状态,合上之后环流、短路容量、保护配合都很麻烦。SOP等于把一个只能“选边站”的开关,变成了可以连续调节有功潮流和无功电压的柔性接口,两条馈线之间的功率可以双向平滑流动,两端还能各自补偿无功。听起来很理想,但这类电力电子设备价格不低,装多了浪费,装少了效果不够,所以必须认真做优化配置。我选择IEEE33节点系统作为测试床,一方面这个系统参数公开、规模适中,另一方面它自带5条联络开关支路,和SOP的应用场景天然契合。下面进入正题。

1. 为什么传统灵敏度不够用:“改进”要从这里说起

1.1 灵敏度分析在配电网规划里的常规用法

配电网规划里,灵敏度分析是很经典的一种启发式选址手段。思路很简单:把网损或者电压偏差看成节点注入功率的函数,算出某个节点注入单位有功或无功时目标变化了多少,然后认为变化率最大的地方就是最值得安装设备的候选位置。比如传统无功补偿规划,经常用无功-电压灵敏度,也就是dV/dQ,在哪一点对电压影响最大,就把电容器装在哪。计算时一般以基准潮流为运行点,用潮流雅可比矩阵的逆矩阵得到灵敏度矩阵,速度快、物理含义明确。

这种思路在单点、静态、输电网思维下是很好用的。很多电力系统分析教材里都有标准程序,用来做无功补偿点选择、电容选址、在线电压控制等。但是,把它直接搬到有源配电网的SOP配置问题上,问题就来了。我自己的体会是,按单点灵敏度排序选出来的位置,经常和完整优化算出来的最优位置对不上,尤其是当分布式电源接入比例提高之后,偏差会更大。所以才需要“改进”。

1.2 有源配电网让单点线性灵敏度失效

为什么传统灵敏度在有源配电网里不好使?这个问题要从配电网本身的电气特性说起。

第一,配电网是强非线性系统,R/X比输电网高很多,电压和有功强耦合,不能简单套用输电网里“P-Q解耦”的思路。基准运行点附近的线性化只在小的扰动范围内成立,而DG出力波动和SOP调节都会让运行点大幅偏移。你用0.01MW的小扰动算出的灵敏度,可能根本代表不了实际容量变化时的响应。

第二,DG接入后不同馈线之间的负载率差异会很大。有些节点在轻载时看起来“不敏感”,但到了重载时段或者DG大发时段,它反而成了系统最薄弱的点。只用一个静态断面算灵敏度,相当于用一张照片判断一个人健不健康,漏掉太多动态信息。IEEE33节点里不同联络支路连接的两侧馈线,负载特性差异明显,单断面的灵敏度排序在不同运行方式下可能完全反过来。

第三,传统灵敏度通常是单一指标,要么只看电压,要么只看网损。但SOP引入后会同时改变有功潮流分布和无功分布,对系统的作用是综合性的。如果只看电压灵敏度,可能会选到调节电压效果好但对降网损没什么帮助的位置;如果只看网损灵敏度,又可能忽略掉电压瓶颈。单指标在这种多目标设备选址问题里,天然存在盲区。

1.3 本文采用的多场景加权综合灵敏度

所以“改进”可以从三个方向入手:一是把单断面扩展成多场景,用不同DG出力、不同负荷水平下的灵敏度均值来代替单点;二是把电压灵敏度和网损灵敏度融合成一个综合指标,避免单指标偏科;三是根据SOP的调节能力做归一化和加权,让灵敏度排序真正对应SOP配置的效益。

具体实现上,我先把典型的运行场景列出来,比如DG出力为0%、50%、100%,负荷为峰、平、谷,排列组合成若干场景;然后对每个场景做基准潮流,用节点注入功率的小扰动重算潮流,得到节点电压灵敏度矩阵和系统网损灵敏度向量;最后做无纲量化,用加权系数合成每个节点的综合灵敏度。公式层面并不复杂,核心代码也不长,但实际计算里有很多细节需要注意,后面专门讲。

这里我想强调一下“启发式筛选”的定位。改进灵敏度分析的价值,不是直接给出最终配置方案,而是帮你快速压缩候选空间。如果IEEE33节点所有支路都当成候选,组合枚举量很大,但经过灵敏度排序后,只需要对排名靠前的少数位置做精细优化,整体计算效率能提高一个量级。这在实际工程里也有意义:现场需要勘察的线路位置数量会大大减少。

2. IEEE33节点算例建模:原始数据、DG接入与SOP端口处理

2.1 为什么选IEEE33节点,以及它自带的关键信息

IEEE33节点系统是配电网规划里最常用的公开算例之一,一个典型的10kV辐射状网络,33个节点、37条支路,基准电压12.66kV,总负荷大约3.715MW、2.3Mvar。最关键的是它自带5条联络支路:8-21、9-15、12-22、18-33、25-29,这些支路正常运行时处于断开状态,一旦闭合就能把不同馈线连接成环网。对于SOP配置来说,这5条联络线几乎是天然的候选位置,因为SOP要替换的正是传统联络开关。

我在设计算例时并没有直接把5个联络开关全部装上SOP,而是先把5个联络开关加上几条重要分段支路放进候选池,再通过改进灵敏度排序决定真正值得装的位置。这样能体现灵敏度筛选的作用,避免只做容量优化而位置完全靠枚举。如果你只是想验证SOP模型,直接固定5条联络开关做容量优化也能跑通,但那样体现不出“改进灵敏度分析”的价值。

2.2 数据准备与DG接入方式

在Matlab里,我习惯用两个矩阵或者两个表格存储算例:一个是节点参数矩阵,记录节点编号、节点类型、有功负荷、无功负荷;另一个是支路参数矩阵,记录支路首端、末端、电阻、电抗。IEEE33的原始数据在网上很容易找到,比较常见的格式是:

% bus: [编号 类型 有功负荷/kW 无功负荷/kvar] % 1号节点是平衡节点,负荷为0 bus = [ 1 0 0 0 2 1 100 60 3 1 90 40 4 1 120 80 ... 33 1 60 40 ]; % branch: [首端 末端 电阻/Ohm 电抗/Ohm] branch = [ 1 2 0.0922 0.0470 2 3 0.4930 0.2511 3 4 0.3660 0.1864 ... 8 21 2.0 2.0 9 15 2.0 2.0 12 22 2.0 2.0 18 33 0.5 0.5 25 29 0.5 0.5 ];

这里要注意单位。很多版本给的是有名值电阻电抗,单位是欧姆,不需要转标幺值也行,不过自编潮流时最好统一下基准功率和基准电压。我习惯用1000kW为功率基准、12.66kV为电压基准,把有名值转成标幺值再计算,避免数值量级差异影响收敛性。

DG接入方面,我在节点18、22、25分别接了一点光伏,装机容量大约在0.3到0.5MW之间,具体容量按研究场景调整。处理方式上最简单的是当成PQ节点,也就是给一个恒定的负负荷;如果想考察无功支撑能力,也可以建模成PV节点,让无功在上下限内自动调节。我的体会是,如果只是做配置研究,用PQ恒功率模型就够了,但一定要把DG出力的多个水平放进场景里,否则灵敏度排序的稳定性没法保证。

有一个细节很容易忽略:节点负荷在牛拉法潮流里的符号方向。标准的牛拉法潮流里,负荷节点的注入功率是负值,DG接入后的净功率等于DG出力减去负荷功率。我在第一次搭算例时正负号搞反过一次,结果DG容量越大网损越大,怎么都不对。排查了半天,发现是净注入功率的符号处理错了。这个坑后面专门提。

2.3 SOP模型与它在潮流中的接口

SOP的电气模型可以理解成两个电压源换流器背靠背连接:一端接节点i,另一端接节点j,直流侧共用。正常工作时,有功功率可以从i侧传到j侧,也可以反向,两端无功功率各自独立调节,但两端的视在功率都不能超过SOP容量。约束可以写成:

P_i_sop + P_j_sop + P_loss_sop = 0 Q_i_sop 在 [-Q_max, Q_max] 内 Q_j_sop 在 [-Q_max, Q_max] 内 sqrt(P_i_sop^2 + Q_i_sop^2) <= S_sop sqrt(P_j_sop^2 + Q_j_sop^2) <= S_sop

其中P_loss_sop是SOP自身的损耗,通常按传输功率的1%到3%估算。如果忽略损耗,两端有功直接相等,模型更简单;考虑损耗时,优化目标里会多一项运行费用,但不算复杂。实际规划研究里,损耗系数取2%是比较常见的做法。

在潮流计算里,SOP两端节点可以简化成两个PQ节点,把SOP注入的有功和无功作为节点的注入功率处理。潮流方程不需要专门扩展,只是注入功率多了一个由优化变量决定的分量。这种处理方式简单直接,我比较喜欢。但要注意,整个优化需要在潮流迭代和SOP控制量之间反复迭代。我是在目标函数里直接调用潮流函数,潮流收敛后返回网损和电压信息,再把SOP容量约束作为非线性约束交给优化器。这样做逻辑清晰,也便于排查问题。

3. 改进灵敏度计算的完整流程:从候选节点到安装位置的筛选

3.1 灵敏度计算路径选择:重复潮流还是解析法

计算灵敏度有两条路。一条是根据潮流雅可比矩阵解析求逆,速度快,但推导麻烦,而且系统里含有DG节点后,如果遇到PV节点,矩阵分块要小心处理。另一条是重复潮流法:在某个节点上加一个小扰动,重新算一次潮流,用两次潮流结果的差分近似灵敏度。

IEEE33节点规模很小,就算把几十个场景全部跑一遍重复潮流,时间也完全可以接受,所以我用了重复潮流法。这样做的好处是代码直观、不容易出错,坏处是扰动步长要选好。扰动太小会出现数值噪声,扰动太大又会让线性化误差变大。我一般取该节点基准注入有功的1%,多次试验下来,对IEEE33来说0.01MW的扰动比较稳。如果你用的是标幺值潮流,取0.01标幺值也行。

3.2 关键代码实现

下面是一段灵敏度计算的框架代码,我用的是自编的Newton-Raphson潮流函数,函数名是runNR,返回节点电压幅值V、系统网损Ploss等结果。

function [dV_dP, dPloss_dP] = calcSensitivity(bus, branch, dP, nb) % 基准潮流 res0 = runNR(bus, branch); V0 = res0.V; Ploss0 = res0.Ploss; dV_dP = zeros(nb, nb); dPloss_dP = zeros(nb, 1); for k = 1:nb bus_tmp = bus; % 注意:这里在节点k的有功负荷上增加 dP % 如果为正,表示负荷增加;DG出力增加相当于把 dP 取负值 bus_tmp(k, 3) = bus_tmp(k, 3) + dP; res1 = runNR(bus_tmp, branch); dV_dP(:, k) = (res1.V - V0) / dP; dPloss_dP(k) = (res1.Ploss - Ploss0) / dP; end end

这段代码对每个节点都重跑一次潮流,计算量是nb次潮流计算,对33节点来说完全没问题。实际场景循环中,我会在外面再套一层for t = 1:T的场景循环,把每个场景下的灵敏度矩阵按场景权重累加。需要提醒的是,如果节点是平衡节点,扰动注入功率没有意义,计算时一般跳过1号节点,或者单独处理。

3.3 综合指标合成与候选集生成

得到每个场景的电压灵敏度矩阵和网损灵敏度向量后,先取绝对值,再做无纲量化。我用的合成公式比较简单:

S_com = alpha * mean(S_V_norm) + beta * mean(S_loss_norm)

其中S_V_norm和S_loss_norm分别是所有场景下按最大值归一化后的电压灵敏度和网损灵敏度,alpha和beta分别取0.5和0.5。如果想突出电压质量,可以把alpha调高到0.7;如果想重点降网损,就把beta调大。取值不需要太精细,因为灵敏度只是启发式筛选,候选集最后还要靠完整优化验证。

排序之后,把综合灵敏度最高的6个节点或支路放进候选集。对IEEE33节点而言,如果候选池是5条联络开关支路,那排序结果会告诉你在同样的容量条件下,先改造哪一条联络线最有效。如果加了分段支路进候选池,建议候选集控制在8个以内,否则后续组合枚举会变得很吃力。

这里还有一个工程细节:两个灵敏度指标在数值上可能差好几个数量级,如果不做归一化直接加权,结果基本由数值大的指标主导,另一个指标形同虚设。我见过不少初学者在这个地方踩坑,所以还是提醒一下。另外,候选集中要排除一些明显不合理的安装位置,比如变电站出口节点、已经装有DG的节点,这类位置装了SOP要么没有意义,要么会和DG出力产生冲突。

4. 优化配置模型与求解:目标函数、约束和算法选择

4.1 配置优化的数学表达

SOP优化配置本质上是一个混合整数非线性规划问题:位置变量是整数,容量变量是连续量。目标函数可以用年综合费用最小,也可以用网损和电压偏差的加权和。我在算例里用了分层目标:

第一层是年综合费用最小,包含SOP设备投资等年值和年运行网损费用。等年值系数把一次性投资分摊到每一年,公式是:

C_invest = R * C_SOP * S_sop 其中 R = i / (1 - (1+i)^(-T)) i为折现率,T为设备寿命 C_SOP为单位容量造价

第二层是电压偏差惩罚项,用来在多个费用接近的解里挑电压质量更好的解。电压偏差项可以定义成所有节点电压偏离1.0标幺值后的平方和,或者直接统计越限节点的个数。运行费用用典型日扩展系数,把几个代表场景的网损折算到全年。

如果你只是为了验证方法,用单目标“网损最小加电压越限罚函数”也完全够用,不必非得做年综合费用。年综合费用的结果更接近工程表达,但需要额外标定造价、折现率、寿命等参数,容易引入争议。既然是研究算例,可以先跑通单目标,再做多目标扩展。

约束条件包括:潮流平衡约束、节点电压上下限、支路电流上限、SOP容量上限、SOP有功功率平衡约束和无功容量约束。其中SOP有功功率平衡约束一定要写对,否则优化器很容易跑到一个物理上不可能的解。

4.2 求解思路:两阶段比单层混合整数规划更容易收敛

直接把0-1位置变量丢给fmincon是不现实的,fmincon处理整数变量时要么不可用,要么效果很差。我采用两阶段思路:第一阶段用改进灵敏度筛选出候选位置组合;第二阶段针对给定位置组合优化SOP容量。

如果候选集是8个位置,需要装2台SOP,就用nchoosek枚举36种组合,每种组合用连续优化器求解最优容量,最后比较所有组合的总目标。这个枚举量很小,完全可行。容量优化可以选择fmincon,但目标函数每次都要跑潮流,数值梯度会让内点法非常慢。实测下来patternsearch这类无梯度优化器更省心,Global Optimization Toolbox里的ga也能用,就是参数多了点。

核心框架代码如下:

posList = [5 8 9 12 18 21 22 25]; % 候选节点/支路编号,由灵敏度排序后确定 bestCost = inf; bestCap = []; for k = 2 % 配置2台SOP combos = nchoosek(posList, k); for c = 1:size(combos, 1) pos = combos(c, :); cap0 = repmat(0.3, 1, k); % 初始容量 lb = zeros(1, k); ub = repmat(0.8, 1, k); % 容量上限,单位MVA fun = @(cap) evalSOPConfig(system, pos, cap); [cap, fval] = patternsearch(fun, cap0, [], [], [], [], lb, ub, ... @(x) sopNonlcon(x), opts); if fval < bestCost bestCost = fval; bestPos = pos; bestCap = cap; end end end

有几个细节要注意。第一,容量上限0.8MVA不是拍脑袋,我是根据典型联络支路的最大传输需求估算的。33节点系统总负荷约3.7MW,单台SOP容量取总负荷的20%左右已经能有明显改善,再往上投资收益就下降了。第二,SOP的无功约束一定要写进非线性约束里。常见的错误是只约束有功,结果优化器把无功调得很大,潮流计算里已经发生了电压越限问题,目标函数还在下降,最终解根本不可用。

4.3 对比方案与结果校核

配置完SOP之后,至少要跑三组对比:原始网络、传统联络开关闭合方案、SOP优化配置方案。对比指标包括系统网损、节点电压最小值、电压偏差之和、馈线负载率等。以我自己的算例参数为例,在DG接入比例约20%的条件下,配置2台SOP能把系统网损降低25%到35%,最低节点电压从0.92附近抬升到0.97以上。这个数值不是通用结论,具体多少取决于DG位置、容量和场景权重,但它能说明SOP的作用确实是明显的。

校核时还有一个坑:如果目标函数里用了罚函数,一定要确认最终潮流结果的电压没有越限,罚函数数值是否为0。如果在最优解里罚函数仍然很大,说明这个解不满足基本电压约束,需要调整罚函数系数或者修改约束表达方式。另外,SOP容量结果最好取整到工程可采购的档位,比如0.1MW一档,这样结果更贴近实际设备选型。

5. 调试踩坑与代码组织:把灵敏度分析和优化配置真正跑顺

5.1 潮流不收敛:先查DG节点类型,再查初值

做这个算例时,我最常遇到的问题就是加DG之后Newton-Raphson不收敛。DG容量一旦占节点负荷比例过高,PQ节点吸收的无功过大,迭代很容易发散。解决思路有几个:

一是把DG节点改成PV节点,并设置合理的无功上下限;二是对DG节点采用功率逐步增加的方法,先不加DG收敛一次,再把DG出力分成多步逐渐加上去;三是检查节点类型定义是否出错。有些同学把平衡节点设错位置,或者把DG当成发电机节点后又没给无功出力数据,都会导致潮流发散。

实际调试时,我习惯先把DG全部设成0出力跑一遍,确认基础潮流没问题,再逐个加大DG出力。这样能很快定位到是哪台DG引发放散。IEEE33节点系统本身是很稳的算例,如果基础潮流都跑不收敛,问题几乎都出在数据格式或者符号定义上。

5.2 SOP注入的符号约定:容易让灵敏度排序反向

SOP在潮流接口里被处理成节点注入功率,符号非常容易出错。如果你把“SOP从节点流入负荷”记为正值,那么在潮流函数里还要考虑实际注入方向。我在第一次实现时,SOP两端功率平衡约束写反了,导致优化结果里SOP两端有功都在从系统取电,目标函数不断下降,但那个解实际上是荒谬的。

排查方法很简单:给每个SOP端口都打印实际功率方向和系统节点功率平衡残差。我发现残差特别大才醒悟过来。后来在模型里约定:P_i_sop大于0表示节点i向SOP注入有功,也就是SOP从该节点吸收有功;P_j_sop小于0表示SOP向节点j注入有功,两者之和等于损耗。整理好这个约定后,优化结果就正常了。这个建议很重要,写代码之前先写清楚物理符号约定,能省很多时间。

5.3 灵敏度排名和最终优化解不一致:不是代码错了

很多第一次做这类研究的同学会问:为什么改进灵敏度排名第一的位置,在完整优化里反而不是最优解?这个现象是正常的。灵敏度分析本质上是基于局部线性化的启发式筛选,它给出的是“这里值得进一步检查”的候选集,而不是最终答案。SOP的优化配置是非线性全局优化问题,DG出力、负荷水平变化和SOP之间的相互作用都可能改变最终最优解。

所以我把灵敏度筛选定位成“缩小候选空间”的工具,而不是“决定最终位置”的工具。先筛出候选集,再通过完整优化从候选集中确定组合,这样的结果更可靠。这个思路本身,就是改进灵敏度分析里最核心的一环:既要改进灵敏度指标本身,也要改进它的使用方式,让筛选和优化形成正确分工。

5.4 常见问题排查与代码组织建议

为了方便查看,我把调试中遇到的典型问题整理成一个对照表:

现象可能原因排查方式
加入DG后潮流发散DG节点类型不当或初值差分步加大DG出力,定位问题节点
优化结果出现荒谬解SOP功率符号约定不一致打印端口功率和节点功率平衡残差
灵敏度排序与优化结果不一致局部线性化与全局非线性差异把灵敏度当作启发式初筛,结果交给优化验证
容量优化收敛非常慢目标函数用数值梯度,内点法迭代次数爆炸改用patternsearch或surrogateopt
电压越限但目标函数很低罚函数系数设置不当检查最终解的罚函数值,调整罚函数或约束

代码组织方面,我建议把文件按功能拆开:case33.m负责数据;runNR.m负责潮流;calcSensitivity.m负责改进灵敏度计算;evalSOPConfig.m负责评价给定配置的目标函数;optimizeSOP.m负责优化主循环。别把一切塞进一个三百行的脚本里,后面要调参、换场景、画曲线时会非常痛苦。

画结果时,可以用plot画出有无SOP两种方案的节点电压曲线,用bar画出各候选位置的灵敏度排名,这样论文里要图有图,要表有表。工具箱方面,patternsearch和ga需要Global Optimization Toolbox。如果你不想依赖额外工具箱,也可以自己写一个简单的模式搜索或者粒子群算法,配合重复潮流调用,在33节点系统上几分钟内就能出结果。

最后聊一点感受。做这个配置研究,最大的收获不是把某个算法跑通,而是理解了灵敏度这类启发式方法和完整优化之间的关系:前者帮我们快速缩小搜索范围,后者保证我们在缩小后的空间里找到真正可用的解。实际做工程方案时也一样,设备位置选得再好,还要结合投资、检修、通信条件、保护配合一起来看,IEEE33只是一个起点。我在做这个算例时最后留了一个扩展接口,把单断面场景换成全年8760小时的时序曲线,后面想看更细致的收益评估时,直接调用同一套SOP模型就行。如果你也在做相关方向,建议先把符号约定和候选集生成逻辑写清楚,再谈算法优化,会少走很多弯路。

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

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

立即咨询