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

一、配电网重构原理

  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:sizepop
    if 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;
    else
        fitness_gbest(j) = 10^10; 
    end  
end                  
zbest = pop1(1,:);                            % 种群的历史最佳位置
forbidden=zbest;                              % 种群的禁忌对象
fitness_zbest = fitness_gbest(1);             % 种群的历史最佳适应度
for j=1:sizepop
    if 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 <= ger
    for 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:dim
            if  pop_v(j,i) > vlimit_max(i)
                pop_v(j,i) = vlimit_max(i);
            end
            if  pop_v(j,i) < vlimit_min(i)
                pop_v(j,i) = vlimit_min(i);
            end
        end
        
        %    更新位置并对位置进行边界处理
        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>=0
            if pop1(j,:)==forbidden
                [pop1(j,:),pop2(j,:),~,~]= CreatPSO_2(1,vlimit_max,vlimit_min);
            end
            success(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;
            else
                fitness_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;
        else
            success(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;
            else
                fitness_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 
    end
    record(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 on
    end
    title(['算法进度',num2str(iter/ger*100),'%,','最优方案断开支路:',num2str(pop22),',功率损耗:',num2str(fitness_zbest),'kW']);
    axis off
    hold 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 节点系统 及其他配电网重构问题的研究。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

下载Hugging Face模型的几种方式

1.网页下载 直接访问Hugging Face模型页面&#xff0c;点击“File and versions”选项卡&#xff0c;选择所需的文件进行下载。 2.使用huggingface-cli 首先&#xff0c;安装huggingface_hub: pip install huggingface_hub 然后&#xff0c;使用以下命令下载模型&#xff1…

【Dubbo+Zookeeper】——SpringBoot+Dubbo+Zookeeper知识整合

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

DeepSeek R1 学习笔记

DeepSeek为了方便大众的使用&#xff0c;同时提供了6个蒸馏版本 DeekSeek使用方式 1.大众方式&#xff1a; 网页版&#xff1a;DeepSeek App版&#xff1a;手机各大应用商店下载安装DeepSeek-AI智能对话助手 2.专业用户 开发者&#xff1a;调用API DeepSeek服务器 网址&a…

《从零构建企业级容器镜像生态:Harbor与Registry双星架构实战手记》

目录 一、企业级镜像中枢&#xff1a;Harbor架构深度解析 1.Harbor介绍 环境准备 2. Harbor战略部署 下载安装Harbor 关键配置文件 报错一 添加本地解析 登录测试Harbor 报错二 登录成功 测试 成功显示 二、轻量化镜像驿站&#xff1a;Registry闪电战部署 简单介…

FPGA之USB通信实战:基于FX2芯片的Slave FIFO回环测试详解

FPGA之Usb数据传输 Usb 通信 你也许会有疑问&#xff0c;明明有这么多通信方式和数据传输&#xff08;SPI、I2C、UART、以太网&#xff09;为什么偏偏使用USB呢? 原因有很多&#xff0c;如下&#xff1a; 1. 高速数据传输能力 高带宽&#xff1a;USB接口提供了较高的数据传…

mysql中in和exists的区别?

大家好&#xff0c;我是锋哥。今天分享关于【mysql中in和exists的区别?】面试题。希望对大家有帮助&#xff1b; mysql中in和exists的区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MySQL 中&#xff0c;IN 和 EXISTS 都用于进行子查询&#xff0c;但它…

Unity摄像机跟随物体

功能描述 实现摄像机跟随物体&#xff0c;并使物体始终保持在画面中心位置。 实现步骤 创建脚本&#xff1a;在Unity中创建一个新的C#脚本&#xff0c;命名为CameraFollow。 代码如下&#xff1a; using UnityEngine;public class CameraFollow : MonoBehaviour {public Tran…

springcloud sentinel教程

‌QPS&#xff08;Queries Per Second&#xff09;即每秒查询率 TPS&#xff0c;每秒处理的事务数目 PV&#xff08;page view&#xff09;即页面浏览量 UV 访问数&#xff08;Unique Visitor&#xff09;指独立访客访问数 一、初识Sentinel 什么是雪崩问题? 微服务之间相…

【Tools】Windows下Git 2.48安装教程详解

00. 目录 文章目录 00. 目录01. Git简介02. Git参考资料03. Git安装04. Git测试05. 附录 01. Git简介 Git(读音为/gɪt/。)是一个开源的分布式版本控制系统&#xff0c;可以有效、高速的处理从很小到非常大的项目版本管理。 [1] Git 是 Linus Torvalds 为了帮助管理 Linux 内核…

【Linux系统编程】初识系统编程

目录 一、什么是系统编程1. 系统编程的定义2. 系统编程的特点3. 系统编程的应用领域4. 系统编程的核心概念5. 系统编程的工具和技术 二、操作系统四大基本功能1. 进程管理&#xff08;Process Management&#xff09;2. 内存管理&#xff08;Memory Management&#xff09;3. 文…

神经网络|(十四)|霍普菲尔德神经网络-Hebbian训练

【1】引言 前序学习进程中&#xff0c;除了对基本的神经网络知识进行了学习&#xff0c;还掌握了SOM神经网络原理&#xff0c;文章链接包括且不限于&#xff1a; 神经网络|(十一)|神经元和神经网络-CSDN博客 神经网络|(十二)|常见激活函数-CSDN博客 神经网络|(十三)|SOM神经…

Hive八股

Hive八股 说一下GC模型遇到过gc调优吗yarn有哪些了解讲讲hqI转化为MR源码hbase读写流程hive数据倾斜page cache和buffer的区别和相同近来你关注了大数据生态哪些领域的发展&#xff0c;比如新的feature&#xff0c;新的领域等 Hive1Hive1hive简介2hive架构3hive与Hadoop的关系4…

Docker 部署 Graylog 日志管理系统

Docker 部署 Graylog 日志管理系统 前言一、准备工作二、Docker Compose 配置三、启动 Graylog 服务四、访问 Graylog Web 界面总结 前言 Graylog 是一个开源的日志管理平台&#xff0c;专为实时日志收集、分析和可视化设计。它支持强大的搜索功能&#xff0c;并且与 Elastics…

im即时聊天客服系统SaaS还是私有化部署:成本、安全与定制化的权衡策略

随着即时通讯技术的不断发展&#xff0c;IM即时聊天客服系统已经成为企业与客户沟通、解决问题、提升用户体验的重要工具。在选择IM即时聊天客服系统时&#xff0c;企业面临一个重要决策&#xff1a;选择SaaS&#xff08;软件即服务&#xff09;解决方案&#xff0c;还是进行私…

MySQL(单表)知识点

文章目录 1.数据库的概念2.下载并配置MySQL2.1初始化MySQL的数据2.2注册MYSQL服务2.3启动MYSQL服务2.4修改账户默认密码2.5登录MYSQL2.6卸载MYSQL 3.MYSQL数据模型3.1连接数据库 4.SQL简介4.1SQL的通用语法4.2SQL语句的分类4.3DDL语句4.3.1数据库4.3.2表(创建,查询,修改,删除)4…

同为科技智能PDU在数据中心场景的应用与解决方案

数据中心当前处于一个快速发展和技术变革的特殊时期&#xff0c;全新的人工智能应用正在重塑整个世界&#xff0c;为社会带来便捷的同时&#xff0c;也为数据中心的发展带来了新的机遇和挑战。智能算例的爆发式增长&#xff0c;对数据中心提出了大算力、高性能的新需求&#xf…

基于Asp.net的零食购物商城网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

Redis|Springboot集成Redis

文章目录 总体概述本地Java连接Redis常见问题集成Jedis集成lettuce集成RedisTemplate——推荐使用连接单机连接集群 总体概述 jedis-lettuce-RedisTemplate三者的联系 jedis第一代lettuce承上启下redistemplate着重使用 本地Java连接Redis常见问题 bind配置请注释掉保护模式…

【编译器】VSCODE编译C语言

【编译器】VSCODE编译C语言 文章目录 [TOC](文章目录) 前言一、下载配置二、代码1.main.c2.lanuch3.task 三、编译运行——方法一&#xff1a;编译器运行1.编译&#xff1a;终端-运行生成任务&#xff08;ctrlshiftB&#xff09;2.运行&#xff1a;运行-启动调试&#xff08;F5…

信息安全访问控制、抗攻击技术、安全体系和评估(高软42)

系列文章目录 信息安全访问控制、抗攻击技术、安全体系和评估 文章目录 系列文章目录前言一、信息安全技术1.访问控制2.抗攻击技术 二、欺骗技术1.ARP欺骗2.DNS欺骗3.IP欺骗 三、抗攻击技术1.端口扫描2.强化TCP/IP堆栈 四、保证体系和评估1.保证体系2.安全风险管理 五、真题在…