文章目录

  • 一、粒子群算法概述
    • 1、算法思想
    • 2、算法步骤
  • 二、matlab实现
  • 三、参数设置及分析
    • 1、参数w(惯性权重)对算法的影响
    • 2、参数c1(自身加速因子)对算法的影响
    • 3、参数c2(全局加速因子)对算法的影响
    • 4、适应度函数维度对算法的影响
    • 5、种群数量对算法的影响
    • 6、小结
一、粒子群算法概述
1、算法思想

粒子群算法(PSO)是通过模拟鸟群觅食行为而发展起来的一种基于群体协作的随机搜索算法。PSO模拟鸟群的觅食行为。一群分散的鸟在随机地飞行觅食,它们不知道食物所在的具体位置,但是有一个间接的机制会让小鸟知道它当前位置离食物的距离(例如食物香味的浓淡等),于是各个小鸟就会在飞行过程中不断记录和更新它曾经到达的离食物最近位置,同时,它们通过信息交流的方式比较大家所找到的最好位置,得到一个当前整个群体已经找到的最佳位置。这样,每个小鸟在飞行的时候就有了一个指导的方向,它们会结合自身的经验和整个群体的经验,调整自己的飞行速度和所在位置,不断地寻找更加接近食物的位置,最终使得群体聚集到食物位置。

2、算法步骤

(1)初始化所有的粒子,初始化他们的速度和位置,并且将个体的历史最优pBest设为当前位置,而群体中最优的个体作为当前的gBest。
(2)在每一代的进化中,计算各个粒子的适应度函数值。
(3)如果该粒子当前的适应度函数值比其历史最优值要好,那么历史最优将会被当前位置所替代;如果该粒子的历史最优比全局最优要好,那么全局最优将会被该粒子的历史最优所替代。
(4)更新每个粒子的速度和位置。
(5)如果还没有到达结束条件,则转到 (2),否则输出gBest并结束。

二、matlab实现
%% 清空环境
clc
clear%% 参数初始化
%粒子群算法中的三个参数
c1 = 1.49445;%加速因子
c2 = 1.49445;
w=0.9;   %惯性权重maxgen=1000;   % 进化次数
sizepop=200;   %种群规模Vmax=1;       %限制速度围
Vmin=-1;
popmax=5;    %变量取值范围
popmin=-5;
dim=10;       %适应度函数维数func=1;       %选择待优化的函数,1为Rastrigin,2为Schaffer,3为Griewank
Drawfunc(func);%画出待优化的函数,只画出二维情况作为可视化输出%% 产生初始粒子和速度
for i=1:sizepop%随机产生一个种群pop(i,:)=popmax*rands(1,dim);    %初始种群V(i,:)=Vmax*rands(1,dim);             %初始化速度%计算适应度fitness(i)=fun(pop(i,:),func);   %粒子的适应度
end%% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
gbest=pop(bestindex,:);   %全局最佳
pbest=pop;                %个体最佳
fitnesspbest=fitness;     %个体最佳适应度值
fitnessgbest=bestfitness; %全局最佳适应度值%% 迭代寻优
for i=1:maxgenw=(0.95-0.05)/(0-maxgen)*i+0.95;    %w的值随着进化次数呈线性变化fprintf('第%d代 w=%f ',i,w);fprintf('最优适应度%f\n',fitnessgbest);c1=(1.99-0.01)/(0-maxgen)*i+1.99;   %c1的值随着进化次数呈线性变化c2=(0.01-1.99)/(maxgen-0)*i+0.01;    %c2的值随着进化次数呈线性变化for j=1:sizepop%速度更新V(j,:) = w*V(j,:) + c1*rand*(pbest(j,:) - pop(j,:)) + c2*rand*(gbest - pop(j,:)); %根据个体最优pbest和群体最优gbest计算下一时刻速度V(j,find(V(j,:)>Vmax))=Vmax;   %限制速度不能太大V(j,find(V(j,:)<Vmin))=Vmin;%种群更新pop(j,:)=pop(j,:)+0.5*V(j,:);       %位置更新pop(j,find(pop(j,:)>popmax))=popmax;%坐标不能超出范围pop(j,find(pop(j,:)<popmin))=popmin;if rand>0.98                         %加入变异种子,用于跳出局部最优值pop(j,:)=rands(1,dim);end%更新第j个粒子的适应度值fitness(j)=fun(pop(j,:),func); endfor j=1:sizepop%个体最优更新if fitness(j) < fitnesspbest(j)pbest(j,:) = pop(j,:);fitnesspbest(j) = fitness(j);end%群体最优更新if fitness(j) < fitnessgbestgbest = pop(j,:);fitnessgbest = fitness(j);endend yy(i)=fitnessgbest;    end
%% 结果分析
figure;
plot(yy)
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);
三、参数设置及分析
1、参数w(惯性权重)对算法的影响

