您好,欢迎来到爱站旅游。
搜索
您的当前位置:首页PSO算法(matlab实现)

PSO算法(matlab实现)

来源:爱站旅游

老师布置的作业,仿照B站上的PSO教学视频,完成PSO算法。
这里是借助matlab,用PSO算法对内置的peaks函数进行了一个函数优化,并进行了粒子群的仿真。

下面是收敛动画和代码。

clc
clear all
%% Parameter
varmax=3;
varmin=-3;
epoches=100;
w=1;
wdamp=0.99;
c1=2;
c2=2;
cost=@(x)3*(1-x(1)).^2.*exp(-(x(1).^2) - (x(2)+1).^2) ... 
   - 10*(x(1)/5 - x(1).^3 - x(2).^5).*exp(-x(1).^2-x(2).^2) ... 
   - 1/3*exp(-(x(1)+1).^2 - x(2).^2);
n=50;

%% Initialize
gcost=inf;
gbest=zeros([1 2]);
for i=1:n
     swarm(i).pos=unifrnd(varmin,varmax,[1 2]);
     swarm(i).v=zeros([1 2]);
     swarm(i).cost=cost(swarm(i).pos);
     swarm(i).ibest=swarm(i).pos;
     swarm(i).icost=swarm(i).cost;
     if swarm(i).cost<gcost
         gbest=swarm(i).pos;
         gcost=swarm(i).cost;
     end
end

%% Alogrithm
for i=1:epoches
    % update
    pos=zeros([n 2]);
    for j=1:n
        swarm(j).v=w*swarm(j).v+c1*rand([1,2]).*(gbest-swarm(j).pos)+c2*rand([1 2]).*(swarm(j).ibest-swarm(j).pos);
        swarm(j).pos=swarm(j).pos+swarm(j).v;
        swarm(j).pos=min(swarm(j).pos,varmax);
        swarm(j).pos=max(swarm(j).pos,varmin);
        pos(j,:)=swarm(j).pos;
        swarm(j).cost=cost(swarm(j).pos);
        if swarm(j).icost>swarm(j).cost
            swarm(j).icost=swarm(j).cost;
            swarm(j).ibest=swarm(j).pos;
            if gcost>swarm(j).cost
                gcost=swarm(j).cost;
                gbest=swarm(j).pos;
            end
        end
    end
    w=w*wdamp;
    figure(1)
    plot(pos(:,1),pos(:,2),'ro');
    hold on
    contour(linspace(-3,3,100),linspace(-3,3,100),peaks(100))
    colorbar
    hold off
    disp(['the ' num2str(i) 'th iterator''s cost is ' num2str(gcost)])
    loss(i)=gcost;
    pause(0.1);
end
figure(2)
plot(loss,'b')
title('best cost changes with time')
disp(['best coefficient is ' num2str(gbest(1)) ' ' num2str(gbest(2)) ' ,and cost is ' num2str(gcost)])

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- azee.cn 版权所有 赣ICP备2024042794号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务