(文章复现)基于变异粒子群算法的主动配电网故障恢复策略

news2024/11/16 19:41:12

参考文献:

[1]徐岩,张荟,孙易洲.基于变异粒子群算法的主动配电网故障恢复策略[J].电力自动化设备,2021,41(12):45-53.DOI:10.16081/j.epae.202108030.

1.基本原理

        为提高主动配电网故障恢复的快速性和可靠性,提出一种基于变异粒子群算法的恢复策略。光储系统与负荷特性模型的构建是研究策略的基础,利用光储模型保证负荷可靠恢复,在构建负荷特性模型时考虑负荷时变性、需求时变性及负荷可控性的特点。在建立的光储系统与负荷特性模型基础上研究故障恢复策略,首先对配电网进行动态孤岛划分,利用光储系统对孤岛内负荷进行可靠恢复,保证用户侧需求度高的负荷优先恢复,然后以总失电负荷最少、网损最小及开关动作次数最少为综合目标函数,运用变异粒子群算法得到孤岛与主网配合的配电网综合恢复策略,提高了主动配电网可靠性。最后,采用IEEE 33节点系统进行算例分析,结果验证了模型与恢复策略的优越性。

1.1 动态孤岛划分策略 

        在故障恢复过程中为充分利用 DG 出力,利用孤岛划分对配电网中的重要负荷进行恢复。

1.1.1孤岛划分的原则

        在研究配电网孤岛划分方案时,应考虑以下原则:

        1)确保方案在孤岛运行时能够安全、稳定,且具备并入主网运行的能力;

        2)在保证孤岛内的负荷与损耗之和小于分布式光伏出力容量的前提下,孤岛内应包含尽可能多的负荷,这样既能充分发挥分布式光伏的供电能力,又不会造成过负荷的情况;

        3)在进行孤岛划分时,应优先恢复FRload,t中的负荷。

1.1.2动态孤岛划分数学模型

        当含有分布式光储系统的配电网发生故障时,根据光伏在故障时段的实际出力,对配电网进行孤岛划分,利用孤岛对重要负荷进行供电恢复,以提高供电可靠性。

        1)目标函数

        利用光伏系统在故障时刻的实际出力作为孤岛的供电量,考虑在孤岛划分过程中,首先恢复 FRload,t中的负荷,切除最少的负荷,尽可能多地恢复其他负荷。因此,t时刻孤岛划分的目标函数为:

        2)约束条件

1.1.3拓扑搜索方法

        利用广度优先搜索BFS(Breadth First Search)与深度优先搜索DFS(Depth-First Search)法在孤岛划分过程中对配电网拓扑进行搜索。BFS法是从图中的根节点开始搜索与之相连的节点,并对该层节点进行编号,再以该层节点作为顶点继续搜索下一层的子节点,按照此操作逐层搜索,直至搜索完所有节点。DFS 法是从图中的根节点开始搜索,如果发现有以此为起点的边未被搜索到,则沿此边继续搜索,当某一节点所有的边都被搜索完毕后,搜索回溯到发现该节点的边的起始点,直至搜索完根节点可达的所有节点。

1.1.4 孤岛划分流程

        在故障时刻利用分布式光储系统对孤岛内的负荷进行恢复,孤岛划分流程如附录 A 图 A1 所示。

1.2故障恢复策略

        1.1中利用光储系统孤岛运行对配电网中的FRload,t进行恢复,本节在孤岛划分的基础上,利用DG与主网的协调控制对配电网进行恢复,对孤岛内开关重新编码并令其参与主网的恢复过程,采用变异粒子群算法MPSO(Mutation Particle Swarm Optimization algorithm)在保证原孤岛内恢复的负荷不断电的同时进行最优故障恢复方案的设计。

1.2.1目标函数

        在故障恢复问题的研究中,设计的目标函数包括总失电负荷最少、网损最小、开关动作次数最少,如式(24)所示。

        约束条件同式(14)—(19)。

1.2.2故障恢复策略

        故障恢复策略的流程如附录A图A2所示:

2.求解方法 

