Matlab粒子群优化算法(PSO)求函数最大值(最小值)

粒子群优化算法(PSO)求函数最大值(最小值)

一、使用步骤

初始化粒子
计算适应度值
计算极值
更新位置与速度
计算适应度
更新极值

二、注意

适应度值一般为优化种群目标函数值

更新位置与速度:

Matlab粒子群优化算法(PSO)求函数最大值(最小值)_第1张图片

三、代码

test.m

%% I. 清空环境%二元函数
clc
clear 
 
%% II. 绘制目标函数曲线图

m=10;
D=2;
x1=linspace(-10,pi,80); 
x2=x1; 
[X,Y]=meshgrid(x1,x2);


A=sin(X).*(sin(X.^2/pi)).^(2*m); 
B=sin(Y).*(sin(2*(Y.^2)/pi)).^(2*m);
Z=-(A+B);
mesh(X,Y,Z);

xlabel('X') 
ylabel('Y')
zlabel('Z')
title('Michalewics')
colormap(summer)
grid on;
hold on

 
%% III. 参数初始化
c1 = 1.49445;%c1和c2:是学习因子,通常c1=c2=2
c2 = 1.49445;

ws=0.9;%w权重
we=0.4;

 
maxgen = 100;   % 进化次数  
sizepop = 80;   %种群规模
 
Vmax = 1;   %速度的范围,超过则用边界值。
Vmin = -1;  
popmax = 3;   %个体的变化范围
popmin = -3;
 
%% IV. 产生初始粒子和速度

for i = 1:sizepop
    % 随机产生一个种群
    pop(i,:) = 3*rands(1,2);    %初始种群粒子位置,rands产生(-1,1)
    V(i,:) = rands(1,2);  %初始化速度
    % 计算适应度
    fitness(i) = fun(pop(i,:));   
end
 
%% V. 个体极值和群体极值
[bestfitness,bestindex] = max(fitness);
gbest = pop(bestindex,:);   %全局最佳
fitnessgbest = bestfitness;   %全局最佳适应度值
pbest = pop;    %个体最佳
fitnesspbest = fitness;   %个体最佳适应度值

 
%% VI. 迭代寻优
for i = 1:maxgen
    w=ws-(ws-we)*(i/maxgen);
    for j = 1:sizepop
        % 速度更新
        V(j,:) = w*V(j,:) + c1*rand*(pbest(j,:) - pop(j,:)) + c2*rand*(gbest - pop(j,:));
        V(j,find(V(j,:)>Vmax)) = Vmax;
        V(j,find(V(j,:)<Vmin)) = Vmin;
        
        % 种群更新
        pop(j,:) = pop(j,:) + V(j,:);
        pop(j,find(pop(j,:)>popmax)) = popmax;
        pop(j,find(pop(j,:)<popmin)) = popmin;
        
        % 适应度值更新
        fitness(j) = fun(pop(j,:)); 
    end
    
    for j = 1:sizepop    
        % 个体最优更新
        if fitness(j) > fitnesspbest(j)
            pbest(j,:) = pop(j,:);
            fitnesspbest(j) = fitness(j);
        end
        
        % 群体最优更新
        if fitness(j) > fitnessgbest
            gbest = pop(j,:);
            fitnessgbest = fitness(j);
        end
    end 
    Q(i) = fitnessgbest;          
end
 
%% VII. 输出结果并绘图

[gbest fitnessgbest];
plot3(gbest(1),gbest(2),fitnessgbest,'r*')
 
figure
plot(Q)
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);

fun.m

%定义适应度函数
function z = fun(x) 
        A=sin(x(1))*(sin(x(1)^2/pi))^(2*10); 
        B=sin(x(2))*(sin(2*(x(2)^2)/pi))^(2*10);
        z=-(A+B);

end

四.运行结果

Matlab粒子群优化算法(PSO)求函数最大值(最小值)_第2张图片

Matlab粒子群优化算法(PSO)求函数最大值(最小值)_第3张图片
Matlab粒子群优化算法(PSO)求函数最大值(最小值)_第4张图片
##参考文章:
[1]https://blog.csdn.net/fendoubasaonian/article/details/68922583
[2]https://blog.csdn.net/daaikuaichuan/article/details/81382794?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control

你可能感兴趣的:(算法,matlab,pso)