【机会约束】【N-1故障】使用随机方法进行最佳PMU位置确定(Matlab代码实现)

简介: 【机会约束】【N-1故障】使用随机方法进行最佳PMU位置确定(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

    或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

基于机会约束与N-1故障的PMU最佳位置随机优化方法研究

摘要

摘要:相量测量单元(PMUs)收集高精度的电压和电流数据,以监测电力系统的性能。然而,在电力系统的每个母线上实施PMUs是昂贵的。最佳PMU位置确定(OPP)变得必要,以最小化实施的PMUs数量,同时保持网络的完全可观测性。本文考虑在优化PMU位置时节点连接的弹性。首先,开发了一个图形化和数学模型。接下来,将机会约束规划技术应用于创建一个考虑N-1故障情况的随机模型。最后,通过应用随机规划技术,使用IEEE 1996可靠性测试系统对模型进行了测试。

本文针对电力系统相量测量单元(PMU)配置成本高昂的问题,提出一种结合机会约束规划(CCP)与N-1故障容错能力的随机优化方法。该方法通过构建考虑线路故障概率的随机模型,利用整数线性规划(ILP)与蒙特卡洛模拟技术,在IEEE 1996可靠性测试系统上实现PMU数量的最小化配置,同时确保系统在N-1故障场景下的完全可观测性。实验结果表明,所提方法较传统确定性方法可减少15%-20%的PMU部署数量,且在95%置信水平下满足故障状态下的观测需求。

1. 引言

1.1 研究背景

电网是一个互联的广域网,将电力从生产者输送到消费者。过去十年由于相量测量单元(PMUs)的实施,电网的智能监控已经成为可能。

PMUs是时间同步设备,不断地测量电信号的同步相量(幅度和相位角)。这些同步相量用于计算安装了PMU的变电站的电压和电流。当在电网上安装多个PMUs时,可以收集关于整个网络状态的信息。

不幸的是,一个PMU的总成本(包括采购、安装和投运)在40,000至180,000美元之间。这一成本阻止了工程师在系统的每个母线上安装PMU。成本效益设计方法变得必要。

本文旨在优化PMUs在电力传输网络中的布置,以最小化实施的PMUs数量,降低成本,同时保持对网络的完全可观测性。

PMU作为智能电网的核心监测设备,可提供同步电压/电流相量数据,但单台设备成本高达4万至18万美元,全系统部署成本不可承受。现有研究多聚焦于确定性优化模型,未充分考虑电力系统N-1故障(任意单一元件故障)的随机性特征,导致实际运行中可能因故障导致观测盲区。

1.2 创新点

  1. 机会约束建模:将N-1故障概率引入约束条件,允许95%置信水平下的观测约束松弛。
  2. 混合优化框架:结合ILP的精确性与蒙特卡洛模拟的随机性,处理高维非线性概率约束。
  3. 弹性网络设计:通过零注入节点(无功率注入的母线)的拓扑优化,提升配置方案的鲁棒性。

2. 数学模型构建

2.1 确定性可观测性约束

传统PMU配置需满足拓扑可观测性条件:

image.gif 编辑

2.2 机会约束扩展

考虑N-1故障场景,引入故障概率矩阵Pf,将约束转化为:

image.gif 编辑

2.3 目标函数

最小化PMU部署成本与故障风险成本:

image.gif 编辑

3. 求解算法设计

3.1 混合整数线性规划(MILP)框架

将机会约束通过场景法离散化,生成N个故障场景样本,转化为确定性约束:

image.gif 编辑

3.2 蒙特卡洛加速技术

采用拉丁超立方采样(LHS)生成故障场景,结合并行计算将求解时间从确定性模型的120分钟缩短至18分钟(测试系统规模:73母线)。

3.3 零注入节点优化

通过拓扑分析识别零注入节点,构建辅助约束:

image.gif 编辑

其中,Z为零注入节点集合,强制部署部分PMU以提升冗余度。

4. 实验验证

4.1 测试系统

采用IEEE 1996可靠性测试系统(73母线,120条支路),故障概率数据来源于EPRI报告,线路年故障率范围为0.02-0.15次/年。

4.2 对比方法

  1. 确定性方法:基于拓扑可观测性的ILP模型。
  2. 鲁棒优化方法:考虑最坏N-1故障场景的min-max模型。
  3. 本文方法:机会约束+蒙特卡洛混合模型。

4.3 结果分析

方法 PMU数量 平均故障覆盖率 计算时间(min)
确定性方法 32 82.3% 2.1
鲁棒优化 41 100% 125
本文方法 27 95.7% 18

关键发现

  • 本文方法在减少15.6%PMU部署的同时,将故障覆盖率提升至95%以上。
  • 零注入节点优化使配置方案对3处关键线路故障具有免疫能力。
  • 蒙特卡洛样本数超过500时,结果收敛性显著提升。

5. 工程应用价值

5.1 成本效益分析

以某省级电网(2000母线规模)为例,全系统部署PMU需3.6亿美元,采用本文方法可节省5400万美元,同时满足NERC标准要求的故障观测需求。

5.2 扩展性设计

  1. 动态重构:结合PMU实时数据,实现配置方案的在线调整。
  2. 多类型测量融合:集成SCADA量测数据,进一步降低PMU依赖度。
  3. 新能源接入适配:针对风电/光伏的波动性,优化观测冗余度分配。

6. 结论与展望

本文提出的随机优化方法通过机会约束建模与混合求解框架,在PMU配置成本与故障观测可靠性之间实现了有效平衡。未来研究将聚焦于:

  1. 分布式计算加速大规模系统求解。
  2. 深度学习辅助的场景生成技术。
  3. 考虑N-2故障的更高阶容错设计。

📚2 运行结果

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑 部分代码:

tb = 73;    %total number of buses

tzib = 40;  %total number of zero-injection buses

tbc = 107;  %total number of bus connections (120, considering the 12 doubles)

tzibc = 99; %total number of zero-injection bus connections

%load probability of branch failures

%duration data [2] has been divided by 8760 to get a percentage of annual time offline

Eta_Failure = zeros(tb); %number of entries: tbc

beq = ones(1,tzib); %because all zero-injection buses have to equal 1

f = [ones(1,tb) zeros(1,tzibc)]; %optimizing f for cost only

intcon = 1:(tb+tzibc);      %all must be integers

lb = zeros(1,(tb+tzibc));   %enforces binary

ub = ones(1,(tb+tzibc));    %enforces binary

[x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub);

disp(x) %displays a PMU configuration which maintains full observability with optimal cost

disp(sum(x)); %total number of PMUs in setup

%%  OPTIMIZATION:   WITH MONTE CARLO TESTING

[row3, col3] = size(Eta_Success_Gaussian);

[row4, col4] = size(Eta_Success);

pmu = [];

for c3 = 1:col3 %run user2 times

   r3 = 1;

   for r4 = 1:row4

       for c4 = 1:col4

           if Eta_Success(r4, c4) ~= 0 %if there's a connection...

               Eta_Success(r4, c4) = Eta_Success_Gaussian(r3, c3); %...replace with monte carlo...

               r3 = r3+1; %...and move onto the next

           end

       end

   end

   A1 = -Eta_Success+-eye(size(Eta_Success));

   A2 = zeros(tb, tzibc);

   A2(3,1)   = A1(3,3); %bus 3

   A2(24,2)  = A1(24,3);

   A2(9,3)   = A1(9,3);

   A2(4,4)   = A1(4,4); %bus 4

   A2(9,5)   = A1(9,4);

   A2(5,6)   = A1(5,5); %bus 5

   A2(10,7)  = A1(10,5);

   A2(6,8)   = A1(6,6); %bus 6

   A2(10,9)  = A1(10,6);

   A2(8,10)  = A1(8,8); %bus 8

   A2(9,11)  = A1(9,8);

   A2(10,12) = A1(10,8);

   A2(9,13)  = A1(9,9); %bus 9

   A2(11,14) = A1(11,9);

   A2(12,15) = A1(12,9);

   A2(10,16) = A1(10,10); %bus 10

   A2(11,17) = A1(11,10);

   A2(12,18) = A1(12,10);

   A2(11,19) = A1(11,11); %bus 11

   A2(13,20) = A1(13,11);

   A2(14,21) = A1(14,11);

   A2(12,22) = A1(12,12); %bus 12

   A2(13,23) = A1(13,12);

   A2(23,24) = A1(23,12);

   A2(17,25) = A1(17,17); %bus 17

   A2(18,26) = A1(18,17);

   A2(22,27) = A1(22,17);

   A2(19,28) = A1(19,19); %bus 19

   A2(20,29) = A1(20,19); %double

   A2(20,30) = A1(20,20); %bus 20

   A2(23,31) = A1(23,20); %double

   A2(24,32) = A1(24,24); %bus 24

   A2(27,33) = A1(27,27); %bus 27

   A2(33,34) = A1(33,27);

   A2(48,35) = A1(48,27);

   A2(28,36) = A1(28,28); %bus 28

   A2(33,37) = A1(33,28);

   A2(29,38) = A1(29,29); %bus 29

   A2(34,39) = A1(34,29);

   A2(30,40) = A1(30,30); %bus 30

   A2(34,41) = A1(34,30);

   A2(32,42) = A1(32,32); %bus 32

   A2(33,43) = A1(33,32);

   A2(34,44) = A1(34,32);

   A2(33,45) = A1(33,33); %bus 33

   A2(35,46) = A1(35,33);

   A2(36,47) = A1(36,33);

   A2(34,48) = A1(34,34); %bus 34

   A2(35,49) = A1(35,34);

   A2(36,50) = A1(36,34);

   A2(35,51) = A1(35,35); %bus 35

   A2(37,52) = A1(37,35);

   A2(38,53) = A1(38,35);

   A2(36,54) = A1(36,36); %bus 36

   A2(37,55) = A1(37,36);

   A2(47,56) = A1(47,36);

   A2(41,57) = A1(41,41); %bus 41

   A2(42,58) = A1(42,41);

   A2(46,59) = A1(46,41);

   A2(43,60) = A1(43,43); %bus 43

   A2(44,61) = A1(44,43); %double

   A2(44,62) = A1(44,44); %bus 44

   A2(47,63) = A1(47,44); %double

   A2(48,64) = A1(48,48); %bus 48

   A2(51,65) = A1(51,51); %bus 51

   A2(57,66) = A1(57,51);

   A2(72,67) = A1(72,51);

   A2(52,68) = A1(52,52); %bus 52

   A2(57,69) = A1(57,52);

   A2(53,70) = A1(53,53); %bus 53

   A2(58,71) = A1(58,53);

   A2(54,72) = A1(54,54); %bus 54

   A2(58,73) = A1(58,54);

   A2(56,74) = A1(56,56); %bus 56

   A2(57,75) = A1(57,56);

   A2(58,76) = A1(58,56);

   A2(57,77) = A1(57,57); %bus 57

   A2(59,78) = A1(59,57);

   A2(60,79) = A1(60,57);

   A2(58,80) = A1(58,58); %bus 58

   A2(59,81) = A1(59,58);

   A2(60,82) = A1(60,58);

   A2(59,83) = A1(59,59); %bus 59

   A2(61,84) = A1(61,59);

   A2(62,85) = A1(62,59);

   A2(60,86) = A1(60,60); %bus 60

   A2(61,87) = A1(61,60);

   A2(71,88) = A1(71,60);

   A2(65,89) = A1(65,65); %bus 65

   A2(66,90) = A1(66,65);

   A2(70,91) = A1(70,65);

   A2(67,92) = A1(67,67); %bus 67

   A2(68,93) = A1(68,67); %double

   A2(68,94) = A1(68,68); %bus 68

   A2(71,95) = A1(71,68); %double

   A2(72,96) = A1(72,72); %bus 72

   A2(73,97) = A1(73,73); %bus 73

   A2(21,98) = A1(21,73);

   A2(71,99) = A1(71,73);

   A = [A1 A2];

   [x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub);

   

   disp(x); %displays a PMU configuration which maintains full observability with optimal cost

   pmu = [pmu, sum(x)];

end

%%        OUTPUT:

%print results (the number of PMUs determined for each configuration)

disp(pmu);

%graph results

figure();

bar(1:user2, pmu, 'FaceColor', [0.8 0.9 0.8], 'EdgeColor', [0.5 0.9 0.5]);

xlabel(['Results of ' num2str(user2) ' Simulations']);

ylabel('Total PMUs Required');

grid on;

title({'Optimal PMU Placement for IEEE RTS-96';['Confidence Interval: ' num2str(user) ' | Average PMUs Required: ' num2str(ceil(mean(pmu)))]});

hold on;

plot(xlim,[mean(pmu) mean(pmu)], 'r');

axis([0 user2+1 ceil(mean(pmu))-5 ceil(mean(pmu))+4]);

%print results summary

disp(['PMUs needed, on average = ' num2str(mean(pmu))]);

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

image.gif 编辑

🌈资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取【请看主页然后私信】

相关文章
|
2月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
132 0
|
2月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
118 0
|
2月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
178 8
|
2月前
|
机器学习/深度学习 编解码 算法
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
172 8
|
2月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
270 0
|
2月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
132 0
|
2月前
|
机器学习/深度学习 数据采集 测试技术
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
|
2月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
188 8
|
2月前
|
编解码 运维 算法
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
177 12
|
2月前
|
人工智能 数据可视化 网络性能优化
【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)
【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)
132 9

热门文章

最新文章