2.1 BPSO

        粒子群算法已广泛应用于配电网故障恢复策略的研究中,该算法具有操作简单、收敛速度快、易于实现等优点。由于配电网中的开关操作只存在开、合2种状态,因此对BPSO进行改进,利用离散BPSO解决配电网故障恢复问题。

        每个粒子代表一组开关的状态,若开关闭合,则粒子中对应的位取值为 1,若断开则取值为 0。在离散 BPSO中,每个二进制位的速度更新公式为:

        由于离散 BPSO 没有原始粒子群算法的粒子位置更新公式,因此利用位变量取 1 的概率表示粒子的速度。利用 sigmoid 函数将速度 vid 映射到区间[0,1]内,如式(21)所示,粒子通过式(22)改变位置。

2.2 MPSO

        由于离散BPSO自身存在易陷入局部最优、收敛早熟等问题,引入线性微分递减惯性权重 LDIW(Linear Decreasing Inertia Weight)和非对称线性变换学习因子以改进算法的收敛速度与收敛精度。

        GA 中的交叉与变异操作可以提高算法的全局搜索能力,因此将离散 BPSO 与GA 进行优势互补,将交叉与变异操作应用到离散BPSO中,从而得到MPSO。

1)引入线性微分递减惯性权重。

        惯性权重w影响算法的搜索能力,当 w 取值较大时算法的全局搜索能力较强,当 w 取值较小时算法的局部搜索能力较强,因此为了使算法在早期具有较强的全局搜索能力,在后期又可以进行精确局部搜索,引入线性微分递减惯性权重如式(23)所示。

2)引入非对称线性变换学习因子。

        学习因子影响算法的搜索能力和收敛速度,为了使算法在迭代前期的全局搜索能力较强、后期的收敛速度快,利用非对称线性变换对学习因子进行改进,更新公式为:

3)引入 GA 的交叉、变异操作。

        由于离散BPSO收敛速度较快,存在易于陷入局部最优的问题 在种群更新中粒子自身信息占优势,而 GA 中的交叉、变异操作可以有效解决该问题,因此将其引入离散BPSO中。

        交叉操作是通过某种方式将相互交叉的 2个染色中的部分基因进行交换,从而得到2个新个体,交叉操作可以有效提高算法的全局搜索能力,将该操作引入离散 BPSO 中可以改善其易于陷入局部最优的问题。交叉操作首先是种群中的粒子进行随机配对,按照选定的交叉概率pc进行交叉,在迭代过程中按照pc生成杂交粒子池如式(26)所示。

        新的粒子xi和xj的位置、速度更新公式分别为:

        变异操作可以产生新的个体,提高算法的局部搜索能力,同时能够保持种群的多样性,防止收敛早熟现象的发生。将高斯变异引入离散 BPSO 中,在迭代过程中以变异概率 pm生成变异粒子池,如式(29)所示。

3.编程思路分析

根据对文献内容的解读,可以设计下面的编程思路:

步骤1:输入所需数据

这一步比较简单。算例分析用到的部分数据可以从原文中找到,IEEE33节点系统直接使用matpower工具箱中的数据即可,其他没有给出的数据可以自己假设一下。

步骤2MPSO算法的实现

实现基本的BPSO算法,并采用文中的改进策略对其进行改进,得到MPSO算法,使用测试函数测试算法的有效性。

步骤3动态孤岛划分算法的实现

采用原文献中所提孤岛划分方法,得到配电网孤岛划分策略。

步骤4将MPSO算法用于配电网故障恢复问题

使用MPSO算法求解配电网故障恢复问题时,决策变量应设置为配电网的支路开断状态,由于文献中采用了IEEE33节点配电网,其支路数为37,因此决策变量的维度也是37,且均为0-1变量。

此外,原文献中并没有对粒子群的初始化和更新做出特殊的设计,单纯的随机处理,将产生大量不可行解,因此代码中将使用之前博客中所提到的方法对粒子群进行初始化和更新(基于改进二进制粒子群算法的配电网重构(matlab实现)_粒子群算法网络重构-CSDN博客)。

步骤5输出运行结果

参考文中的图表的格式,输出结果即可。

4.Matlab代码

%% BPSO算法
clc
clear
close all
 
%% 设置种群参数
sizepop = 200;                      % 初始种群个数
dim = 100;                          % 空间维数
ger = 500;                          % 最大迭代次数    
v_max = 3;                          % 速度上限
v_min = -3;                         % 速度下限
w = 0.9;                            % 惯性权重
c_1 = 1.5;                          % 自我学习因子
c_2 = 1.5;                          % 群体学习因子 
 
%% 种群初始化
pop = randi([0, 1] , sizepop, dim);                 % 初始化种群
pop_v = v_min + rand(sizepop,dim).*(v_max-v_min);   % 初始化种群速度        
pop_zbest = pop(1,:);                               % 初始化群体最优位置
pop_gbest = pop;                                    % 初始化个体最优位置
fitness = zeros(1,sizepop);                         % 所有个体的适应度
fitness_zbest = inf;                                % 初始化群体最优适应度
fitness_gbest = inf*ones(1,sizepop);                % 初始化个体最优适应度
 
%% 初始的适应度
for k = 1:sizepop
    % 计算适应度值
    fitness(k) = fitnessfun(pop(k,:));
    if fitness(k) < fitness_zbest
        fitness_zbest = fitness(k);
        pop_zbest = pop(k,:);
    end
end
history_pso = zeros(1,ger);            % 粒子群历史最优适应度值
%% 迭代求最优解
iter = 1;
while iter <= ger
    for k = 1:sizepop
        % 更新速度并对速度进行边界处理 
        pop_v(k,:)= w * pop_v(k,:) + c_1*rand*(pop_gbest(k,:) - pop(k,:)) + c_2*rand*(pop_zbest - pop(k,:));
        for kk = 1:dim
            if  pop_v(k,kk) > v_max
                pop_v(k,kk) = v_max;
            end
            if  pop_v(k,kk) < v_min
                pop_v(k,kk) = v_min;
            end
        end
        % 更新位置
        S = sigmoid(pop_v(k,:));
        R = rand(1,dim);
        for kk = 1:dim
            if S(kk) > R(kk)
                pop(k, kk) = 1;
            else
                pop(k, kk) = 0;
            end
        end
        % 更新适应度值
        fitness(k) = fitnessfun(pop(k,:));
        if fitness(k) < fitness_zbest
            fitness_zbest = fitness(k);
            pop_zbest = pop(k,:);
        end
        if fitness(k) < fitness_gbest(k)
            fitness_gbest(k) = fitness(k);
            pop_gbest(k,:) = pop(k,:);
        end
    end
    history_pso(iter) = fitness_zbest;
    disp(['PSO第',num2str(iter),'次迭代最优适应度=',num2str(fitness_zbest)])
    iter = iter+1;
end
% time0 = toc;
% disp(['运行时间为:',num2str(time0) , '秒'])
disp(['最优解:x=',num2str(pop_zbest)])
disp(['最优函数值=',num2str(fitness_zbest)])
plot(history_pso,'linewidth',1)
ylabel('最优适应度值')
xlabel('迭代次数')
 
function fitness = fitnessfun(pop)
fitness = sum(pop.^2);
end

完整matlab代码获取

        以上仅为基本BPSO算法求解测试函数的matlab代码,完整论文复现的matlab代码可以从这个链接获取:

(文章复现)基于变异粒子群算法的主动配电网故障恢复策略matlab代码资源-CSDN文库
        压缩包中共包含13个m文件,具体说明分别如下:

4.1.BFS.m

为广度优先搜索算法BFS(Breadth-First Search)的子函数。

4.2.BPSO.m

基本BPSO算法求解测试函数sphere最小值的程序。

4.3.creat_pso.m

粒子群算法求解故障恢复策略初始化的子函数。

4.4.DFS.m

深度优先搜索算法的子函数。

4.5.dfs_shortest_paths.m

采用DFS求解最短路径的子函数。

4.6.fitnessfun.m

配电网故障恢复策略目标函数的计算子函数。

4.7.IEEE33.m

IEEE 33节点配电网的数据文件。

4.8.main_island.m

孤岛划分的程序

4.9.main.m

程序的主函数,使用时只需要运行该程序即可得到所有的结果。

