1. 程式人生 > >基本粒子群優化演算法(PSO)的matlab實現

基本粒子群優化演算法(PSO)的matlab實現

粒子群優化演算法是一種模擬鳥群社會行為的群體搜素演算法。它分為全域性最佳粒子優化和區域性最佳粒子優化,對於全域性最佳PSO,或者叫做gbest PSO,每個粒子的鄰域都是整個群,其演算法虛擬碼如下:

建立並初始化一個n維的粒子群
repeat
     for 每個粒子i=1,2,…n do
           //設定個體最佳位置
           if f(i)<y then
                y=f(i);
           end
           //設定全域性最佳位置
           if y<Y then
                Y=y;
           end
     end
     for 每個粒子i=1,2,…n do
         用速度方程更新速度
         用位置方程更新位置
     end
until 滿足終止條件
gbest PSO的matlab實現程式碼如下:
tic   %該函式表示計時開始
%------初始格式化--------------------------------------------------
clear all;
clc;
format long;
%------給定初始化條件----------------------------------------------
c1=1.4962;             %加速常數即學習因子1
c2=1.4962;             %加速常數即學習因子2
w=0.7298;              %慣性權重
MaxDT=10000;           %最大迭代次數
D=10;                  %搜尋空間維數(測試函式sphere中未知數個數)
N=40;                  %初始化群體個體數目
eps=10^(-7);           %設定精度(在已知最小值時候用)
%------初始化種群的個體(可以在這裡限定位置和速度的範圍)------------
for i=1:N
    for j=1:D
        x(i,j)=randn;  %產生一個服從正態分佈的隨機數作為初始化位置
        v(i,j)=randn;  %產生一個服從正態分佈的隨機數作為初始化速度
    end
end
%------先計算各個粒子的適應度,並初始化個體最優位置y和全域性最優位置Pg--------
for i=1:N
    p(i)=sphere(x(i,:),D);%計算適應度,測試函式為sphere
    y(i,:)=x(i,:);    %初始化個體最優位置y為在時間步t=0時的粒子位置
end
Pg=x(1,:);             %Pg為全域性最優位置
for i=2:N
    if sphere(x(i,:),D)<sphere(Pg,D)
        Pg=x(i,:);%更新全域性最優位置
    end
end
%------進入主要迴圈,按照公式依次迭代,直到滿足精度要求------------
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 sphere(x(i,:),D)<p(i)
            p(i)=sphere(x(i,:),D);%更新適應度
            y(i,:)=x(i,:);%更新個體最佳位置
        end
        if p(i)<sphere(Pg,D)
            Pg=y(i,:);%更新群體最佳位置
        end
    end
    Pbest(t)=sphere(Pg,D);%儲存每一代的群體最佳位置
end
toc %該函式表示計時結束
%------最後給出計算結果
disp('*************************************************************')    
disp('函式的全域性最優位置為:')
for i=1:D
    fprintf('x(%d)=%s\n',i,Pg(i));
end
fprintf('最後得到的優化極值為:%s\n',sphere(Pg,D));
disp('*************************************************************')
sphere函式如下:
%適應度函式源程式(sphere.m)
%引數x為變數名,引數D為維數
function result=sphere(x,D)
sum=0;
for i=1:D
    sum=sum+x(i)^2;
end
result=sum;
程式執行結果:
Elapsed time is 2.943799 seconds.
*************************************************************
函式的全域性最優位置為:
x(1)=6.654911e-009
x(2)=5.739281e-009
x(3)=-3.207077e-009
x(4)=-1.107863e-011
x(5)=9.756758e-009
x(6)=6.682152e-009
x(7)=-2.828295e-010
x(8)=2.533800e-009
x(9)=3.868910e-009
x(10)=1.740554e-009
最後得到的優化極值為:2.518562e-016
*************************************************************
從執行結果可以看出,程式執行時間約為3秒,找到的sphere函式的最小值點接近0,在座標原點附近,符合預期結果。