標(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)度,并初始化Pi和Pg----------------------
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 |