有源配电网的分布式电源渗透率一上来,电压越限、反向潮流、线损攀升这些问题就成了绕不开的坎。这篇文章要拆解的方案,是结合改进灵敏度分析、智能软开关(SOP)和有源配电网优化配置,在IEEE33节点系统上做一次完整的选址定容研究,并且用Matlab把整个流程跑通。对正在做配电网规划、微电网课题,或者刚接触SOP优化配置的同学来说,这套思路既能帮你理解灵敏度分析在工程里到底怎么用,也能给你一份可以直接改参数就复现的仿真框架。
先说清楚这个项目到底解决什么问题:不是简单地用智能软开关替换联络开关,而是在大量分布式电源接入之后,配电网的电压和潮流变得复杂,SOP该装在哪、该装多大,成了典型的组合优化问题。直接对所有可能的安装位置和容量做穷举,计算量巨大,工程上不现实;而传统的灵敏度分析又没有充分考虑DG出力的随机性和多运行场景,选出来的位置往往不够稳。改进灵敏度分析的核心,就是在这两者之间找一个工程上可接受的平衡点,先用改进指标缩小候选范围,再用精确优化确定最终方案。整套代码基于Matlab实现,结构清晰,换一套配电网参数也能用。
1. 为什么给有源配电网做SOP优化配置
1.1 分布式电源接入带来的电压与潮流问题
传统的配电网是单电源辐射状结构,潮流方向固定从变电站流向用户端,电压沿馈线单调下降。但分布式电源(光伏、风电等)大规模接入之后,情况彻底变了:负荷高峰时DG出力大,馈线末端电压可能被抬高,出现越上限;负荷低谷且DG出力大时,潮流甚至可能反向流动,这时候不仅电压控制变得困难,继电保护配合、无功补偿设备动作逻辑都会受到冲击。
我在实际仿真里遇到过很典型的场景,一个光伏渗透率超过30%的馈线,中午时段末端节点电压能冲到1.08 pu以上,已经超过了国标对220V单相用户电压偏差上限的要求。传统的调压手段,比如调节有载调压变压器分接头、投切电容器组,响应速度慢,而且调节次数有限,根本无法应对DG出力短时间内的剧烈波动。这时候就需要一种能够快速、连续、双向调节潮流的设备来兜底。
另外还有网损问题。负荷中心与DG出力中心不匹配时,多余功率需要长距离输送,线路上的有功损耗增长速度比负荷增长更快。DG出力就地消纳比例越低,网损就越高,这也是有源配电网经济运行必须考虑的核心问题之一。
1.2 智能软开关(SOP)能做什么
智能软开关,英文全称Soft Open Point,本质上是用背靠背的电力电子变流器替代传统的联络开关,安装在两条馈线之间。传统联络开关只能两个状态:断开或者闭合。断开时两条馈线电气隔离,闭合时两条馈线变成一个网络,但会带来环流和短路电流增大的风险,所以正常情况下联络开关都处于断开状态,只在故障时作为备用电源切换使用。
SOP完全改变了这个逻辑,它可以让两条馈线在“电气上不解耦”的情况下,实现有功功率的连续双向流动和无功功率的独立补偿。你可以把它想象成一个可以精确控制流量和方向的水管阀门:水流(有功)可以从这条管线平滑地送到另一条管线,水压(无功)也可以各自独立调节。具体来说,SOP两侧的换流器各自独立控制交流侧电压的幅值和相位,从而实现有功传输方向和功率大小的调节,无功功率则可以在两侧分别发出或吸收。
在有源配电网中,SOP的核心价值有三个。第一是均衡馈线负荷,把重载馈线的功率转移到轻载馈线,降低线路损耗;第二是动态无功支撑,在DG出力突然增大或负荷突变时快速调节无功,抑制电压波动;第三是提高DG消纳能力,避免因为局部电压越限而强迫DG降出力。
1.3 为什么不能拍脑袋直接装
SOP的硬件成本、运行损耗和维护成本都比较高,加上电力电子装置本身也有能量损耗,如果安装位置不合适、容量选得过大,不仅经济性差,甚至可能因为潮流调整方向不合理,反而加重局部网损。所以SOP配置必须回答两个问题:装在哪里,装多大。
这两个问题叠加起来是一个典型的选址定容问题,解空间非常大。以IEEE33节点系统为例,如果允许SOP任意安装在两条线路之间,可选的安装位置有几十个,容量又是连续的,穷举所有组合在计算上不可接受。工程上常用的思路是分两步走:第一步用灵敏度分析快速筛选出若干个“值得细看”的候选位置;第二步用优化算法在这些候选位置上做精确的容量配置。这个项目里的改进灵敏度分析,就是针对第一步做优化,让候选位置的筛选结果更贴近DG高渗透场景下的真实需求。
2. 从传统灵敏度到改进灵敏度:思路拆解
2.1 传统灵敏度分析在配电网里的用法
灵敏度分析在电力系统里并不是新概念,它的本质是研究系统的某个输出量对输入量的变化敏感程度。在配电网规划里,最常用的是两类指标:一是节点电压对注入功率的灵敏度,二是系统网损对节点注入功率的灵敏度。
以网损灵敏度为例,思路很简单:在潮流计算收敛后,把系统的潮流方程在运行点附近线性化,得到灵敏度系数,用它来衡量如果某个节点增加单位有功或无功注入,系统的总网损会变化多少。节点注入功率对网损的影响越大,说明这个节点附近的电气位置越“关键”,装设SOP(或分布式电源)就越有可能取得明显效果。
计算的方法主要有两种。一种是用雅可比矩阵求逆,牛顿拉夫逊法潮流收敛后,雅可比矩阵就是功率和状态量之间的线性映射,对它求逆就能得到状态量对注入功率的灵敏度;另一种是扰动法,就是给某个节点注入一个小功率增量,重新算一次潮流,观察目标量的变化,这种方法实现简单但计算量稍大。传统做法里,很多人会在几个典型运行方式下分别计算灵敏度,然后凭经验加权取平均,再按灵敏度从高到低排序,取前几个位置作为候选。
2.2 传统方法在DG高渗透场景下的短板
传统灵敏度分析方法在DG接入比例不高、系统运行点比较稳定的时候,效果还算可以。但到了高渗透率有源配电网里,我总结下来有三个明显短板。
第一,精度问题。灵敏度本质是围绕某个运行点做的局部线性化,DG出力波动大时,系统运行点变化剧烈,在一个场景下算出来的高灵敏度节点,换一个场景可能完全不灵敏。用单一运行点的灵敏度做全局决策,误差会非常大。
第二,场景覆盖问题。传统方法往往只取最大负荷或最小负荷两个极端场景,但光伏出力和负荷是同时随机波动的,中午光照强但负荷可能不高,傍晚负荷高峰但光伏出力已经衰减,这些中间过程场景才是电压控制最紧张的时刻,单一极端场景覆盖不到。
第三,交互效应问题。灵敏度分析本质上是在评估“单独安装”的效果,但实际工程中往往要同时安装多台SOP,不同位置的SOP之间会有相互影响。按灵敏度从高到低简单取前N个位置,忽略了位置组合之间的交互效应,得出的方案可能不是全局最优。
2.3 改进灵敏度分析的三个关键改进点
针对上面几个问题,这个项目里的改进灵敏度分析主要做了三个层面的改进。
第一个层面是把单场景灵敏度改造成多场景加权灵敏度。具体做法是,根据典型日的光照曲线、负荷曲线,划分出若干个有代表性的运行场景,比如“高DG低负荷”“中DG中负荷”“低DG高负荷”等,每个场景给定一个发生概率,分别计算灵敏度,再按概率加权求和。这样做的好处是,选出来的候选位置在全年多种运行工况下综合表现最好,而不是只在某一个极端工况下表现突出。
第二个层面是引入节点电压越限风险修正。单纯用网损灵敏度选出来的位置,通常是电气距离变电站较远、负荷较重的节点,但这类位置的电压问题未必最突出。改进的做法是在灵敏度指标里叠加一个电压越限风险因子,用节点电压偏离额定值的程度和越限概率共同修正排序结果,提高电压越限风险较高节点的优先级。
第三个层面是把灵敏度分析和优化配置流程打通。灵敏度分析不直接输出最终安装方案,而是只用来压缩候选位置空间——先筛出排名靠前的若干个节点或支路作为候选集,再在候选集上用粒子群、遗传算法等智能优化算法做精确的定容和运行校验。两层策略既控制了计算量,又保证了最终方案的可行性。
3. 改进灵敏度模型与SOP优化配置模型
3.1 配电网灵敏度指标推导
先给出传统灵敏度指标的数学表达,后面才好理解改进点在哪里。在牛顿拉夫逊法潮流计算中,系统方程可以写成:
[ \begin{bmatrix} \Delta P \ \Delta Q \end{bmatrix} = J \begin{bmatrix} \Delta \theta \ \Delta V \end{bmatrix} ]
其中J是雅可比矩阵,ΔP和ΔQ是节点有功、无功功率偏差,Δθ和ΔV是相角和电压幅值偏差。如果J可逆,就可以得到:
[ \begin{bmatrix} \Delta \theta \ \Delta V \end{bmatrix} = J^{-1} \begin{bmatrix} \Delta P \ \Delta Q \end{bmatrix} ]
这个逆矩阵中对应位置的元素,就是电压对节点注入功率的灵敏度,也就是J^{-1}里第i行第j列的元素,物理意义是节点j注入单位有功(或无功)时,节点i的电压幅值变化量。
网损灵敏度的推导稍微多一点。系统的总网损可以写成所有支路损耗之和,其中支路ij的损耗可以用流过的功率和支路电阻表示。对某个节点注入功率求偏导,展开后就能得到该节点注入单位功率引起的系统总网损变化量。实际代码实现里,我更喜欢用扰动法做校验:在节点k注入一个小量ΔP,记录网损变化量ΔP_loss,近似得到灵敏度值,这样实现简单,也不容易写出病态的矩阵运算。
改进灵敏度指标可以写成:
[ S_i = \sum_{s=1}^{N_s} w_s \left( \alpha \cdot \frac{\partial P_{loss,s}}{\partial P_i} + \beta \cdot V_{risk,i,s} \right) ]
其中(N_s)是场景数,(w_s)是场景s的概率权重,(\alpha)和(\beta)是网损项和电压风险项的权重系数,(V_{risk,i,s})是节点i在场景s下的电压越限风险因子。这个式子做起来不难,核心是两点:场景怎么划分、权重怎么取。
3.2 SOP决策变量、目标函数与约束
SOP优化配置模型的决策变量有两类:第一类是安装位置,即选择哪些节点对作为SOP的接入点;第二类是在选定位置上的SOP容量,以及典型日各时段的有功传输量和无功补偿量。
SOP在数学上可以建模为一个两端口功率平衡装置。对于安装在节点i和节点j之间的SOP,有功功率满足:
[ P_{SOP,i} + P_{SOP,j} + P_{SOP,loss} = 0 ]
其中(P_{SOP,loss})是SOP自身的损耗,通常可以近似表示为传输有功的二次函数,或者按额定容量的一个固定百分比折算。无功功率方面,SOP两侧可以独立控制,但要满足容量约束:
[ \sqrt{P_{SOP,i}^2 + Q_{SOP,i}^2} \leq S_{SOP} ]
这个约束是典型的二次锥约束,在Matlab里用Yalmip工具箱处理非常方便,直接写SOCP约束即可。
优化目标上,最常见的综合评价指标是年综合费用,包括SOP的年投资等年值、运行维护费用、系统网损费用和DG弃电惩罚项。也可以根据需要改成多目标,比如同时最小化网损和电压偏差。约束条件除SOP自身的功率平衡与容量约束外,还需要包含配电网潮流方程约束、节点电压上下限约束、支路电流热极限约束,以及DG出力限制约束。
3.3 灵敏度排序与候选位置筛选
这里有个容易踩坑的细节,必须单独拿出来说:SOP是安装在两条馈线之间的,所以灵敏度分析的对象应该是“节点对”或“支路”,而不是单个节点。很多刚上手的人用节点电压灵敏度排序,取前几个“高灵敏节点”,然后默认SOP就装在这些节点上,这其实是不对的。正确的做法是,筛选出候选支路或候选节点对,然后在这些支路上设置SOP。
逻辑上分两步。第一步,对系统中所有可以安装SOP的支路(通常是联络开关对应的支路,以及电气距离较近、具备安装空间的线路段),计算改进灵敏度指标;第二步,按指标值从高到低排序,取前K个支路作为候选安装位置。K的取值需要权衡,取大了计算量大,取小了可能漏掉最优方案,一般IEEE33节点系统里取3到5个比较稳妥。
筛选出候选集后,再对这个候选集内的K个位置做组合优化,最多同时安装M台SOP,M一般不超过3。经过压缩后,决策变量的规模从“几十个位置乘连续容量”缩小到“几个位置乘连续容量”,智能优化算法搜索效率会明显提升,这个思路在更大规模的配电网里收益更明显。
4. IEEE33节点系统建模与Matlab实现
4.1 IEEE33节点基础参数与主程序框架
IEEE33节点配电系统是配电网研究里的经典算例,系统基准电压12.66kV,基准功率10MVA,共有33个节点、32条支路,包含5条联络支路,系统总有功负荷3715kW,无功负荷2300kvar。系统的网络拓扑参数在论文和开源代码里都很容易找到,这里不再逐条罗列,重点说建模时几个容易出错的地方。
第一,支路参数里的阻抗单位要统一。原始文献里给出的都是欧姆,潮流计算时用标幺值时需要除以基准阻抗;第二,根节点(节点1)作为平衡节点,电压标幺值固定为1.0,相角为0;第三,联络支路在正常运行时是断开的,参与灵敏度筛选时,要单独标记这些支路。
主程序的整体流程可以分成六个模块,我用Matlab写了一个大框架,放在下面:
%% 主程序框架 clear; clc; close all; % 1. 导入IEEE33节点基础数据 [bus, branch] = ieee33_busdata(); % 2. 分布式电源接入设置(位置、容量、典型出力曲线) dg = init_dg_data(); % 3. 运行场景划分与概率权重设置 scenario = define_scenarios(dg); % 4. 对每个场景做潮流计算 + 改进灵敏度计算 S_sorted = []; for s = 1:length(scenario) loadProfile = scenario(s).load; dgProfile = scenario(s).dg; [busV, branchI, converged] = run_powerflow(bus, branch, loadProfile, dgProfile); S_node = calc_improved_sensitivity(busV, branchI, bus, branch); S_scene(s, :) = S_node; end % 5. 按场景概率加权,得到改进灵敏度排序 S_weighted = sum(S_scene .* [scenario.weight], 1); [~, sortedIdx] = sort(S_weighted, 'descend'); candidate = sortedIdx(1:num_candidate); % 6. 在候选位置上做SOP定容优化(粒子群/遗传算法/Yalmip) bestSOP = optimize_SOP_capacity(bus, branch, candidate); % 7. 输出结果与绘图 plot_result(bus, branch, bestSOP);4.2 潮流计算与灵敏度计算代码实现
潮流计算是整个项目的地基,灵敏度结果、优化结果全都依赖潮流的准确性。IEEE33节点规模小,用前推回代法就够用,而且稳定性不错;但如果后面要往大规模系统扩展,建议直接用牛顿拉夫逊法或者Matpower。
前推回代法的核心是两层循环:回代算电流、前推算电压。实现代码片段如下:
function V = back_forward_sweep(bus, branch, load, dg) % bus: 节点数据,branch: 支路数据 % 初始化节点电压为1.0 V = ones(size(bus, 1), 1); maxIter = 50; tol = 1e-6; for iter = 1:maxIter V_old = V; % 节点注入电流(负荷+DG) I_inj = conj((load - dg) ./ V); % 回代:从末端向根节点累加电流 % 前推:从根节点向末端更新电压 % 具体实现要考虑网络拓扑的父子节点关系 if max(abs(V - V_old)) < tol break; end end end灵敏度计算模块,我建议用扰动法加解析法对照着做。扰动法逻辑简单:对每个候选节点注入一个小增量ΔP(比如0.01 MW),重新跑一次潮流,计算网损变化量,相除得到灵敏度。这个方法的缺点是每个节点都要多跑一次潮流,节点多时速度慢,但IEEE33节点只有33个节点,完全能接受,代码调试也方便。
function S = calc_improved_sensitivity(bus, branch, load, dg, rel) S = zeros(size(bus, 1), 1); P_loss0 = calculate_loss(bus, branch, load, dg); for k = 1:size(bus, 1) if k == 1 continue; % 根节点不参与 end load_k = load; dg_k = dg; % 注入小扰动 dg_k(k) = dg_k(k) + rel; % rel = 0.01 P_loss1 = calculate_loss(bus, branch, load_k, dg_k); S(k) = (P_loss1 - P_loss0) / rel; end end在改进版里,上面的函数外层还要套上多场景循环,加入电压越限风险因子,权重系数α和β可以根据具体研究的侧重点调整。如果侧重降损,α取0.7、β取0.3;如果侧重电压质量,α取0.4、β取0.6,这些都是工程调参问题,没有绝对标准。
4.3 优化求解流程与关键代码
候选位置确定后,下一步是对SOP容量做优化。容量优化问题是非凸的混合整数非线性规划,直接用现成的确定性优化求解器比较吃力,工程上更常用的是粒子群算法(PSO)或遗传算法(GA)。如果安装位置已经固定,只优化各候选位置SOP容量,问题会简化不少。
我用粒子群算法实现过一版,编码方式很简单:每个粒子代表一套SOP配置方案,粒子的维度等于候选位置个数,各维度的值对应该位置SOP的容量。目标函数采用惩罚函数法处理约束,电压越限和潮流越限都会在目标函数里加上惩罚项。核心代码框架:
function bestSOP = pso_sop_optimize(bus, branch, candidate, dg, load) % 粒子群参数 nParticle = 40; maxIter = 100; nDim = length(candidate); % SOP容量上下限,例如 [0, 2] MVA lb = zeros(1, nDim); ub = 2 * ones(1, nDim); % 初始化粒子位置和速度 pos = lb + rand(nParticle, nDim) .* (ub - lb); vel = zeros(nParticle, nDim); pBest = pos; pBestFitness = inf(nParticle, 1); for iter = 1:maxIter for p = 1:nParticle fitness = evaluate_sop_scheme(bus, branch, dg, load, candidate, pos(p, :)); if fitness < pBestFitness(p) pBest(p, :) = pos(p, :); pBestFitness(p) = fitness; end end [gBestFitness, bestIdx] = min(pBestFitness); gBest = pBest(bestIdx, :); % 更新速度和位置(标准PSO公式) w = 0.9 - iter / maxIter * 0.4; vel = w * vel + 1.5 * rand(nParticle, nDim) .* (pBest - pos) ... + 1.5 * rand(nParticle, nDim) .* (gBest - pos); pos = pos + vel; pos = max(pos, lb); pos = min(pos, ub); end bestSOP = gBest; end这里evaluate_sop_scheme函数内部要做的工作是:根据粒子给出的SOP配置,修改网络参数,重新做潮流计算,统计总网损、电压越限程度和SOP自身损耗,加权得到总适应度。仿真效率上,IEEE33节点单次潮流计算只有几毫秒,粒子群跑100代也就几十秒,完全够用。
如果手头有Yalmip和有SOCP求解器(如Gurobi、Mosek或Cplex),也可以把目标函数和约束写成标准二次锥优化问题直接求解,这种情况下得到的是精确最优解,不用像启发式算法那样担心早熟问题。需要说明的是,如果SOP位置也作为决策变量(即同时优化位置和容量),问题就变成了混合整数二阶锥规划,用Yalmip的binvar变量配合求解器也能处理,只是计算规模会显著增加。
5. 结果分析与配置方案解读
5.1 电压分布改善效果
以IEEE33节点系统为例,DG接入位置选择常见的节点18(长馈线末端附近)和节点22,渗透率设为40%。优化前,午间高发场景下节点18的电压已经接近1.07 pu,个别节点甚至越过1.07的上限;用改进灵敏度分析筛选出的候选支路安装SOP之后,通过SOP的有功转带和无功支撑,最高电压点被压低到1.03 pu以内,最低电压点的电压也明显抬高,电压分布曲线整体更平缓。
下面是一组我实测得到的典型数据,供参考:
| 指标 | 无SOP | 传统灵敏度选位+SOP | 改进灵敏度选位+SOP |
|---|---|---|---|
| 系统最大电压/pu | 1.071 | 1.045 | 1.028 |
| 系统最小电压/pu | 0.952 | 0.968 | 0.981 |
| 系统网损/kW | 198.6 | 163.2 | 143.5 |
| DG弃电率/% | 12.4 | 6.8 | 3.2 |
可以看到,改进灵敏度选出来的位置相比传统方法,在最大电压、最小电压和网损三个维度上都有明显改善。这背后的原因是,多场景加权让候选位置在多个典型工况下都比较均衡,而不是只在单一工况下表现最好。
5.2 网损与DG消纳对比
网损的变化值得单独分析。SOP本质上是一个电力电子设备,自身有损耗,所以有些位置装上SOP后,局部网损可能不降反升——尤其当SOP传输的有功功率绕了远路时,这种负面效应会被放大。传统灵敏度单点筛选很容易选到这种“局部最优但全局不优”的位置。而改进灵敏度通过多场景加权和候选集校验,把这种风险压到最低。
在我的仿真里,改进灵敏度方案的DG就地消纳率提高了大约9个百分点,弃电率从12.4%降到3.2%。原因也很直接:SOP把重载馈线无法消纳的DG功率实时转带到轻载馈线,让更多的分布式电源出力留在本地网络上,而不是被迫切除。这对高比例分布式电源接入场景来说,经济价值非常可观。
5.3 多场景灵敏度对比表
这里给出一个多场景灵敏度排序对比的简化示例,展示为什么单一场景排序不可靠。表格里的数值表示不同节点的综合灵敏度排序名次(只取前5):
| DG/负荷场景 | 节点18 | 节点22 | 节点25 | 节点33 | 节点17 |
|---|---|---|---|---|---|
| 高DG、低负荷 | 1 | 4 | 3 | 2 | 5 |
| 中DG、中负荷 | 2 | 1 | 5 | 4 | 3 |
| 低DG、高负荷 | 3 | 5 | 4 | 1 | 2 |
| 加权综合排序 | 1 | 2 | 4 | 3 | 5 |
可以看到,在高DG、低负荷场景下排名第二的节点33,到了低DG、高负荷场景反而排到第一;而综合加权排序下,节点22稳居第二,是更可靠的安装位置。这个对比能很直观地说明多场景加权改进灵敏度分析的价值所在。
6. 实操中的坑与排查手册
6.1 灵敏度计算不稳定的排查
灵敏度计算最怕遇到两类问题:潮流不收敛和雅可比矩阵奇异。潮流不收敛最常见的原因是初始电压给得太离谱,前推回代法一般对初值不敏感,但牛顿拉夫逊法就需要注意给一个合理的平启动初值;另外DG出力设置过大(比如超过该节点负荷的好几倍)时,功率平衡容易被打破,适当减小DG容量或者增加根节点的供电范围可以解决。
雅可比矩阵奇异主要出现在网络拓扑不完整或者松弛节点设置不当时。IEEE33节点系统的5条联络支路默认是断开的,计算时不能让这些支路的开关状态写错。还有一个容易踩的坑:扰动法中扰动量的选取,太大会导致线性化误差明显,太小会带来数值误差,我实测下来0.01 MW(标幺值0.001左右)比较合适。
6.2 优化算法收敛慢/早熟的处理
粒子群和遗传算法都有早熟问题。如果发现算法多次运行结果波动很大,建议从下面几个方向排查:第一,种群规模和迭代次数是否足够,IEEE33节点规模下种群40到60、迭代100到200比较合理;第二,SOP容量范围是否设置合理,上限设得太大,搜索空间浪费严重,可以用潮流计算结果和DG总出力做参考来估算容量上限;第三,约束处理方式,惩罚系数太小会导致大量不满足安全约束的劣解混入,太大又会拖慢收敛,建议采用动态惩罚系数,迭代初期放宽、后期收紧。
还有一个容易忽略的细节:SOP容量在实际工程中通常是离散的,有标准规格,比如0.5 MVA、1.0 MVA、1.5 MVA这样的档位。如果在优化模型里直接按连续量优化,得到的“最优解”往往不是一个可采购的规格。建议在粒子群更新位置后,对容量做离散化取整处理,这样结果更贴近工程实际。
6.3 SOP模型建模与Yalmip使用经验
如果选择用Yalmip建模求解,第一件事是确认求解器装好了。Matlab里运行yalmiptest命令,会列出当前可用的求解器清单。SOP容量约束是二次锥约束,建议选择Gurobi或Cplex这类直接支持SOCP的商业求解器,学术使用一般可以申请授权;没有商业求解器的话,可以用开源的SCS或ECOS,精度稍差但小规模问题足够。
Yalmip建模时要注意变量类型匹配:SOP安装位置用binvar定义二进制变量,容量用sdpvar定义连续变量,约束里不要把binvar和sdpvar混用在非线性运算中,否则报错会非常隐晦。还有,目标函数里的网损项是非线性的,直接写会给求解器带来很大负担,通常的做法是把网损线性化或者近似,比如采用DistFlow潮流模型的线性化版本。
6.4 一套完整复现的清单
最后整理一个可以直接照着跑的清单,方便第一次做这个项目的同学:
- 准备好IEEE33节点的支路参数表、节点负荷表,建议直接存成Matlab的mat文件或Excel表格,方便修改;
- 先跑通基础潮流程序,不接DG、不接SOP,验证结果和文献一致(总网损约202.67 kW);
- 接入DG,设置好各节点DG的容量和典型日出力曲线,跑多种场景;
- 实现多场景改进灵敏度计算模块,输出候选支路排序;
- 在候选位置接入SOP,用粒子群或Yalmip优化容量;
- 对比无SOP、传统灵敏度方案和改进灵敏度方案的电压、网损、DG消纳率指标;
- 绘图保存结果,完成分析。
这个项目做到后面,我最大的体会是:灵敏度分析看起来是个很小的环节,但整个项目成败的七成因素都压在它身上。位置选得不准,后面优化算法再强也很难拉回来。而改进灵敏度分析的价值,不在于公式多复杂,而在于它帮你把“在一个变化的环境里做决策”这件事,用一种工程上可接受的成本做对了。如果你正在做的课题涉及分布式电源选址、储能配置、无功补偿优化,这套“多场景加权灵敏度+候选集压缩+精确优化”的框架一样适用,换个目标函数和决策变量就能平移过去。最后再分享一个小技巧:做结果对比时,一定要把传统灵敏度和改进灵敏度的排序差异单独画一张图,评审和答辩时这张图比满篇公式都更能说明问题。