☰
基于粒子群算法的配电网无功电压优化控制与仿真实践
2026/10/16 8:16:47 网站建设 项目流程

最近在做配电网电压控制的项目,碰到一个很实际的难题:分布式微发电机接入后,某些节点的电压一路跌到0.9 pu以下,白天光照强、负荷轻的时候又冲到1.06 pu以上。调了很多方式,最后发现真正管用的还是调节无功功率注入。我把这套基于IEEE 56节点系统的Matlab仿真完整跑了一遍,从潮流计算到无功-电压灵敏度分析,再到粒子群优化控制,最终把电压质量拉回到了合格区间。整个过程走了不少弯路,这里把思路、代码逻辑和踩坑经验都整理出来,给做配电网仿真的朋友一个参考。

这个话题的核心是“通过控制分布式微发电机的无功功率注入来调节配电网络的电压配置”,研究方法落在IEEE 56节点测试系统上,用Matlab做算法实现。无论你是刚开始接触分布式电源接入的在校学生,还是已经做了几年配电网规划、运行控制的一线工程师,这篇文章都会有一定价值。我会把为什么无功能调压、灵敏度矩阵怎么算、粒子群算法怎么和潮流计算耦合、代码怎么组织这些细节全部拆开讲。

1. 从一次电压越限事故说起:为什么无功调节是配电网调压的关键

1.1 分布式电源接入后的电压问题,比想象中更棘手

配电网的传统调压手段主要依靠有载调压变压器分接头、并联电容器组和线路调压器。但在分布式微发电机大规模接入后,情况变了:电源点不再集中在变电站侧,而是分布在馈线末端或中间位置。负荷轻的时候,分布式电源有功出力大于本地负荷,功率开始倒送,馈线沿线的电压被抬高;负荷重的时候,分布式电源出力不足,又从电网吸收大量无功,电压下降得比纯负荷工况还要快。

我最初在IEEE 56节点系统上做基态潮流,发现节点35、节点41、节点47的电压分别只有0.906 pu、0.912 pu、0.897 pu,而部分轻载分支节点电压达到1.055 pu。这种“首端正常、末端越限”的电压分布,传统调压手段并不好使。变电站侧的分接头调节是全局性的,一动就影响整条馈线;电容器组只能分组投切,做不到连续调节。分布式发电机恰恰可以改变自身无功输出,相当于在馈线末端装了一台快速、连续可调的“无功补偿器”,这是最灵活的手段。

1.2 无功功率和电压到底是什么关系

输电网里面常说“无功是电压的支点”,因为高压电网的线路电抗远大于电阻,无功功率的流动对电压影响显著。配电网的R/X比虽然比输电网高,但在中压配电网中,线路电抗仍然占据主导地位,无功功率的分布同样决定电压分布。

举一个简化例子:一条馈线首端电压为U1,末端节点注入有功P和无功Q,线路阻抗为R+jX,忽略对地导纳后,末端电压U2与首端电压之间的关系可近似写为:

[ \Delta U \approx \frac{PR + QX}{U_2} ]

从公式中可以直观看到,要维持末端电压U2不跌落,当有功P已经由负荷和分布式电源决定、无法随意改变时,减少线路中流动的无功Q(即增加就地无功补偿)是最直接的途径。分布式微发电机通过逆变器或励磁系统调节无功注入,本质上就是在改变Q这一项,从而控制电压偏差大小。

1.3 为什么选择“无功注入”而不是“有功调节”来调压

有人问:分布式发电机也可以调节有功出力,为什么非要用无功?原因很现实。有功出力往往受一次能源约束,光伏靠光照、风电靠风速、微燃机靠燃料成本,强行削减有功会造成资源浪费,甚至违反并网协议。而无功功率只是一种交换功率,不消耗一次能源,调节成本低,响应速度快。

另一方面,从配电网运行角度,电压质量主要由无功平衡决定。IEEE 56节点这样的中压网络,无功不足就会导致电压偏低,无功过剩则电压偏高。所以,把分布式微发电机的剩余容量用起来,注入或吸收无功,是在不损失有功效益的前提下最经济的电压校正手段。

2. 无功-电压灵敏度:分布式微发电机调节的理论支点

2.1 什么是无功-电压灵敏度,怎么从潮流方程推出来

要设计一个“电压配置方案”,不能盲目把所有分布式发电机的无功都调到上限,那样可能造成过电压。我们需要知道:某个节点注入无功对各个节点电压的影响程度,也就是无功-电压灵敏度。

