找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1741|回復(fù): 0
收起左側(cè)

MATLAB粒子群算法

[復(fù)制鏈接]
ID:960788 發(fā)表于 2022-1-29 20:21 | 顯示全部樓層 |閱讀模式
clc
clear
close all
E=0.000001;
maxnum=800;%最大迭代次數(shù)
narvs=2;%目標(biāo)函數(shù)的自變量個(gè)數(shù)
particlesize=50;%粒子群規(guī)模
c1=2;%每個(gè)粒子的個(gè)體學(xué)習(xí)因子,加速度常數(shù)
c2=2;%每個(gè)粒子的社會(huì)學(xué)習(xí)因子,加速度常數(shù)
w=0.6;%慣性因子
vmax=5;%粒子的最大飛翔速度
v=2*rand(particlesize,narvs);%粒子飛翔速度
x=-300+600*rand(particlesize,narvs);%粒子所在位置
%定義適應(yīng)度函數(shù)
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
    k=k+1;
end
xbest=globalbest_x;
plot(1:length(ff),ff)


回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表