PSO(粒子群算法)MATLAB仿真完整代码

%程序1:PSO.m文件
%------ 基本粒子群优化算法( Particle Swarm Optimization ) -----------
%------ 功能:求解无约束问题
%------ 调用格式:[xm,fv] =PSO(fitness,N,c1,c2,w,M,D)
function [xm,fv] =PSO(fitness,N,c1,c2,w,M,D)
%fitness:待优化的目标函数
%N:粒子数目
%c1:学习因子1
%c2:学习因子2
%w:惯性权重
%M:最大迭代次数
%D:自变量个数
%xm:目标函数取最小值时的自变量值
%fv:目标函数最小值
%--------------- (1)随机初始化各微粒的位置和速度------------------------
format long;
for i = 1:N   %粒子数目
    for j = 1:D   %自变量个数
        x(i,j)=randn;
        v(i,j)=randn;
    end
end
%------ (2)计算各个粒子的适应度,并初始化 pi 和 pg----------------------
for i=1:N
    p(i)=fitness(x(i,:));  %pi为个体历史最优值
    y(i,:)=x(i,:);
end

pg =x(N,:);
for i = 1:(N-1)
    if fitness(x(i,:))<fitness(pg)%pg为全局最优值
        pg =x(i,:);
    end
end
%------------------(3)更新粒子的速度和位移 ---------------------------------
for t=1:M   %(6)迭代次数,作为停止条件
    for i = 1:N
        v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
        x(i,:)=x(i,:)+v(i,:);
%-------------------------(4)找历史最优值------------------------------------      
        if fitness(x(i,:))<p(i)
            p(i)=fitness(x(i,:));
            y(i,:)=x(i,:);
        end
%-----------------------(5)找全局最优值-------------------------------------        
        if p(i)<fitness(pg)
            pg = y(i,:);
        end
    end
    pbest(t)=fitness(pg);
end

xm = pg';
fv = fitness(pg);      

%目标函数文件fitness.m文件
function F = fitness(x)
F = 0;
for i= 1:30
    F =x(i)^2;
end

 


版权声明:本文为qq_34243694原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。