改进二进制粒子群算法在配电网重构中的应用(Matlab实现)【论文复现】

 

目录

0 概述

1 配电网重构的目标函数

2 算例

3 matlab代码实现


0 概述

配电系统中存在大量的分段开关和联络开关,配电网重构正是通过调整分段开关和联络升大的组合状态来变换网络结构,用于优化配电网某些指标,使其达到最优状态。正常运行时,则通过两类开关的不同组合状态来提高系统的可靠性、稳定性或减小网损等。故障时﹐部分分段开关将打开以隔离故障支路,同时一些联络开关闭合将故障支路转移到其他馈线上或同一馈线的其余分支上,以满足供电需求。

1 配电网重构的目标函数

配电网结构是闭环设计,开环运行。配电网重构则是在保证网络拓扑结构成辐射状,满足电压约

束、支路容量约束、变压器容量约束等要求的前提下,确定使配电网某一指标或多个指标最佳的配电网运行方式。本文以配电网线路损耗最小为目标函数,即:

       

式中f为所有支路总有功损耗;i表示支路编号;N表示配电网支路总数;Ki表示开关状态变量,即О表示打开状态,1表示闭合状态;Ri表示支路i上的电阻值;Pi、Qi、Ui分别表示支路的有功功率、无功功率以及支路i前端节点的电压幅值。
配电网重构约束条件包括潮流约束、电压约束、电流约束、线路容量约束和网络拓扑结构辐射状运行约束等,如下式所示:
 

                  

2 算例

仿真算例采用 IEEE33 节点配电网络,拓扑结构如图 。该配电网包含 33 个节点和 37 条支路,

5 个常开联络开关分别位于支路33、34、35、36、37上,基准 电压为 12. 66 kV。

3 matlab代码实现

部分代码: 

clc
tic
%% 本代码采用二进制粒子群算法对33节点配电网进行重构。目标函数是最小化功率损耗。
%===============初始化参数=============
n=20;
dim=5;% 搜索空间的维数
x=load('swarm33.m');% 创建群体
vnew=rand(n,dim);%创建随机初始速度
sig=zeros(n,dim);
vold=vnew;
fitness=zeros(1,n);
%=============粒子群参数==============
pbest=load('swarm33.m');%创建最佳矩阵
gbest=[4 10 24 30 12];%全局最优
wmax=0.9;
wmin=0.4;
r1=rand(n,dim);% 创建随机矩阵,大小( 20x3 )
r2=rand(n,dim);% 创建随机矩阵,大小( 20x3 )
iter=0;
maxiter=60;% 最大迭代次数
tap=[8 9 10 11 21 33 35 0 0
    2 3 4 5 6 7 18 19 20
    12 13 14 34 0 0 0 0 0
    15 16 17 29 30 31 36 32 0
    22 23 24 25 26 27 28 37 0];
ta=tap';
%%  建立关联矩阵
data=loadcase(case33);
doc=data.branch;
nhanh=37;
nut=33;
matrix=zeros(nhanh,nut);
    nutdau=doc(:,1);
    nutcuoi=doc(:,2);
for i=1:nhanh
matrix(i,nutdau(i))=1;
matrix(i,nutcuoi(i))=1;
end

%% 计算个体最优的适应度函数
 fpbest=zeros(1,n);
 for i=1:n
     fpbest(i)=50000;
 end
%% 主循环
while iter<maxiter
    iter=iter+1;
    w=wmax-(wmax-wmin)*iter/maxiter;% 指定权重系数
    c1=2*rand(1);
    c2=2*rand(1);
    %% 更新速度
    vold=vnew;
    for i=1:n
        for j=1:dim
        vnew(i,j)=w*vnew(i,j)+c1*r1(i,j)*(pbest(i,j)-x(i,j))+c2*r2(i,j)*(gbest(j)-x(i,j));
       if abs(vnew(i,j))==abs(vold(i,j))
           vnew(i,j)=rand(1,1).*vnew(i,j);
       end
        end
    end


-------
plot(dienap,'-sr')
hold on
plot(gbestvolt,'-^b')
ylabel('电压(p.u)')
xlabel('Node')
title('电压分布')
legend('配电网重组前','配电网重组后')
hold off
disp('      ')
disp('      ')
disp('      ')
disp('      ')
disp('==========================================================================================')
disp('***************************** 33节点配电网仿真结果 ***************************')
disp('==========================================================================================')
disp('                               重构前                          重构后 '          )
disp('------------------------------------------------------------------------------------------')
disp(['联络开关:              ', num2str(o), '                  ',num2str(a)])
disp('------------------------------------------------------------------------------------------')
disp(['功率损耗:                ',num2str(tonthat),' kW','                         ',num2str(fgbest),' kW'])
disp('------------------------------------------------------------------------------------------')
disp(['减少的功率损耗:      ', '_______','                             ',num2str(ploss), ' %'])
disp('------------------------------------------------------------------------------------------')
disp(['最小电压:           ',num2str(dienapmin),' pu','                          ',num2str(minvolt),' pu'])
disp('------------------------------------------------------------------------------------------')
toc

部分代码:

clc
tic
%% 本代码采用二进制粒子群算法对33节点配电网进行重构。目标函数是最小化功率损耗。
%===============初始化参数=============
n=20;
dim=5;% 搜索空间的维数
x=load('swarm33.m');% 创建群体
vnew=rand(n,dim);%创建随机初始速度
sig=zeros(n,dim);
vold=vnew;
fitness=zeros(1,n);
%=============粒子群参数==============
pbest=load('swarm33.m');%创建最佳矩阵
gbest=[4 10 24 30 12];%全局最优
wmax=0.9;
wmin=0.4;
r1=rand(n,dim);% 创建随机矩阵,大小( 20x3 )
r2=rand(n,dim);% 创建随机矩阵,大小( 20x3 )
iter=0;
maxiter=60;% 最大迭代次数
tap=[8 9 10 11 21 33 35 0 0
    2 3 4 5 6 7 18 19 20
    12 13 14 34 0 0 0 0 0
    15 16 17 29 30 31 36 32 0
    22 23 24 25 26 27 28 37 0];
ta=tap';
%%  建立关联矩阵
data=loadcase(case33);
doc=data.branch;
nhanh=37;
nut=33;
matrix=zeros(nhanh,nut);
    nutdau=doc(:,1);
    nutcuoi=doc(:,2);
for i=1:nhanh
matrix(i,nutdau(i))=1;
matrix(i,nutcuoi(i))=1;
end

%% 计算个体最优的适应度函数
 fpbest=zeros(1,n);
 for i=1:n
     fpbest(i)=50000;
 end
%% 主循环
while iter<maxiter
    iter=iter+1;
    w=wmax-(wmax-wmin)*iter/maxiter;% 指定权重系数
    c1=2*rand(1);
    c2=2*rand(1);
    %% 更新速度
    vold=vnew;
    for i=1:n
        for j=1:dim
        vnew(i,j)=w*vnew(i,j)+c1*r1(i,j)*(pbest(i,j)-x(i,j))+c2*r2(i,j)*(gbest(j)-x(i,j));
       if abs(vnew(i,j))==abs(vold(i,j))
           vnew(i,j)=rand(1,1).*vnew(i,j);
       end
        end
    end


-------
plot(dienap,'-sr')
hold on
plot(gbestvolt,'-^b')
ylabel('电压(p.u)')
xlabel('Node')
title('电压分布')
legend('配电网重组前','配电网重组后')
hold off
disp('      ')
disp('      ')
disp('      ')
disp('      ')
disp('==========================================================================================')
disp('***************************** 33节点配电网仿真结果 ***************************')
disp('==========================================================================================')
disp('                               重构前                          重构后 '          )
disp('------------------------------------------------------------------------------------------')
disp(['联络开关:              ', num2str(o), '                  ',num2str(a)])
disp('------------------------------------------------------------------------------------------')
disp(['功率损耗:                ',num2str(tonthat),' kW','                         ',num2str(fgbest),' kW'])
disp('------------------------------------------------------------------------------------------')
disp(['减少的功率损耗:      ', '_______','                             ',num2str(ploss), ' %'])
disp('------------------------------------------------------------------------------------------')
disp(['最小电压:           ',num2str(dienapmin),' pu','                          ',num2str(minvolt),' pu'])
disp('------------------------------------------------------------------------------------------')
toc

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二进制粒子群算法是一种优化算法,常用于解决优化问题。它基于粒子群算法(PSO)的思想,但是将解表示为二进制编码,适用于离散优化问题。 要改进二进制粒子群算法,可以考虑以下几个方面: 1. 粒子编码方案:改进二进制编码方案可以提高算法的搜索能力。可以尝试使用更有效的编码方式,如格雷编码或其他编码方式,以减少解空间的距离。 2. 群体拓扑结构:粒子群算法的群体拓扑结构决定了粒子之间的信息交流方式。改变拓扑结构可以改善算法的收敛性和全局搜索能力。常见的拓扑结构包括全局拓扑、环形拓扑和随机拓扑等,可以根据问题的特点选择适合的拓扑结构。 3. 速度更新策略:速度更新策略决定了粒子在搜索空间的移动方式。可以尝试使用不同的速度更新策略,如线性递减速度更新、惯性权重调整等,以提高算法的收敛速度和搜索效果。 4. 适应度函数设计:适应度函数是衡量解的优劣程度的指标。设计合适的适应度函数可以引导算法朝着更优解的方向搜索。可以根据问题的特点,设计适应度函数来更好地反映问题的约束条件和目标。 5. 参数设置:调整算法的参数也是改进算法的一种重要方式。可以通过试验和经验来寻找最佳的参数组合,以提高算法的性能。 以上是对二进制粒子群算法改进的一些建议,具体的改进方法需要根据具体问题的特点进行调整和优化。希望对你有所帮助!如果你有其他问题,可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值