当其他参数不变,参数w随着迭代次数的变化而线性变化时

  • 待优化的函数为Rastrigin时
    Rastrigin函数图像:

    经过多次随机生成种群得到的最优个体适应度平均值为4.1827。
  • 待优化的函数为Schaffer时
    Schaffer函数图像:


    经过多次随机生成种群得到的最优个体适应度平均值为-1.0000。
  • 待优化的函数为Griewank时
    Griewank函数图像:


    经过多次随机生成种群得到的最优个体适应度平均值为0.0000。

结论:w是惯性权重参数,w取值较大时,种群中粒子的搜索能力变强,局部搜索能力减弱,虽有利于算法的全局搜索并得到全局最优解,但不易得到精确解;相反,w取值较小时,种群中粒子的局部搜索能力增强,全局搜索能力减弱,虽有利于算法的收敛,但粒子容易陷入局部“最优解”。因此,当算法初期具有较大的w,使得算法初期具有较强的搜索能力,而随着算法的进行w的值逐渐变小,使得算法能得到相对精确的结果时,算法的性能较好。

2、参数c1(自身加速因子)对算法的影响

当其他参数不变,参数c1随着迭代次数的变化而线性变化时

  • 待优化的函数为Rastrigin时

    经过多次随机生成种群得到的最优个体适应度平均值为4.4774。
  • 待优化的函数为Schaffer时

    经过多次随机生成种群得到的最优个体适应度平均值为-1.0000。
  • 待优化的函数为Griewank时

    经过多次随机生成种群得到的最优个体适应度平均值为0.0000。

结论:c1为自身加速因子参数,决定微粒个体经验对微粒自身运行轨迹的影响,使粒子向群体内的最优点靠近。c1较小时,可能使粒子盲目向局部最优靠拢,在远离目标区域内徘徊,从而陷入局部最优;c1较大时,粒子行为分散,收敛速度变慢,难以找到最优解。

3、参数c2(全局加速因子)对算法的影响

当其他参数不变,参数c2随着迭代次数的变化而线性变化时

  • 待优化的函数为Rastrigin时

    经过多次随机生成种群得到的最优个体适应度平均值为4.2801。
  • 待优化的函数为Schaffer时

    经过多次随机生成种群得到的最优个体适应度平均值为-1.0000。
  • 待优化的函数为Griewank时

    经过多次随机生成种群得到的最优个体适应度平均值为0.0000。

结论:c2为全局加速因子参数,决定群体经验对微粒自身运行轨迹的影响。c2较小时,粒子趋向于自身曾经走过的最优路线,从而使得粒子较分散,导致收敛速度缓慢;c2较大时,可使粒子迅速向目标区域移动,但盲目移动至目标区域可能会使粒子错过最优解。

4、适应度函数维度对算法的影响
  • 待优化的函数为Rastrigin时
  • 待优化的函数为Schaffer时
  • 待优化的函数为Griewank时

结论:从适应度上看,随着维度的增大,Rastrigin函数的适应度值越来越大,Schaffer函数的适应度值始终为-1,Griewank函数的适应度值由0缓慢增大;从运行时间上看,三者的运行时间都随着维度的增大而增加,其中Schaffer函数变化幅度比Rastrigin函数、Griewank函数大。

5、种群数量对算法的影响
  • 待优化的函数为Rastrigin时
  • 待优化的函数为Schaffer时
  • 待优化的函数为Griewank时

结论:从适应度上看,随着种群数量的增大,Rastrigin函数的适应度值缓慢增大,Schaffer函数的适应度值始终为-1,Griewank函数的适应度值始终为0;从运行时间上看,三者的运行时间都随着适应度函数维度的增大而增大,其中Schaffer函数、Griewank函数变化幅度相对较大,Rastrigin函数变化幅度不明显。

6、小结

粒子群算法中各个参数对算法的运行效率有较大影响。例如参数w(惯性权重)的改变会对最优结果的搜索产生影响,而种群数量、维度的改变基本不会影响最优结果的搜索。即使在同一参数设置下,算法的效率也大有不同,例如其他参数不变时,Rastrigin函数、Schaffer函数、Griewank函数三者的最优结果的搜索也会不同。

