【物理应用】基于matlab粒子群配电网重构【含Matlab源码 764期】
作者:互联网
一、简介
基于matlab粒子群配电网重构
二、源代码
%主函数
clear
clc
warning off
N=10;%节点总数(包括电源节点)
R=16;%支路总数
sizepop=10;%粒子群种群规模
maxgen=200;%算法最大迭代次数
pop=pop_initial(sizepop,N,R);%种群初始化
Vmax=4;Vmin=-Vmax;%粒子速度的上限与下限
Sigmoid=@(x) 1./(1+exp(-x));
Utility=FAPSO_LDNP(N,pop,Vmax,Vmin,maxgen,sizepop);%调用FAPSO算法求解LDNP问题
%结果显示
figure(4)
plot(Utility)
grid on
xlabel('迭代次数','fontsize',12)
ylabel('投资效益比','fontsize',12)
title('FAPSO迭代收敛图','fontsize',12)
function Utility=FAPSO_LDNP(D,pop,Vmax,Vmin,maxgen,popsize)
vmax=Vmax/4;
vmin=-Vmin/-4;
popmax=5;
popmin=-5;
c1=2;
c2=2;
w=0.8;%固定惯性权重
wmin=0.4;
k1=1.5;%惯性权重调整参数
k2=0.3;
% 产生初始粒子和速度
for i=1:popsize
%随机产生一个种群
pop0(i,:)=5*rands(1,D); %初始种群
V(i,:)=rands(1,D); %初始化速度
%计算适应度
fitness(i)=fun_LDNP(pop0(i,:)); %染色体的适应度
end
% 个体极值和群体极值
[bestfitness,bestindex]=max(fitness);
zbest=pop0(bestindex,:); %全局最佳
gbest=pop0; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
%加FA改进 分组
Fav=sum(fitness)/popsize;%F_{av}
C_index=find(fitness>=Fav);%C组,第三组,适应值最差的一组 地址变量
lc=length(C_index);
b_index=find(fitness<Fav);%准B组,其中一部分更优的粒子将会被分到A组,剩下的才是真正的B组
lb=length(b_index);
Fav_=0;
for i=1:lb
Fav_=Fav_+fitness(b_index(i));
end
Fav_=Fav_/lb;%F_{av}^'
A_index=find(fitness<Fav_);%A组
la=length(A_index);
B_index=find(fitness>=Fav_&fitness<Fav);%B组
lb=length(B_index);
%算权重
W=zeros(popsize,1);%开辟惯性权重存储空间
for i=1:popsize
if sum(i==A_index)
W(i)=w-(w-wmin)*abs(fitness(i)-Fav_)/(fitnesszbest-Fav_);
elseif sum(i==B_index)
W(i)=w;
elseif sum(i==C_index)
W(i)=1.5-1/(1+k1*exp(-k2*abs(fitnesszbest-Fav_)));
end
end
for i=1:10
[~,~,~]=jiedian(pop(:,:,i));
end
% 迭代寻优
for i=1:maxgen
for j=1:popsize
%速度更新
V(j,:) = W(j)*V(j,:) + c1*rand*(gbest(j,:) - pop0(j,:)) + c2*rand*(zbest - pop0(j,:));
V(j,V(j,:)>vmax)=vmax;
V(j,V(j,:)<vmin)=vmin;
%种群更新
pop0(j,:)=pop0(j,:)+0.1*V(j,:);
pop0(j,pop0(j,:)>popmax)=popmax;
pop0(j,pop0(j,:)<popmin)=popmin;
%适应度值
fitness(j)=fun_LDNP(pop0(j,:));
end
for j=1:popsize
%个体最优更新
if fitness(j) > fitnessgbest(j)
gbest(j,:) = pop0(j,:);
fitnessgbest(j) = fitness(j);
end
%群体最优更新
if fitness(j) > fitnesszbest
zbest = pop0(j,:);
fitnesszbest = fitness(j);
end
end
yy(i)=fitnesszbest;
%惯性权重更新
%加FA改进 分组
Fav=sum(fitness)/popsize;%F_{av}
C_index=find(fitness>=Fav);%C组,第三组,适应值最差的一组 地址变量
lc=length(C_index);
b_index=find(fitness<Fav);%准B组,其中一部分更优的粒子将会被分到A组,剩下的才是真正的B组
lb=length(b_index);
Fav_=0;
for ii=1:lb
Fav_=Fav_+fitness(b_index(ii));
end
Fav_=Fav_/lb;%F_{av}^'
A_index=find(fitness<Fav_);%A组
la=length(A_index);
B_index=find(fitness>=Fav_&fitness<Fav);%B组
lb=length(B_index);
%算权重
W=zeros(popsize,1);%开辟惯性权重存储空间
for ii=1:popsize
if sum(ii==A_index)
W(ii)=w-(w-wmin)*abs(fitness(ii)-Fav_)/(fitnesszbest-Fav_);
elseif sum(ii==B_index)
W(ii)=w;
elseif sum(ii==C_index)
W(ii)=1.5-1/(1+k1*exp(-k2*abs(fitnesszbest-Fav_)));
end
end
end
三、运行结果
四、备注
完整代码或者代写添加QQ 1564658423
标签:index,配电网,Fav,764,find,pop0,fitness,Vmax,源码 来源: https://blog.csdn.net/TIQCmatlab/article/details/115647118