PSO 简单的粒子群算法示例MATLAB实现

https://blog.youkuaiyun.com/weixin_40679412/article/details/80571854

本实例主要是参考的以上的作者的程序,在原作者的基础上增加了注释语句。

本文主要是一个简单的粒子群示例算法,粒子群的规模是50,每个粒子的变量是2,一开始不理解适应度函数的数学意义,现在在我的理解中适应度函数就相当于深度学习中的损失函数;
clc
clear 
close all
E=0.000001;
maxnum=800;%最大迭代次数
narvs=2;%目标函数的自变量个数
particlesize=50;%粒子群规模
c1=2;%每个粒子的个体学习因子,加速度常数
c2=2;%每个粒子的社会学习因子,加速度常数
w=0.6;%惯性因子
vmax=5;%粒子的最大飞翔速度
v=2*rand(particlesize,narvs);%粒子飞翔速度
x=-300+600*rand(particlesize,narvs);%粒子所在位置
%定义适应度函数
fitness=inline('(x(1)^2+x(2)^2)/10000','x');
for i=1:particlesize
    f(i)=fitness(x(i,:));    
end
personalbest_x=x;
personalbest_faval=f;
[globalbest_faval,i]=min(personalbest_faval);
globalbest_x=personalbest_x(i,:); 
k=1;
while (k<=maxnum)  %对参数进行更新
    for i=1:particlesize
            f(i)=fitness(x(i,:));
        if f(i)<personalbest_faval(i)
            personalbest_faval(i)=f(i);
            personalbest_x(i,:)=x(i,:);
        end
    end
    [globalbest_faval,i]=min(personalbest_faval);
    globalbest_x=personalbest_x(i,:);
    for i=1:particlesize
        v(i,:)=w*v(i,:)+c1*rand*(personalbest_x(i,:)-x(i,:))...
            +c2*rand*(globalbest_x-x(i,:)); %求出粒子速度
        for j=1:narvs    %对速度的上下界进行判断
            if v(i,j)>vmax     
                v(i,j)=vmax;
            elseif v(i,j)<-vmax
                v(i,j)=-vmax;
            end
        end
        x(i,:)=x(i,:)+v(i,:);
    end
    ff(k)=globalbest_faval;%储存全局最优值
    if globalbest_faval<E
        break
    end
%       figure(1)
%       for i= 1:particlesize
%       plot(x(i,1),x(i,2),'*')
%       end
    k=k+1;
end
xbest=globalbest_x;
figure(2)
set(gcf,'color','white');

plot(1:length(ff),ff)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值