【PSO粒子群算法的MATLAB编程(结合理论分析)】

1.粒子群算法的定义
在这里插入图片描述

2.粒子群算法的描述
在这里插入图片描述
3.粒子群算法的建模
在这里插入图片描述
4.粒子群算法的流程
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1f0ac4d19bb241809a493ef65db86b57.png#pic_center在这里插入图片描述
5.关键参数说明
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

%%%%%%%%%%%%%%粒子群算法求解函数极值%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%
clear all;            %清变量
close all;            %清图
clc;                  %清屏
N=100;                %群体粒子个数
D=2;                  %粒子维数
T=200;                %最大迭代次数
c1=1.5;               %学习因子1
c2=1.5;               %学习因子2
Wmax=0.8;             %惯性权重最大值
Wmin=0.4;             %惯性权重最小值
Xmax=4;               %位置最大值
Xmin=-4;              %位置最小值
Vmax=1;               %速度最大值
Vmin=-1;              %速度最小值
%%%%%%%%%%%%%初始化种群个体(限定位置和速度)%%%%%%%%%%%
x=rand(N,D)*(Xmax-Xmin)+Xmin;
v=rand(N,D)*(Vmax-Vmin)+Vmin;
%%%%%%%%%%%%%%%%%初始化个体最优位置和最优值%%%%%%%%%%%%%%%
p=x;
pbest=ones(N,1);
for i=1:N
    pbest(i)=func2(x(i,:));
end
%%%%%%%%%%%%%%%%%初始化全局最优位置和最优值%%%%%%%%%%%%%%%
g=ones(1,D);
gbest=inf;
for i=1:N
    if(pbest(i)<gbest)
        g=p(i,:);
        gbest=pbest(i);
    end
end
gb=ones(1,T);
%%%%%%%%%%%%%%%%%按照公式依次迭代直到满足精度或者迭代次数%%%%%%%%%%%%%%%
for i=1:T
    for j=1:N
        %%%%%%%%%%%%%%%%%更新个体最优位置和最优值%%%%%%%%%%%%%%%
        if(func2(x(j,:))<pbest(j))
            p(j,:)=x(j,:);
            pbest(j)=func2(x(j,:));
        end
        %%%%%%%%%%%%%%%%%更新全局最优位置和最优值%%%%%%%%%%%%%%%
        if(pbest(j)<gbest)
            g=p(j,:);
            gbest=pbest(j);
        end
        %%%%%%%%%%%%%%%%%计算动态惯性权重值%%%%%%%%%%%%%%%
        w=Wmax-(Wmax-Wmin)*i/T;
        %%%%%%%%%%%%%%%%%更新位置和速度值%%%%%%%%%%%%%%%
        v(j,:)=w*v(j,:)+c1*rand*(p(j,:)-x(j,:))...
            +c2*rand*(g-x(j,:));
        x(j,:)=x(j,:)+v(j,:);
        %%%%%%%%%%%%%%%%%边界条件处理%%%%%%%%%%%%%%%
        for ii=1:D
            if(v(j,ii)>Vmax | v(j,ii)<Vmin)
                v(j,ii)=rand*(Vmax-Vmin)+Vmin;
            end
            if(x(j,ii)>Xmax | x(j,ii)<Xmin)
                x(j,ii)=rand*(Xmax-Xmin)+Xmin;
            end
        end
    end
    %%%%%%%%%%%%%%%%%记录历代全局最优值%%%%%%%%%%%%%%%
    gb(i)=gbest;
end
g;              %最优个体
gb(end);        %最优值
figure
plot(gb)
xlabel('迭代次数');
ylabel('适应度值');
title('适应度进化曲线');
% %%%%%%%%%%%%%%%%%%%适应度函数%%%%%%%%%%%%%%%%%%
% function value = func2(x)
% value=3*cos(x(1)*x(2))+x(1)+x(2)^2;
% end

内容来自于
https://www.bilibili.com/video/BV1Pc411c7pN/?spm_id_from=333.999.0.0&vd_source=fea739b827012868454f75636d108f72

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值