【物理应用】基于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

三、运行结果

【物理应用】基于matlab粒子群配电网重构【含Matlab源码 764期】
【物理应用】基于matlab粒子群配电网重构【含Matlab源码 764期】

【物理应用】基于matlab粒子群配电网重构【含Matlab源码 764期】

四、备注

完整代码或者代写添加QQ 1564658423

上一篇:【优化求解】基于matlab遗传算法遗优化电动汽车有序充电【含Matlab源码 792期】


下一篇:元启发式算法 | 遗传算法(GA)解决TSP问题(Python)