4.10.main_service_recovery.m

基于MPSO求解主动配电网故障恢复策略的程序

4.11.MPSO.m

MPSO算法求解测试函数sphere最小值的程序。

4.12.parameters.m

相关的参数。

4.13.sigmoid.m

Sigmoid函数的计算子函数。

5.运行结果

5.1 场景1的孤岛划分结果

5.2 场景2的孤岛划分结果

5.3 场景1的故障恢复策略

5.4 场景2的故障恢复策略

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

六级翻译笔记

理解加表达 除了专有名词不能自己理解翻译&#xff0c;其它都可以 时态一般唯一 题目里出现有翻译为 客观存在&#xff1a; there be 单词结尾加er和ee的区别&#xff1a;er是主动&#xff0c;ee是被动 中文句子没有被动&#xff0c;也可以英文翻译为被动 中文的状语可以不是…

3月笔记本电脑行业线上市场销售数据分析

笔记本电脑市场在过去几年中经历了起伏&#xff0c;但总体上呈现出稳定增长的态势。特别是随着远程办公、在线学习等需求的增加&#xff0c;以及消费者对于便携性、高性能等方面的追求&#xff0c;笔记本电脑市场得到了进一步的发展。 据鲸参谋数据统计&#xff0c;线上平台&a…

在Tiled中制作动画瓦片图

什么是瓦片图&#xff1f;瓦片图是指用图块把游戏场景评出来 工具安装链接&#xff1a;Tiled | Flexible level editor 资源下载教程 资源下载&#xff1a;Mystic Woods - 16x16 Pixel Art Asset Pack by Game Endeavor 解压后得到一些资源 新建图块集合 Tiled的安装就不介绍…

2024最新从0部署Django项目(nginx+uwsgi+mysql)

云服务器 我这里用的是腾讯云免费试用的2H4Gcentos服务器&#xff08;后升级为2H8G&#xff0c;保险一点提高内存&#xff09; 因为网上很多关于django部属的教程都是宝塔啊&#xff0c;python版本控制器啊这种的&#xff0c;我也误打误撞安装了宝塔面板&#xff0c;但这里我…

AR人像滤镜SDK解决方案,专业调色,打造个性化风格

视觉内容已成为企业传达品牌价值和吸引用户眼球的重要载体&#xff0c;为满足企业对于高质量、多样化视觉内容的迫切需求&#xff0c;美摄科技凭借先进的AR技术和深厚的图像处理经验&#xff0c;推出了业界领先的AR人像滤镜SDK解决方案。 一、一站式解决方案&#xff0c;覆盖多…

C++语法|智能指针的实现及智能指针的浅拷贝问题、auto_ptr、scoped_ptr、unique_ptr、shared_ptr和weak_ptr详细解读

文章目录 1.自己实现智能指针智能指针引起的浅拷贝问题尝试定义自己的拷贝构造函数解决浅拷贝 2.不带引用计数的智能指针auto_ptrscoped_ptrunique_ptr&#xff08;推荐&#xff09; 3.带引用计数的智能指针模拟实现引用计数shared_ptr和weak_ptr循环引用&#xff08;交叉引用&…

Maven 的仓库、周期和插件

优质博文&#xff1a;IT-BLOG-CN 一、Maven 仓库 在Maven的世界中&#xff0c;任何一个依赖、插件或者项目构建的输出&#xff0c;都可以称为构建。Maven在某个统一的位置存储所有项目的共享的构建&#xff0c;这个统一的位置&#xff0c;我们就称之为仓库。任何的构建都有唯一…

信息系统架构模型_2.面向服务架构(SOA)模式

前面讲的客户机/服务器模式&#xff0c;无论多少层的C/S软件结构&#xff0c;对外来讲&#xff0c;都只是一个单结点应用&#xff08;无论它由多个不同层的“服务”相互配合来完成其功能&#xff09;&#xff0c;具体表现为一个门户网站、一个应用系统等。而多个单点应用相互通…

蓝桥杯单片机之模块代码《多样点灯方式》