配电网的潮流方程是一组非线性方程:

[ P_i = U_i \sum_{j \in i} U_j (G_{ij}\cos\theta_{ij} + B_{ij}\sin\theta_{ij}) ]

[ Q_i = U_i \sum_{j \in i} U_j (G_{ij}\sin\theta_{ij} - B_{ij}\cos\theta_{ij}) ]

在稳态工作点附近,把潮流方程线性化,可以得到雅可比矩阵J。将电压幅值和无功功率之间的关系单独抽取,当不考虑有功-电压、无功-相角的交叉影响时(即采用P-Q解耦近似),可以得到灵敏度矩阵S。

更简单的做法:利用牛顿-拉夫逊潮流收敛后的雅可比矩阵,求一次逆变换。在Matlab中,潮流计算函数返回雅可比矩阵J,其中第四个子块对应∂Q/∂U。灵敏度矩阵近似为:

[ S_{UQ} = -(\frac{\partial Q}{\partial U})^{-1} ]

S_UQ的第i行第j列表示:节点j注入单位无功功率(1 Mvar)时,节点i的电压幅值变化量。有了这个矩阵,就能知道“哪个DG对哪个节点电压影响最大”。

2.2 灵敏度矩阵的实际计算流程

我在Matlab里是先写了一个基于牛顿-拉夫逊算法的潮流函数,收敛后利用雅可比矩阵中的无功-电压子块求逆。但要注意,直接对整个雅可比矩阵求逆也可以,只是会混入有功-相角的耦合信息。在配电网中,R/X比不是特别低的时候,P-Q解耦近似仍然有不错的效果,不过为了稳妥,我更喜欢直接用完整雅可比矩阵来算,不去掉交叉项。

计算步骤大致是:

  1. 在运行点处执行潮流计算,直到收敛;
  2. 取出最后一次迭代的雅可比矩阵J;
  3. 对J取逆,逆矩阵中对应电压幅值部分V、无功功率部分Q的子块即为电压-无功灵敏度;
  4. 将其中的数值取相反数(因为通常定义灵敏度为电压对无功的导数,符号上要跟潮流方程方向保持一致)。

这里要注意一个问题:逆变器型分布式电源在潮流计算中往往被建模为PQ节点(给定有功和无功),所以它的无功变化不会直接出现在雅可比矩阵里。实际上,当DG的PQ给定值改变时,注入节点的无功变化会引起其他节点电压变化。所以灵敏度计算应该使用节点注入功率对电压的灵敏度,而不是雅可比矩阵中的某个元素本身。我在代码中处理的方法是:把某一DG节点的注入无功增加一个小量ΔQ,重新计算潮流,观察各节点电压变化,得到经验灵敏度。这个思路虽然比解析法慢,但实现简单,而且对接粒子群算法时不容易出错。

2.3 灵敏度信息有什么用

灵敏度矩阵是控制策略的核心依据。我们可以顺着灵敏度筛选“最有效的分布式发电机”:哪些DG对低电压节点的影响最大,就让它们多注入无功;哪些DG对高电压节点的抬升作用最强,在轻载时就少注入甚至吸收无功。

在后续的粒子群优化中,灵敏度矩阵还能帮助初始化粒子——把初始解偏向灵敏度最高的DG,让算法更快收敛。这个技巧在实际仿真中非常有效,后面会细说。

3. IEEE 56节点系统的建模与数据准备:仿真算例背后的准备工作

3.1 IEEE 56节点测试系统的结构和特点

IEEE 56节点系统是一个用于配电网分析的标准测试算例,由多条放射状馈线构成,节点数多,分支结构复杂,负荷数据覆盖了从重载到轻载的多种工况。相比简单的IEEE 33节点系统,56节点网络的拓扑更接近真实中压配电网络,节点间的电气距离差异大,更容易暴露电压控制中的薄弱环节。

该测试系统的基准电压通常取10 kV或12.66 kV,基准功率取1 MVA或10 MVA。实际使用时需要先确认数据文件里的基准值参数,否则后面潮流计算结果会整体偏移。我使用的版本基准电压为10 kV,基准功率为1 MVA。文献里常见的IEEE 56节点数据包括线路首末端编号、线路电阻和电抗(标幺值或有名值)、节点有功和无功负荷。

3.2 从原始数据到Matlab潮流计算的转化

拿到数据后,第一步是建立节点导纳矩阵。Matlab中可以直接用makeYbus之类的函数,如果没有现成的工具箱,就手动写循环:对每条支路,把导纳值累加到Y矩阵的对角元和非对角元上。处理变压器支路时,还要考虑变比;但IEEE 56节点系统通常被设计为不带变压器的纯配电网络,建模会简单一些。

第二步是处理负荷。原始数据里给出的负荷往往是有名制(kW、kvar),需要转换到标幺制:

[ P_{pu} = \frac{P_{MW}}{S_{base}} ]

[ Q_{pu} = \frac{Q_{Mvar}}{S_{base}} ]

所有运算在标幺制下进行,得到的电压幅值也是标幺值,1.0 pu就是额定电压。

第三步是设置节点类型。变电站母线作为平衡节点(节点1),其他节点都是PQ节点。当分布式发电机接入后,可以在指定节点上把PQ节点的给定功率改成“负负荷”(注入功率)。例如某DG接入节点15,有功出力0.5 MW,则节点15的有功负荷变为原有负荷减去0.5 MW。

下面是我在Matlab中构建数据文件的简化结构:

function mpc = case56 %% IEEE 56节点测试系统数据(简化展示) mpc.version = '2.0'; mpc.baseMVA = 1; %% 节点数据 [节点编号 类型 有功负荷 无功负荷] mpc.bus = [ 1 3 0.0000 0.0000; % 平衡节点 2 1 0.0320 0.0200; 3 1 0.0450 0.0250; % ... 共56行 ]; %% 支路数据 [首端 末端 电阻(pu) 电抗(pu)] mpc.branch = [ 1 2 0.0032 0.0084; 2 3 0.0048 0.0120; % ... 共55行 ]; end

3.3 分布式微发电机的参数设置

我在仿真中设置了8台分布式微发电机,分别接在节点5、节点11、节点18、节点26、节点33、节点39、节点45和节点52。每台DG的有功出力按额定容量的60%设定,无功出力范围设定为 ([-0.2,\text{Mvar}, 0.6,\text{Mvar}]),模拟逆变器剩余容量对无功的支撑能力。需要注意的是,DG的无功上限既要考虑逆变器容量S,也要满足 (Q_{max} = \sqrt{S^2 - P^2}) 的约束。如果按固定的0.6 Mvar设置,而某台DG有功出力已经接近容量上限,实际无功调节空间并没有那么大。我在最终版本中采用了动态约束,即:

[ Q_{max,i} = \min(Q_{rated,max,i}, \sqrt{S_i^2 - P_i^2}) ]

这一细节对优化结果影响很大,后面踩坑部分还会提到。

4. 基于粒子群算法的无功注入优化控制:目标函数、约束与求解框架

4.1 为什么选粒子群而不是直接解析求解

电压控制问题在数学上是一个含非线性潮流约束的优化问题。如果网络规模小,可以用内点法或二次规划;但加入DG动态无功约束后,目标函数非凸,采用智能优化算法求解更稳健。粒子群算法实现简单、对目标函数光滑性要求低、全局搜索能力强,很适合这种“适应度函数内部要调用潮流计算”的场景。

4.2 优化模型:目标函数与约束条件

我最终采用的目标函数是节点电压偏差的加权平方和最小化:

[ \min J = \sum_{i=1}^{N_{bus}} w_i (U_i - U_{ref})^2 ]

其中,(U_{ref}=1.0),(w_i) 为权重,对电压偏差严重节点的权重设置为2,普通节点设置为1。如果不设置权重,粒子群会倾向于把整体偏差压小,但某些薄弱节点仍然越限。我在仿真中观察到,权重调整后,最低电压节点从0.897 pu提升到了0.948 pu,效果显著。

约束条件包括:

  1. 潮流平衡约束:优化后的DG无功注入必须满足潮流方程;
  2. DG无功上下限约束:(Q_{min,i} \le Q_i \le Q_{max,i});
  3. 节点电压约束:(U_{min} \le U_i \le U_{max})(0.95 pu ~ 1.05 pu);
  4. 线路潮流约束(在极端情况下很可能过载,但基态算例中未触发,所以暂时不加罚函数)。

约束处理采用“罚函数法”。对于电压越限的节点,在目标函数中加入惩罚项:

[ J_{penalty} = \mu \sum_{i \in \text{越限节点}} (U_i - U_{limit})^2 ]

