標(biāo)題: 二階振蕩粒子群算法 [打印本頁]

作者: wza    時(shí)間: 2017-12-18 08:51
標(biāo)題: 二階振蕩粒子群算法
主程序:
%------基本粒子群優(yōu)化算法(Particle Swarm Optimization)-----------
%------名稱:二階粒子群優(yōu)化算法(PSO)
%------作用:求解優(yōu)化問題
%------說明:全局性,并行性,高效的群體智能算法,提高算法的精度
%------初始格式化--------------------------------------------------
clear all;
clc;
format long;
%------給定初始化條件----------------------------------------------
%c1=1.4962;             %學(xué)習(xí)因子1
c1=2;
c2=3;
%c2=1.4962;             %學(xué)習(xí)因子2
%w=0.7298;             %慣性權(quán)重
%MaxDT=500;            %最大迭代次數(shù)
%D=6;          %搜索空間維數(shù)(未知數(shù)個(gè)數(shù))
%N=20;                  %初始化群體個(gè)體數(shù)目
eps=10^(-6);           %設(shè)置精度(在已知最小值時(shí)候用)
%------初始化種群的個(gè)體(可以在這里限定位置和速度的范圍)------------
for i=1:N
    for j=1:D
        x(i,j)=randn; %隨機(jī)初始化位置
        x1(i,j)=randn;
        v(i,j)=randn; %隨機(jī)初始化速度
    end
end
%------先計(jì)算各個(gè)粒子的適應(yīng)度,并初始化PiPg----------------------
figure(3)
for i=1:N
    P(i)=fitness2(x(i,:));
    y(i,:)=x(i,:);
end
Pg=x(N,:);             %Pg為全局最優(yōu)
for i=1:(N-1)
    if fitness2(x(i,:))<fitness2(Pg)
        Pg=x(i,:);
    end
end
%------進(jìn)入主要循環(huán),按照公式依次迭代,直到滿足精度要求------------
for t=1:MaxDT       
for i=1:N
%二階粒子群速度更新公式
        v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-2*x(i,:)+x1(i,:))+c2*rand*(Pg-2*x(i,:)+x1(i,:));
        x1(i,:)=x(i,:);
        x(i,:)=x(i,:)+v(i,:);
        if fitness2(x(i,:))<P(i)
            P(i)=fitness2(x(i,:));
            y(i,:)=x(i,:);
        end
        if P(i)<fitness2(Pg)
            Pg=y(i,:);
        end
    end
    Pbest(t)=fitness2(Pg);
end
plot(Pbest)
TempStr=sprintf('c1= %g ,c2=%g',c1,c2);
title(TempStr);
xlabel('迭代次數(shù)');
ylabel('適應(yīng)度值');
%------最后給出計(jì)算結(jié)果
disp('*************************************************************')
disp('函數(shù)的全局最優(yōu)位置為:')
Solution=Pg
disp('最后得到的優(yōu)化極值為:')
Result=fitness2(Pg)
disp('*************************************************************')






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1