过往历程 历程1&#xff1a;秒表 历程2&#xff1a;按键显示时钟 历程3&#xff1a;列矩阵按键显示时钟 历程4&#xff1a;行矩阵按键显示时钟 历程5&#xff1a;新DS1302 历程6&#xff1a;小数点精确后两位ds18b20 历程7&#xff1a;35定时器测量频率 历程8&#xff…

docker部署minio和业务服务因变更minio密码导致访问不到图片的问题

问题起因 业务application和minio都是docker部署。按部署规则minio的环境变量中设置了MINIO_ROOT_USER和MINIO_ROOT_PASSWORD。这样就可以用这套用户名密码登录minio了。而我的application中是通过api访问minio获取资源URL&#xff0c;提供给前端的。所以在application的环境变…

SVN 合并到 Git 时有文件大于 100 M 被限制 Push

如果有文件大小大于 100M&#xff0c;GitHub 是会被限制推送到仓库中的&#xff0c;大概率情况会显示下面的错误&#xff1a; remote: Resolving deltas: 100% (3601/3601), done. remote: error: Trace: aea1f450da6f2ef7bfce457c715d0fbb9b0f6d428fdca80233aff34b601ff59b re…

【知识碎片】2024_05_11

本篇记录了两个代码&#xff0c;【图片整理】是一个数组排序题&#xff0c;【寻找数组的中心下标】看起来很适合用双指针&#xff0c;但是细节多&#xff0c;最后还是没通过全部用例&#xff0c;看了题解写出来的。 C语言部分是两个知道错了之后恍然大悟的选择题。 每日代码 图…

iOS Xcode Debug View Hierarchy 查看视图层级结构

前言 我们难免会遇到接手别人项目的情况&#xff0c;让你去改他遗留的问题&#xff0c;想想都头大&#xff0c;&#x1f602;可是也不得不面对。作为开发者只要让我们找到出问题的代码文件&#xff0c;我们就总有办法去解决它&#xff0c;那么如何快速定位问题对应的代码文件呢…

原创未发表!24年新算法SBOA优化TVFEMD实现分解+四种熵值+频谱图+参数变化图+相关系数图!

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 数据介绍 优化流程 创新点 使用TVFEMD的创…

哪里有高清视频素材库?哪里有视频素材免费提供?

随着数字媒体和内容创作的不断演进&#xff0c;高效且创意的视频素材变得日益重要。以下列举的视频素材网站&#xff0c;无论是国内还是国际&#xff0c;都能为您的项目提供宝贵的资源。 1. 蛙学府 不断扩展其视频库&#xff0c;提供从经典剪辑到现代影视制作所需的素材。除了…

01、什么是ip、协议、端口号知道吗?计算机网络通信的组成是什么?

声明&#xff1a;本教程不收取任何费用&#xff0c;欢迎转载&#xff0c;尊重作者劳动成果&#xff0c;不得用于商业用途&#xff0c;侵权必究&#xff01;&#xff01;&#xff01; 目录 前言 计算机网络 网络ip地址 网络协议 网络端口号 前言 最近有个项目要用到相关文章…

【回溯 网格 状态压缩】52. N 皇后 II

本文涉及知识点 回溯 网格 状态压缩 LeetCode52. N 皇后 II n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回 n 皇后问题 不同的解决方案的数量。 示例 1&#xff1a; 输入&#x…

Mysql数据库的基础学习

为什么使用数据库&#xff1f; 1.持久化&#xff1a;将数据保存到可掉电式存储设备中以供使用。 数据库相关概念&#xff1a; DB:数据库&#xff08;Databass&#xff09;即存储数据的仓库&#xff0c;本质是一个文件系统&#xff0c;保存了一系列有组织的数据DBMS:数据库管…

RustGUI学习(iced)之小部件(十二):如何使用rule分割线部件来分割UI?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第十二篇,主要讲述rule分割线部件的使用,会结合…

ShellCode详解一

首先&#xff0c;感谢imbyter的教程&#xff0c;我也是从他的教程中一步一步的了解了shellcode的原理和各种知识。 原理 shellcode仅是一段可执行代码&#xff0c;不需要入口函数。理解shellcode加载原理之前需要理解PE文件在系统中的执行原理&#xff0c;即代码在内存中的执…