计算智能--粒子群优化算法相关推荐

  1. 计算智能——粒子群优化算法实验

    计算智能--粒子群优化算法实验 定义 算法流程 参数说明 种群规模N 粒子的长度D 最大速度Vmax 惯性权重 加速系数c1和c2 代码 主程序 PSO.m 画出函数图像 Drawfunc.m 计算粒 ...

  2. pso解决tsp matlab,计算智能课程设计_粒子群优化算法求解旅行商问题_Matlab实现.doc...

    计算智能课程设计_粒子群优化算法求解旅行商问题_Matlab实现.doc 摘要:TSP是一个典型的NPC问题.本文首先介绍旅行商问题和粒子群优化算法的基本概念.然后构造一种基于交换子和交换序[1]概念 ...

  3. 【计算智能】读书笔记 第六章节 粒子群优化算法

    文章目录 1. 算法简介 2. 算法基本流程 算法流程图 伪代码 3. 算法改进研究 3.1 算法理论研究的改进 3.2 算法拓扑结构的改进 3.2.1 静态拓扑结构的改进 3.2.2 动态拓扑结构的 ...

  4. 【计算智能】——群体智能算法(蚁群优化算法ACO、粒子群优化算法PSO)

    群体智能算法 与大多数基于梯度的优化算法不同,群体智能算法依靠的是概率搜索算法. 与梯度算法及传统演化算法相比优点: 没有集中控制约束,不会因为个体的故障影响整个问题的求解. 以非直接信息交流的方式确 ...

  5. 粒子群优化算法(PSO)简介及MATLAB实现

    目录 粒子群优化算法概述 PSO算法步骤 PSO(粒子群优化算法)与GA(遗传算法)对比 PSO的MATLAB实现 粒子群优化算法概述 • 粒子群优化(PSO, particle swarm opti ...

  6. 一文搞懂什么是粒子群优化算法(Particle Swarm Optimization,PSO)【附应用举例】

    Python代码链接放文末. 本文参考了很多张军老师<计算智能>的第六章知识. 本文来源:https://blog.csdn.net/qq_44186838/article/details ...

  7. 改进粒子群优化算法(IWAPSO)的MATLAB源程序

    改进粒子群优化算法(IWAPSO)的MATLAB源程序 作者:aaron8967    主页:http://aaron8967.blog.51cto.com 说明:粒子群优化算法(Particle S ...

  8. 粒子群优化算法_每日论文19:粒子群优化算法综述

    每日论文 第十九篇 2020/07/27 摘要:粒子群优化 (PSO)算法是一种新兴的优化技术 ,其思想来源于人工生命和演化计算理论.PSO通过粒子追随自己找到的最好解和整个群的最好解来完成优化.该算 ...

  9. 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用

    粒子群优化算法-Python版本和Matlab函数 particleswarm 调用 前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab ...

最新文章

  1. 向窗体中拖放图片并显示
  2. Linux简介、什么是Linux
  3. 机器学习中的lazy method与eager method的比较
  4. 问题 C: 完美的数(思维)
  5. 百度的索引真的比雅虎多么?
  6. PHP中常见的五种设计模式
  7. ICLR2020满分论文 | 为什么梯度裁剪能加速模型训练?
  8. mysql与文件_MySQL——文件
  9. 2.2 LayoutInflater 加载布局文件源码
  10. DataFrame的行列操作
  11. 如何快速在LinkedIn上检索并申请相关的工作?
  12. 如何用产品经理思维写一篇商业计划书
  13. 试用华为3D建模服务
  14. dumpDex脱壳教程
  15. k6前级效果器怎么用_K6效果器功能说明
  16. React + Taro 小程序跳转公众号
  17. mc服务器常用指令_我的世界服务器指令大全 史上最全的服务器指令介绍
  18. 简单的python小程序祝福母亲,母亲节快乐!
  19. ECMAScript 6 字符串和数值的拓展
  20. 淘宝店小蜜配置手册——自定义知识库配置

热门文章

  1. 基于真实需求的新DeFi项目:Stoploss,Overlay,Unipeer,Crescendo
  2. 怎样理解条件概率公式
  3. 2022-2028年中国玛瑙行业市场研究及前瞻分析报告
  4. 2022年中国露营市场专题洞察
  5. 计算机网络安全知识征文,网络安全从我做起作文(精选5篇)
  6. 不得不看!国内深度摄像头方案大起底
  7. 给孩子的Scratch教程Lesson-7【蝙蝠大作战v0.1】
  8. GraphQL 渐进学习 06-graphql-采用-mockjs-mock数据
  9. 请问什么叫浪费时间?
  10. Eclipse设置快车键