罚系数 (\mu) 取1000起步。如果罚系数太小,粒子可能在越限区域徘徊;太大的话又会导致目标函数数值范围过大,影响粒子群收敛。具体调参经验放在最后一节。

4.3 粒子编码与算法流程

每个粒子对应一组DG无功出力的有序排列:

[ \text{粒子位置} x = [Q_1, Q_2, \ldots, Q_{N_{DG}}] ]

这里的维度是8,也就是8台分布式发电机的无功注入量。粒子速度同样是一个8维向量。适应度评估时,将当前粒子位置中的无功注入值带入潮流计算,求出所有节点电压,再计算目标函数和罚函数之和。

粒子群算法的核心更新公式是经典的速度-位置更新:

[ v_{i}^{k+1} = \omega v_i^k + c_1 r_1 (p_{best,i} - x_i^k) + c_2 r_2 (g_{best} - x_i^k) ]

[ x_i^{k+1} = x_i^k + v_i^{k+1} ]

我设置的参数:种群规模40,最大迭代次数80,惯性权重从0.9线性下降到0.4,学习因子 (c_1=c_2=1.5)。这个配置在56节点系统下的单次运行耗时大约3到5分钟,结果稳定。

下面是粒子群算法和潮流计算耦合的总体流程:

%% 粒子群主循环(伪代码结构) for iter = 1:maxIter for i = 1:popSize % 将粒子的Qdg值写入DG节点 mpc = setDG(mpc, Qdg(i,:)); % 调用潮流计算 results = powerFlow(mpc); % 计算目标函数 + 罚函数 fitness(i) = objective(results.V) + penalty(results.V); end % 更新个体最优和全局最优 for i = 1:popSize if fitness(i) < fitness_pbest(i) pbest(i,:) = Qdg(i,:); fitness_pbest(i) = fitness(i); end end [bestVal, idx] = min(fitness_pbest); if bestVal < fitness_gbest gbest = pbest(idx,:); fitness_gbest = bestVal; end % 更新速度和位置(略) end

5. Matlab程序架构与关键代码逐段拆解

5.1 程序文件结构与整体依赖关系

整个仿真项目我拆成了五个主要文件:

文件功能
main.m主程序,完成数据加载、参数设置、算法循环、结果输出
case56.m返回IEEE 56节点测试系统的节点和支路数据
powerFlow.m牛顿-拉夫逊潮流计算,输入mpc结构体,输出节点电压和雅可比矩阵
calSensitivity.m计算各DG注入无功对节点电压的灵敏度
psoVoltageControl.m粒子群优化算法主体

文件之间的依赖关系很清晰:main调用case56拿数据,然后调用powerFlow做初始潮流;在calSensitivity中会多次调用powerFlow计算扰动后的潮流;psoVoltageControl又需要反复调用powerFlow来评估适应度。为了避免重复构建导纳矩阵拖慢速度,我把makeYbus的结果缓存起来,在每次潮流计算时直接传入。

5.2 潮流计算函数的设计要点

牛顿-拉夫逊法实现时,最核心的雅可比矩阵迭代公式不复杂,但有几个实现细节要处理好:

一是平衡节点处理:平衡节点的电压幅值和相角固定,不参与迭代更新;二是PQ节点的无功和电压约束:当某个节点电压越限时,如果该节点原本是PQ节点,潮流会强行改变无功来满足电压约束吗?不会。PQ节点的无功是给定的,潮流计算只会算出电压,不会调节无功。这正好是我们需要的外部优化环节——粒子群负责调Q,潮流负责算U。

下面是powerFlow.m的核心循环:

function [V, converged, J] = powerFlow(mpc, Ybus) %% 牛顿-拉夫逊潮流计算(简化版) V = ones(nBus,1) + 1j*zeros(nBus,1); V(1) = 1.0; % 平衡节点 tol = 1e-8; maxIter = 30; for iter = 1:maxIter % 计算注入功率 S = V .* conj(Ybus * V); Pcal = real(S); Qcal = imag(S); % 计算功率偏差 dP = Psp - Pcal; dQ = Qsp - Qcal; % 去除平衡节点的功率偏差 dP(1) = 0; dQ(1) = 0; % 构造雅可比矩阵(此处需要子块J1~J4) J = [J1 J2; J3 J4]; % 求解修正方程 dTheta_dV = J \ [dP; dQ]; dTheta = dTheta_dV(1:nPQ+nPV); dV = dTheta_dV(nPQ+nPV+1:end); % 更新电压(具体更新逻辑略) if max(abs([dTheta; dV])) < tol converged = true; break; end end end

这段代码为了篇幅做了大量简化,实际使用还需要处理节点编号、PV节点、相角单位等细节。完整的牛顿-拉夫逊法建议参考经典的Matlab电力系统仿真教程,这里重点说明它与上层优化如何衔接。

5.3 灵敏度计算函数的实现

我在calSensitivity.m中采用了数值扰动法:

function S_UQ = calSensitivity(mpc, Ybus, dgIdx, baseV) %% 计算无功-电压灵敏度矩阵 nDG = length(dgIdx); S_UQ = zeros(length(baseV), nDG); dQ = 0.01; % 扰动步长 for j = 1:nDG mpc_dg = mpc; % 增加第j台DG的无功注入0.01 pu mpc_dg.bus(dgIdx(j), 5) = mpc_dg.bus(dgIdx(j), 5) - dQ; V1 = powerFlow(mpc, Ybus); V2 = powerFlow(mpc_dg, Ybus); S_UQ(:, j) = (abs(V2) - abs(V1)) / dQ; end end

这里需要注意符号:DG注入无功是减少节点无功负荷,所以mpc_dg.bus(:,5)减去dQ。灵敏度矩阵中的负值表示“注入无功会让该节点电压上升”,因为线路压降减小。

数值扰动步长选0.01 pu是个经验值:太大则线性近似误差大,太小则容易受潮流计算收敛精度影响。0.01 pu在1 MVA基准下就是10 kvar,对于10 kV配电网来说足够小。

5.4 粒子群优化函数的实现与收敛判据

粒子群函数中最容易出错的环节是“个体最优”和“全局最优”的更新判断。由于罚函数的存在,适应度值可能会出现“未越限但电压偏低”和“轻微越限但偏差小”两种情况。我采取的判断策略是:先比较是否越限,越限粒子直接淘汰;都不越限时比较目标函数值。这样可以避免粒子群为了追求低目标值而选择电压越限的解。

适应度函数写成:

function fit = calFitness(V, Qdg, Qmin, Qmax, weight) %% 计算适应度:电压偏差 + 无功越限罚函数 + 电压越限罚函数 Vdev = sum(weight .* (abs(V) - 1.0).^2); % 电压越限罚函数 Umax = 1.05; Umin = 0.95; penaltyV = 1000 * sum(abs(max(abs(V)-Umax, 0) + max(Umin-abs(V), 0)).^2); % 无功越限罚函数 penaltyQ = 1000 * sum(max(Qdg-Qmax, 0).^2 + max(Qmin-Qdg, 0).^2); fit = Vdev + penaltyV + penaltyQ; end

这里的weight向量在初始化时根据灵敏度结果给定:系统薄弱节点权重为1.5,其余为1.0。实际测试中,这个权重设置比统一权重收敛后的最低电压高0.02 pu左右。

6. 仿真结果对比与“意想不到”的结论

6.1 控制前后的电压分布对比

基态潮流下,56个节点中有7个节点电压低于0.95 pu,3个节点高于1.05 pu。经过粒子群优化得到的最优无功注入方案后,所有节点电压都回到了0.95 pu到1.05 pu之间。我把几个关键节点的数据列出来:

节点控制前电压(pu)控制后电压(pu)对应DG节点优化无功注入(Mvar)
350.9060.973330.52
410.9120.968390.46
470.8970.955450.58
520.9210.976520.41
231.0551.04218-0.15

从表里能看出一个规律:电压最低的节点,其附近的DG基本上都被分配了较高的无功注入量;而电压偏高的节点附近,DG不仅没有注入无功,反而吸收无功(负值),把电压“拉”回来。这说明粒子群算法虽然没有显式感知灵敏度矩阵,但最终解在空间分布上依然符合电气规律——电压对无功的灵敏度决定了最优无功资源的分布。

6.2 一个反直觉的结论:高灵敏度DG出力并不一定被调满

最初我猜测:既然电压偏低,那么所有具备无功调节能力的DG都应该满发无功。但优化结果显示,有些DG的无功出力只到其上限的60%~70%。原因在于,过度注入无功虽然能抬高特定节点电压,却可能造成邻近节点过电压,而且会增加馈线上的无功流动,继而增大网损。

为了验证这个结论,我做了另外两组对照实验:

  • 第一组:所有DG无功注入都设为上限的80%;
  • 第二组:用粒子群优化结果。

结果第一组的节点35电压上升到0.982 pu,但节点22、节点24的电压超过了1.055 pu,系统重新出现越限。反观优化结果,系统最大电压为1.049 pu,没有越限。这印证了一点:电压控制不是“越多越好”,而是“刚刚好”最好。无功注入要考虑电压空间分布,不能搞一刀切。

6.3 灵敏度分析结果在控制前的指引作用

在粒子群优化之前,我先计算了每台DG对薄弱节点的灵敏度。以节点35为例,与其电气距离最近的节点33上的DG对它的灵敏度最高,达到0.023 pu/Mvar;而接在节点52上的DG虽然同样有调节能力,对节点35的灵敏度只有0.006 pu/Mvar。这意味着,想让节点35电压上升0.02 pu,前者只需要注入约0.87 Mvar的无功,后者需要约3.3 Mvar,已经远远超出其无功上限。

这个对比说明一个工程上的常识:在配电网电压控制中,无功补偿设备的位置有时候比容量更重要。灵敏度的作用就是帮我们“选点”,粒子群的作用是帮我们“定量”。两者结合才能算出既经济又安全的方案。

7. 踩坑记录:潮流不收敛、粒子群早熟与参数调优的实战经验

7.1 分布式发电机是当作PQ节点还是PV节点

最开始我把DG当成PV节点,给定有功出力和电压设定值(1.0 pu),让潮流计算自动得出无功。想法很美好,结果潮流迭代多次不收敛。原因在于IEEE 56节点系统的R/X比不够低,PV节点的无功计算容易发散;而且在粒子群优化中,PV节点的无功是潮流内部算出来的,无法直接作为控制变量。

后来我把所有DG统一建模为PQ节点,无功值由粒子群给出。这样潮流收敛稳定,控制变量明确。唯一的代价是需要额外检查无功是否越限,但这本来就是优化器要做的事。所以我的建议是:在配电网无功优化类项目中,DG作为PQ节点配合外部优化器,比作为PV节点更顺。

7.2 罚函数权重不是越大越好

罚系数从100试到10000,发现100的时候,粒子群几乎无视电压越限;1000的时候效果很好;5000以上之后,目标函数中罚函数项占比过大,粒子群的所有粒子都被“压”到不越限区域,但电压偏差的区分度被削弱,导致粒子群搜索停滞,最终电压虽然不越限,却离1.0 pu还很远。

最终我采用动态罚函数:前20次迭代罚系数为100,让粒子群探索可行域周边;后60次迭代罚系数提升到2000,强制收紧越限约束。这样既保证了搜索多样性,又保证了最终解的可行性。

7.3 粒子群参数与随机种子的影响

粒子群是一种随机优化算法,每次运行结果会有细微差异。我在同一台机器上跑了20次,每次优化的目标函数值标准差约为0.002,最大最小电压波动约0.003 pu。如果对结果精度有要求,建议用确定性跟踪,比如设置rng(0)固定随机种子,或者在粒子群结束后用内点法做一次局部精调。

另一个经验是:种群40、迭代80的设置对于8个控制变量已经足够。我把种群扩到80、迭代扩到150,目标函数只改善了不到0.3%,但耗时增长了4倍。对工程研究来说,40×80是一个性价比很高的配置。

7.4 不要忽视基准值和无功方向的符号

这个坑最隐蔽。我最初把“DG注入无功”当作节点无功负荷的绝对值增加,结果潮流算出电压一路飙升,怎么调都不对。后来逐行检查代码,发现符号搞反了:节点注入功率的表达式是“负荷减去电源”,DG注入无功应该是在节点原有负的无功负荷上再减去Qdg,也就是让节点总的无功负荷更小,而不是更大。符号错一个,整个优化方向就反了。建议遇到怪异结果时,先别怀疑算法,先检查功率方向的定义。

差不多就是这些内容。这套流程跑通之后,我把代码里所有硬编码的参数都抽成了开头配置区,后续换其他配电网络测试系统只需要替换数据文件,改一改DG接入节点和容量,就能复用整个框架。如果你也在调试类似的电压无功优化问题,建议先从灵敏度分析入手,把网络特性摸清楚,再上粒子群,会少走很多弯路。

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

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

立即咨询