基本粒子群优化算法(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,在坐标原点附近,符合预期结果。

    原文作者:蚁群算法
    原文地址: https://blog.csdn.net/yi_tech_blog/article/details/52997081
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