基于粒子群算法的配电网重构

一、配电网重构原理

  1. 定义
    配电网重构是指在满足运行约束的前提下,通过改变开关状态优化配电网性能,提高系统的经济效益和运行效率。

  2. 拓扑约束

    • 配电网必须保持径向拓扑,避免环网或孤岛。
    • 采用算法控制开关状态的选择,确保有效拓扑。
  3. 算法特点

    • 配电网重构是一个 0-1 规划问题,决策变量为开关的开断状态。
    • 采用二进制粒子群优化算法(BPSO),并引入 Sigmoid 函数 映射粒子位置到 {0,1} 变量,以保证有效性。
  4. 示例系统

    • 使用33节点系统进行仿真,包括13个常闭分段开关和2个常开联络开关。
    • 通过优化选择开关断开位置,提高计算效率并减少无效状态。
  5. 目标函数

    • 选择网损最小作为优化目标。

二、代码组成

程序包含 10 个 MATLAB (.m) 文件,各文件功能如下:

  1. main_2_loss.m(主函数)

    • 采用二进制粒子群算法进行配电网重构。
    • 采用 3 种不同形式 存储粒子位置:
      • pop1:37维向量,每行 0/1(1 代表支路闭合,0 代表断开)。
      • pop2:5维向量,表示断开的 5 条支路编号。
      • pop3:5维向量,表示断开的支路在五个闭合回路中的编号。
    • 在每次更新前,计算适应度函数(网损最小最优)。
    • 调用 huanlu 判断方案是否存在环路或孤岛,若违反约束则适应度赋值极大,避免不合理方案。
  2. CreatPSO_2.m(粒子初始化)

    • 生成初始粒子,在每个回路随机断开一条支路,确保合理性。
  3. change_pop.m(粒子格式转换)

    • 负责 pop1pop2pop3 三种形式的转换,提高计算效率。
  4. huan.m(存储环路信息)

    • 记录每个环路中所有支路的编号,便于环路检测。
  5. point.m(存储节点信息)

    • 记录具有 2 条以上支路连接的节点,例如 point1 代表节点 3。
  6. huanlu.m(拓扑约束检测)

    • 判断粒子是否满足拓扑约束:
      • flag1-6:环路公共支路最多只能断开 1 条。
      • flag7-14:连接 3 条支路的节点最多只能断开 2 条。
    • 若满足约束输出 1,否则输出 0
  7. IEEE33.m(系统参数)

    • 记录 IEEE 33 节点系统的参数信息。
  8. set_up_2.m(算法参数设置)

    • 设定位置/速度上下限,定义算法搜索空间。
  9. loss.m(目标函数计算)

    • 计算系统网损,作为适应度函数的评估标准。
  10. sigmoid.m(Sigmoid 函数)

  • 映射粒子位置到 {0,1} 变量,确保粒子更新合理。

三、代码运行结果

主函数示例:

%二进制粒子群算法
%% 清空环境
clc;clear;
%% 读取数据
IEEE33;
%% 设置种群参数
sizepop = 50;                   % 初始种群个数
dim = 37;                       % 空间维数
ger = 22;                      % 最大迭代次数    
[xlimit_max,xlimit_min,vlimit_max,vlimit_min] = set_up_2();
c_1 = 0.8;                       % 惯性权重
c_2 = 1.5;                     % 自我学习因子
c_3 = 1.5;                     % 群体学习因子 
%% 生成初始种群
%  首先随机生成初始种群位置
%  然后随机生成初始种群速度
%  然后初始化个体历史最佳位置,以及个体历史最佳适应度
%  然后初始化群体历史最佳位置,以及群体历史最佳适应度
%  设置禁忌对象和其对应的持续迭代次数
[pop1,pop2,pop3,pop_v] = CreatPSO_2(sizepop,vlimit_max,vlimit_min);
pop=[pop1,pop2,pop3];
gbest = pop1;                                % 每个个体的历史最佳位置
success = huanlu(pop2);
L=5;%禁忌对象对应的持续迭代次数
for j=1:sizepopif success(j)
%         [SAIFI,SAIDI,CAIDI,ASAI,Lambda_load,Gamma_load,U_load] = reliability(pop1(j,:));
%         fitness_gbest(j) = SAIDI;                      % 每个个体的历史最佳适应度[V,u,Loss] = loss(pop2(j,:));fitness_gbest(j) = Loss;elsefitness_gbest(j) = 10^10; end  
end                  
zbest = pop1(1,:);                            % 种群的历史最佳位置
forbidden=zbest;                              % 种群的禁忌对象
fitness_zbest = fitness_gbest(1);             % 种群的历史最佳适应度
for j=1:sizepopif fitness_gbest(j) < fitness_zbest       % 如果求最小值,则为<; 如果求最大值,则为>; zbest = pop1(j,:);fitness_zbest=fitness_gbest(j);end
end
%% 粒子群迭代
%    更新速度并对速度进行边界处理    
%    更新位置并对位置进行边界处理
%    进行约束条件判断并计算新种群各个个体位置的适应度
%    新适应度与个体历史最佳适应度做比较
%    个体历史最佳适应度与种群历史最佳适应度做比较
%    再次循环或结束
iter = 1;                        %迭代次数
record = zeros(ger, 1);          % 记录器
record_average=zeros(ger, 1);
%画图的一些准备
node_location=[(1:14)',2*ones(14,1);(15:18)',2.5*ones(4,1);(2:5)',ones(4,1);(3:5)',4*ones(3,1);(6:13)',3*ones(8,1)];%节点的位置
line_plot=branch(:,2:3);
figure(1)
while iter <= gerfor j=1:sizepop%    更新速度并对速度进行边界处理 pop_v(j,:)= c_1 * pop_v(j,:) + c_2*rand*(gbest(j,:)-pop1(j,:))+c_3*rand*(zbest-pop1(j,:));% 速度更新for i=1:dimif  pop_v(j,i) > vlimit_max(i)pop_v(j,i) = vlimit_max(i);endif  pop_v(j,i) < vlimit_min(i)pop_v(j,i) = vlimit_min(i);endend%    更新位置并对位置进行边界处理S=sigmoid(pop_v(j,:));huan;index=zeros(1,5);duan=zeros(1,5);[~,index(1)]=min(S(huan1));duan(1)=huan1(index(1));huan2(huan2==duan(1))=[];[~,index(2)]=min(S(huan2));duan(2)=huan2(index(2));huan3([find(huan3==duan(1)),find(huan3==duan(2))])=[];[~,index(3)]=min(S(huan3));duan(3)=huan3(index(3));huan4([find(huan4==duan(1)),find(huan4==duan(2)),find(huan4==duan(3))])=[];[~,index(4)]=min(S(huan4));duan(4)=huan4(index(4));huan5([find(huan5==duan(1)),find(huan5==duan(2)),find(huan5==duan(3)),find(huan5==duan(4))])=[];[~,index(5)]=min(S(huan5));duan(5)=huan5(index(5));pop1(j,:)=ones(1,37);pop1(j,duan)=0;pop2(j,:)=duan;if L>=0if pop1(j,:)==forbidden[pop1(j,:),pop2(j,:),~,~]= CreatPSO_2(1,vlimit_max,vlimit_min);endsuccess(j) = huanlu(pop2(j,:));%    进行约束条件判断并计算新种群各个个体位置的适应度if success(j)
%                     [SAIFI,SAIDI,CAIDI,ASAI,Lambda_load,Gamma_load,U_load] = reliability(pop1(j,:));
%                     fitness_pop(j) = SAIDI;                      % 每个个体的历史最佳适应度     [V,u,Loss] = loss(pop2(j,:));fitness_pop(j) = Loss;elsefitness_pop(j) = 10^10; end  %    新适应度与个体历史最佳适应度做比较if fitness_pop(j) < fitness_gbest(j)       % 如果求最小值,则为<; 如果求最大值,则为>; gbest(j,:) = pop1(j,:);               % 更新个体历史最佳位置            fitness_gbest(j) = fitness_pop(j);     % 更新个体历史最佳适应度end   %    个体历史最佳适应度与种群历史最佳适应度做比较if fitness_gbest(j) < fitness_zbest        % 如果求最小值,则为<; 如果求最大值,则为>; zbest = gbest(j,:);                    % 更新群体历史最佳位置  fitness_zbest=fitness_gbest(j);        % 更新群体历史最佳适应度  end    L=L-1;elsesuccess(j) = huanlu(pop2(j,:));%    进行约束条件判断并计算新种群各个个体位置的适应度if success(j)
%                 [SAIFI,SAIDI,CAIDI,ASAI,Lambda_load,Gamma_load,U_load] = reliability(pop1(j,:));
%                 fitness_pop(j) = SAIDI;                      % 每个个体的历史最佳适应度[V,u,Loss] = loss(pop2(j,:));fitness_pop(j) = Loss;elsefitness_pop(j) = 10^10; end  %    新适应度与个体历史最佳适应度做比较if fitness_pop(j) < fitness_gbest(j)       % 如果求最小值,则为<; 如果求最大值,则为>; gbest(j,:) = pop1(j,:);               % 更新个体历史最佳位置            fitness_gbest(j) = fitness_pop(j);     % 更新个体历史最佳适应度end   %    个体历史最佳适应度与种群历史最佳适应度做比较if fitness_gbest(j) < fitness_zbest        % 如果求最小值,则为<; 如果求最大值,则为>; zbest = gbest(j,:);                    % 更新群体历史最佳位置  fitness_zbest=fitness_gbest(j);        % 更新群体历史最佳适应度  end    forbidden=zbest;  L=2;end endrecord(iter) = fitness_zbest;%最小值记录record_average(iter)=mean(fitness_gbest);%% 实时更新图像[~,pop22,~] = change_pop(zbest,1);line_copy=line_plot;line_copy(pop22,:)=[];for k=1:length(line_copy)m=[node_location(line_copy(k,1),1),node_location(line_copy(k,2),1)];n=[node_location(line_copy(k,1),2),node_location(line_copy(k,2),2)];plot(m,n,'bo-')hold onendtitle(['算法进度',num2str(iter/ger*100),'%,','最优方案断开支路:',num2str(pop22),',功率损耗:',num2str(fitness_zbest),'kW']);axis offhold off;pause(0.001);iter = iter+1; 
end
% pop2
%% 输出结果
disp(['最小功率损耗:',num2str(fitness_zbest),'kW'])
[MinV1,u1,Loss1] = loss(pop22);
[MinV2,u2,Loss2] = loss(33:37);
disp(['最低电压:',num2str(MinV1*12.66),'kV'])
disp(['断开的支路:',num2str(pop22)])
figure(1)
plot(1:ger,record)
title('算法收敛情况');
xlabel('迭代次数')
ylabel('种群最优适应度')
figure(2)
plot(1:33,u1,'r-o')
title('各节点电压');
xlabel('节点')
ylabel('电压幅值/kV')
hold on
plot(1:33,u2,'b-s')
legend('重构后的系统','初始系统')

代码运行结果

四、完整代码获取链接

代码下载链接:基于粒子群算法的配电网重构​ 一、配电网重构原理定义: 配电网重构是指在满足运行约束的前提下,通过改变开关状态优化配电网性能,提高系统的经济效益和运行效率。拓扑约束:配电网必须保持径向拓扑,避免环网或孤岛。采用算法控制开关状态的选择,确保有效拓扑。算法特点:配电网重构是一个 0-1 规划问题,决https://mbd.pub/o/bread/aJWakpty

五、总结

  • 该程序利用**二进制粒子群优化算法(BPSO)**实现配电网重构,通过优化开关状态减少网损,提高系统运行效率。
  • 采用 环路检测、约束条件控制、格式转换 等方法,保证优化方案合理,避免孤岛和环网结构。
  • 代码模块化清晰,适用于 IEEE 33 节点系统 及其他配电网重构问题的研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31608.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自然语言处理:无监督朴素贝叶斯模型

介绍 大家好&#xff0c;博主又来和大家分享自然语言处理领域的知识了&#xff0c;今天给大家介绍的是无监督朴素贝叶斯模型。 在自然语言处理这个充满挑战又极具魅力的领域&#xff0c;如何从海量的文本数据中挖掘有价值的信息&#xff0c;一直是研究者们不断探索的课题。无…

软件工程概述

软件开发生命周期 软件定义时期&#xff1a;包括可行性研究和详细需求分析&#xff0c;任务是确定软件开发的总目标。 问题定义可行性研究&#xff08;经济、技术、操作、社会可行性&#xff0c;确定问题和解决办法&#xff09;需求分析&#xff08;确定功能需求&#xff0c;性…

基于51单片机的日历流水灯proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1lt1ubDhKNTeIcP0Kf1UXrA 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C51 是一款常用的 8 位单片机&#xff0c;由 Atmel 公司&#xff08;现已被 Microchip 收…

【Go沉思录】朝花夕拾:探究 Go 接口型函数

本文目录 序1.接口型函数案例方式1 GetterFunc 类型的函数作为参数方式2 实现了 Getter 接口的结构体作为参数价值 2.net/http包中的使用场景 序 之前写Geecache的时候&#xff0c;遇到了接口型函数&#xff0c;当时没有搞懂&#xff0c;现在重新回过头研究复习Geecache的时候…

【若依框架】代码生成详细教程,15分钟搭建Springboot+Vue3前后端分离项目,基于Mysql8数据库和Redis5,管理后台前端基于Vue3和Element Plus,开发小程序数据后台

今天我们来借助若依来快速的搭建一个基于springboot的Java管理后台&#xff0c;后台网页使用vue3和 Element Plus来快速搭建。这里我们可以借助若依自动生成Java和vue3代码&#xff0c;这就是若依的强大之处&#xff0c;即便你不会Java和vue开发&#xff0c;只要跟着石头哥也可…

Java 线程与线程池类/接口继承谱系图+核心方法详解

Java 线程与线程池类/接口继承谱系图 1. 线程相关类与接口关系 #mermaid-svg-shTOx2cIkm79Zevf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-shTOx2cIkm79Zevf .error-icon{fill:#552222;}#mermaid-svg-shTOx2cI…

BFS(十三)463. 岛屿的周长

463. 岛屿的周长 给定一个 row x col 的二维网格地图 grid &#xff0c;其中&#xff1a;grid[i][j] 1 表示陆地&#xff0c; grid[i][j] 0 表示水域。 网格中的格子 水平和垂直 方向相连&#xff08;对角线方向不相连&#xff09;。整个网格被水完全包围&#xff0c;但其中恰…

使用 Ansys Mechanical 和 optiSLang 进行材料模型校准

介绍 提供与实验数据匹配的准确仿真结果的材料模型是成功对实际应用进行 FEA 仿真的基础。根据实验数据校准材料模型是一个优化问题&#xff0c;其中仿真和真值信号之间的“距离”最小&#xff0c;表明模型与实验的“接近”程度。在此示例中&#xff0c;我们将对校准示例进行概…

SSA-朴素贝叶斯分类预测matlab代码

麻雀搜索算法&#xff08;Sparrow Search Algorithm&#xff0c;简称 SSA&#xff09;是于 2020 年提出的一种新兴群智能优化算法&#xff0c;其灵感主要来源于麻雀的觅食行为以及反捕食行为。 本次使用的数据是 Excel 格式的分类数据集数据。数据集被合理划分为训练集、验证集…

Houdini SOP层 Scatter节点

SOP 代表 Surface Operator&#xff08;几何体操作节点&#xff09;&#xff0c;所有几何体的建模、变形、分布等操作都在此层级完成。 Scatter节点的作用就是 以不同的密度在模型表面撒点 Scatter 节点属于 SOP&#xff08;几何体&#xff09;层级&#xff1a; 进入 Geometr…

数据结构:有序表的合并

前文介绍了《有序表的插入》&#xff0c;本文介绍有序表的合并。这两种对有序表的操作&#xff0c;是数据结构中常考的内容&#xff0c;特别是在 408 考卷中&#xff0c;在算法设计的题目中&#xff0c;有可能会考查对有序表的操作。那么&#xff0c;这两篇文章中的方法就是能够…

STM32Cubemx-H7-8-维特科技WT61C-TTL陀螺仪获取XYZ角度

前言 本人玩车的时候要用到陀螺仪 MPU6050容易卡死&#xff0c;然后还很漂&#xff0c;还是太难用了 68块钱的陀螺仪再上位机上的效果挺满意&#xff0c;于是打算用串口用到自己的模型上 本文教大家如何编写串口程序&#xff0c;通过串口获取角度 大家把本文的原理学会后&…

本地部署Navidrome个人云音乐平台随时随地畅听本地音乐文件

文章目录 前言1. 安装Docker2. 创建并启动Navidrome容器3. 公网远程访问本地Navidrome3.1 内网穿透工具安装3.2 创建远程连接公网地址3.3 使用固定公网地址远程访问 前言 今天我要给大家安利一个超酷的私有化音乐神器——Navidrome&#xff01;它不仅让你随时随地畅享本地音乐…

音视频入门基础:RTP专题(15)——FFmpeg源码中,获取RTP的视频信息的实现

一、引言 通过FFmpeg命令可以获取到SDP文件描述的RTP流的视频压缩编码格式、色彩格式&#xff08;像素格式&#xff09;、分辨率、帧率信息&#xff1a; ffmpeg -protocol_whitelist "file,rtp,udp" -i XXX.sdp 本文以H.264为例讲述FFmpeg到底是从哪个地方获取到这…

配置 Thunderbird 以使用 outlook 邮箱

配置 Thunderbird 以使用 outlook 邮箱 thunder bird 作为邮件客户端非常好用&#xff0c;不用每次登录邮箱网页端查看邮件&#xff0c;直接打开配置好的 thunder bird 即可免登录查看邮件。 0. 什么是 Thunder Bird ? https://www.thunderbird.net/zh-CN/ Thunderbird 创立…

关于ModbusTCP/RTU协议转Ethernet/IP(CIP)协议的方案

IGT-DSER智能网关模块支持西门子、倍福(BECKHOFF)、罗克韦尔AB&#xff0c;以及三菱、欧姆龙等各种品牌的PLC之间通讯&#xff0c;支持Ethernet/IP(CIP)、Profinet(S7)&#xff0c;以及FINS、MC等工业自动化常用协议&#xff0c;同时也支持PLC与Modbus协议的工业机器人、智能仪…

蓝桥杯省赛真题C++B组-裁纸刀2022

一、题目 问题描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝有一个裁纸刀&#xff0c;每次可以将一张纸沿一条直线裁成两半。 小蓝用一张纸打印出两行三列共 6 个二维码&#xff0c;至少使用九次裁出来&#x…

阿里云操作系统控制台实战评测:提升云资源管理与监控效率

文章目录 前言产品介绍操作系统控制台体验阿里云操作系统开通 帮助与总结建议 前言 随着云计算和虚拟化技术的发展&#xff0c;操作系统控制台作为运维管理的核心工具之一&#xff0c;在现代IT环境中发挥着越来越重要的作用。它提供了一种更加直观、高效的方式来管理操作系统&…

C++ 链表List使用与实现:拷贝交换与高效迭代器细致讲解

目录 list的使用&#xff1a; 构造与赋值 元素访问 修改操作 容量查询 链表特有操作 拼接&#xff08;Splice&#xff09; C11 新增方法 注意&#xff1a; stl_list的模拟实现&#xff1a; 一、链表节点设计的艺术 1.1 结构体 vs 类的选择 二、迭代器实现的精髓 2…

复试难度,西电卓越工程师学院(杭研院)考研录取情况

01、卓越工程师学院各个方向 02、24卓越工程师学院&#xff08;杭研院&#xff09;近三年复试分数线对比 PS&#xff1a;卓越工程师学院分为广研院、杭研院 分别有新一代电子信息技术、通信工程、集成电路工程、计算机技术、光学信息工程、网络信息安全、机械&#xff0c;这些…