⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basicpso.m

📁 几本粒子群程序。用MATLAB编写。可以更改成自己能用的程序。
💻 M
字号:
%by 38171545

function exepso()
pso_size=30;%种群大小
dimens=10;%待优化问题的维数
run_max=3000;%迭代次数上限
BasicPSO(dimens,run_max,pso_size);%调用PSO函数

    
function [XX,fitness]=Calculate(XX,ddimens)%适应度值计算函数
%........................
    fitness=0;
    
 %Rastrigrin函数   
	for i=1:ddimens
		if(XX(i)>5.12||XX(i)<-5.12)
			XX(i)=10.24*rand-5.12;
        end
    end
	for i=1:ddimens
		fitness=fitness+(XX(i)*XX(i)-10*cos(2*pi*XX(i))+10);
    end
    fitness=-fitness;


function BasicPSO(dimens,run_max,pso_size)%PSO主函数
Pb=-9999999;%记录群体最优适应度值
w_max=0.9;%最大权重
w_min=0.4;%最小权重
w=w_max;
c1=2;c2=2;%学习因子取值
check=0;m=0;

for i=1:pso_size%粒子位置、速度初始化
    Yb(i)=0;
    for j=1:dimens
        Xb(i,j)=10.24*rand-5.12;%Xb记录个体最优位置
        X(i,j)=Xb(i,j);
        V(i,j)=10*rand-5;
    end
end

for i=1:pso_size
    [X(i,:),Yb(i)]=Calculate(X(i,:),dimens);%计算适应度值
    if Yb(i)>Pb
        Pb=Yb(i);%Yb记录个体最优适应度值
        for j=1:dimens
            Pp(j)=X(i,j);%Pp记录群体最优位置
        end
    end
end

for count=1:run_max
   for k=1:pso_size
        for j=1:dimens
            V(k,j)=w*V(k,j)+c1*rand*(Xb(k,j)-X(k,j))+c2*rand*(Pp(j)-X(k,j));%速度更新公式
            if abs(V(k,j))>5.12%限制速度
                if V(k,j)>0
                   V(k,j)=5.12;
               else
                   V(k,j)=-5.12;
               end
           end
          end
            for i=1:dimens
                X(k,i)=X(k,i)+V(k,i);%位置更新公式
            end
            [X(k,:),temp]=Calculate(X(k,:),dimens);%计算适应度值
            if temp>=Yb(k)%更新个体最优适应度值和位置
                Yb(k)=temp;
                for i=1:dimens
                    Xb(k,i)=X(k,i);
                end
            end
            if Yb(k)>=Pb%更新群体最优适应度值和位置
                Pb=Yb(k);
                for i=1:dimens
                    Pp(i)=X(k,i);
                end
            end                          
        end   
           
             
            w=w_max-count*(w_max-w_min)/run_max;%基本惯性权重的计算公式           
      end
 s=Pb


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -