?? pso.txt
字號(hào):
基本粒子群優(yōu)化算法Matlab源程序
這個(gè)程序就是最基本的粒子群優(yōu)化算法程序,用Matlab實(shí)現(xiàn),非常簡單。只有幾十行代碼。正所謂一分錢一分貨啊,優(yōu)化效果不總是令人滿意。我還有幾個(gè)改進(jìn)的粒子群優(yōu)化算法版本,這一段時(shí)間會(huì)陸續(xù)發(fā)上來。
下面是主函數(shù)的源程序,優(yōu)化函數(shù)則以m文件的形式放在fitness.m里面,對(duì)不同的優(yōu)化函數(shù)只要修改fitness.m就可以了通用性很強(qiáng)。
主函數(shù)源程序(main.m)
%------基本粒子群優(yōu)化算法(Particle Swarm Optimization)-----------
%------名稱:基本粒子群優(yōu)化算法(PSO)
%------作用:求解優(yōu)化問題
%------說明:全局性,并行性,高效的群體智能算法
%------作者:孫明杰(dreamsun2001@126.com)
%------單位:中國礦業(yè)大學(xué)理學(xué)院計(jì)算數(shù)學(xué)碩2005
%------時(shí)間:2006年8月17日 <CopyRight@dReAmsUn>
%------------------------------------------------------------------
%------初始格式化--------------------------------------------------
clear all;
clc;
format long;
%------給定初始化條件----------------------------------------------
c1=1.4962; %學(xué)習(xí)因子1
c2=1.4962; %學(xué)習(xí)因子2
w=0.7298; %慣性權(quán)重
MaxDT=1000; %最大迭代次數(shù)
D=10; %搜索空間維數(shù)(未知數(shù)個(gè)數(shù))
N=40; %初始化群體個(gè)體數(shù)目
eps=10^(-6); %設(shè)置精度(在已知最小值時(shí)候用)
%------初始化種群的個(gè)體(可以在這里限定位置和速度的范圍)------------
for i=1:N
for j=1:D
x(i,j)=randn; %隨機(jī)初始化位置
v(i,j)=randn; %隨機(jī)初始化速度
end
end
%------先計(jì)算各個(gè)粒子的適應(yīng)度,并初始化Pi和Pg----------------------
for i=1:N
p(i)=fitness(x(i,:),D);
y(i,:)=x(i,:);
end
pg=x(1,:); %Pg為全局最優(yōu)
for i=2:N
if fitness(x(i,:),D)<fitness(pg,D)
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,:)-x(i,:))+c2*rand*(pg-x(i,:));
x(i,:)=x(i,:)+v(i,:);
if fitness(x(i,:),D)<p(i)
p(i)=fitness(x(i,:),D);
y(i,:)=x(i,:);
end
if p(i)<fitness(pg,D)
pg=y(i,:);
end
end
Pbest(t)=fitness(pg,D);
end
%------最后給出計(jì)算結(jié)果
disp('*************************************************************')
disp('函數(shù)的全局最優(yōu)位置為:')
Solution=pg'
disp('最后得到的優(yōu)化極值為:')
Result=fitness(pg,D)
disp('*************************************************************')
%------算法結(jié)束---DreamSun GL & HF-----------------------------------
適應(yīng)度函數(shù)源程序(fitness.m)
function result=fitness(x,D)
sum=0;
for i=1:D
sum=sum+x(i)^2;
end
result=sum;
下面幾天回繼續(xù)發(fā)上來其他改進(jìn)算法,并發(fā)上比較結(jié)果。先看看我這有3種方法對(duì)此函數(shù)的優(yōu)化結(jié)果比較圖形,圖形不是很清楚,一直下降的就是改進(jìn)算法比較成功的
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -