粒子群优化算法是一种模拟鸟群社会行为的群体搜素算法。它分为全局最佳粒子优化和局部最佳粒子优化,对于全局最佳PSO,或者叫做gbest PSO,每个粒子的邻域都是整个群,其算法伪代码如下:

      


创建并初始化一个n维的粒子群

repeat

     for 每个粒子i=1,2,…n do

           //设置个体最佳位置

           if f(i)

                y=f(i);

           end

           //设置全局最佳位置

           if y

                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)

        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)=sphere(x(i,:),D);%更新适应度

            y(i,:)=x(i,:);%更新个体最佳位置

        end

        if p(i)

            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,在坐标原点附近,符合预期结果。