一帧数据 微信小程序教程 个人收款码 联合主键 Jenkins 5G ansible cuda photoshop视频教程全集下载 linux下载器 kafka学习 css选择器有几种 完全去vm去虚拟化工具 python3入门 python如何实现多线程 python异常 java入门 java的基本类型 java中泛型 java创建文件 java输出当前时间 java格式化字符串 java列表 找茬辅助 hadoop权威指南 梦幻西游手游助手 js转int lseek函数 c语言代码表白 firework下载 c语言指数函数 lol卡米尔 小票打印 视频后期处理软件 任意屏官网 c4d挤压 ps去白底 jsp源码 dnf传说 苹果手机耳机没声音
当前位置: 首页 > 学习教程  > python

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

2021/2/6 22:23:55 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

粒子群优化算法(PSO)求函数最大值(最小值) 一、使用步骤 #mermaid-svg-lh7sZSgPZiKKjRyN .label{font-family:trebuchet ms, verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-lh7sZSg…

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

一、使用步骤

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

二、注意

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

更新位置与速度:

在这里插入图片描述

三、代码

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

四.运行结果

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
##参考文章:
[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


本文链接: http://www.dtmao.cc/news_show_2000074.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?