尧图精选

基于改进灵敏度分析的IEEE33配电网智能软开关选址定容优化

🕒 发布时间:2026/9/26 21:30:51 📁 来源:尧图网络
光伏一多有源配电网的规划就绕不开一个新问题智能软开关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 - (1i)^(-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模型就行。如果你也在做相关方向建议先把符号约定和候选集生成逻辑写清楚再谈算法优化会少走很多弯路。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →