粒子群算法( Particle Swarm Optimization, PSO)最早是由Eberhart和Kennedy于1995年提出,它的基本概念源于对鸟群觅食行为的研究。设想这样一个场景:一群鸟在随机搜寻食物,在这个区域里只有一块食物,所有的鸟都不知道食物在哪里,但是它们知道当前的位置离食物还有多远。最简单有效的策略?寻找鸟群中离食物最近的个体来进行搜素。PSO算法就从这种生物种群行为特性中得到启发并用于求解优化问题。

用一种粒子来模拟上述的鸟类个体,每个粒子可视为N维搜索空间中的一个搜索个体,粒子的当前位置即为对应优化问题的一个候选解,粒子的飞行过程即为该个体的搜索过程.粒子的飞行速度可根据粒子历史最优位置和种群历史最优位置进行动态调整.粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子单独搜寻的最优解叫做个体极值,粒子群中最优的个体极值作为当前全局最优解。不断迭代,更新速度和位置。最终得到满足终止条件的最优解。
粒子群算法是一门新兴算法,此算法与遗传算法有很多相似之处,其收敛于全局最优解的概率很大。
①相较于传统算法计算速度非常快,全局搜索能力也很强;
②PSO对于种群大小不十分敏感,所以初始种群设为500-1000,速度影响也不大;
③粒子群算法适用于连续函数极值问题,对于非线性、多峰问题均有较强的全局搜索能力。
在群鸟觅食模型中,每个个体都被看成一个粒子,则群鸟可以被看成一个粒子群。假设在一个D维空间里,有m个粒子组成一个群体,其中第i个粒子(i=1,2,…,m)位置表示xi=(xi1,xi2,...,xiD)x_i=(x_i^1,x_i^2,...,x_i^D)xi​=(xi1​,xi2​,...,xiD​),即第i个粒子在D维空间的最好位置是xix_ixi​,粒子个体经历的最好位置记为Pi=(pi1,pi2,...,piD)P_i=(p_i^1,p_i^2,...,p_i^D)Pi​=(pi1​,pi2​,...,piD​),整个群体所有粒子经历的最好位置记为Pg=(pg1,pg2,...,pgD)P_g=(p_g^1,p_g^2,...,p_g^D)Pg​=(pg1​,pg2​,...,pgD​)。粒子速度记为Vi=(vi1,vi2,...,viD)V_i=(v_i^1,v_i^2,...,v_i^D)Vi​=(vi1​,vi2​,...,viD​)。
粒子采用如下算法对粒子所在的位置进行不断的更新(单位时间1):
vid=wvid+c1r1(pid−xid)+c2r2(pgd−xid)v_i^d=wv_i^d+c_1r_1(p_i^d-x_i^d)+c_2r_2(p_g^d-x_i^d)vid​=wvid​+c1​r1​(pid​−xid​)+c2​r2​(pgd​−xid​)
xid=xid+avidx_i^d=x_i^d+av_i^dxid​=xid​+avid​
其中,i=1,2,...,m;d=1,2,...,D;wi=1,2,...,m;d=1,2,...,D;wi=1,2,...,m;d=1,2,...,D;w是非负数,称为加速因子;加速常数c1c_1c1​和c2c_2c2​是常数;r1r_1r1​和r2r_2r2​是[0,1]范围内变换的随机数;aaa是约束因子,目的是控制速度权重。此外,vidv_i^dvid​属于[−vmaxd,vmaxd][-v_{max}^d,v_{max}^d][−vmaxd​,vmaxd​]。

function main()
clc;clear all;close all;
tic;                              %程序运行计时
E0=0.001;                        %允许误差
MaxNum=100;                    %粒子最大迭代次数
narvs=1;                         %目标函数的自变量个数
particlesize=30;                    %粒子群规模
c1=2;                            %每个粒子的个体学习因子,也称为加速常数
c2=2;                            %每个粒子的社会学习因子,也称为加速常数
w=0.6;                           %惯性因子
vmax=0.8;                        %粒子的最大飞翔速度
x=-5+10*rand(particlesize,narvs);     %粒子所在的位置
v=2*rand(particlesize,narvs);         %粒子的飞翔速度
%用inline定义适应度函数以便将子函数文件与主程序文件放在一起,
%目标函数是:y=1+(2.1*(1-x+2*x.^2).*exp(-x.^2/2))
%inline命令定义适应度函数如下:
fitness=inline('1/(1+(2.1*(1-x+2*x.^2).*exp(-x.^2/2)))','x');
%inline定义的适应度函数会使程序运行速度大大降低
for i=1:particlesizefor j=1:narvsf(i)=fitness(x(i,j));end
end
personalbest_x=x;
personalbest_faval=f;
[globalbest_faval i]=min(personalbest_faval);
globalbest_x=personalbest_x(i,:);
k=1;
while k<=MaxNumfor i=1:particlesizefor j=1:narvsf(i)=fitness(x(i,j));endif f(i)<personalbest_faval(i) %判断当前位置是否是历史上最佳位置personalbest_faval(i)=f(i);personalbest_x(i,:)=x(i,:);endend[globalbest_faval i]=min(personalbest_faval);globalbest_x=personalbest_x(i,:);for i=1:particlesize %更新粒子群里每个个体的最新位置v(i,:)=w*v(i,:)+c1*rand*(personalbest_x(i,:)-x(i,:))...+c2*rand*(globalbest_x-x(i,:));for j=1:narvs    %判断粒子的飞翔速度是否超过了最大飞翔速度if v(i,j)>vmax;v(i,j)=vmax;elseif v(i,j)<-vmax;v(i,j)=-vmax;endendx(i,:)=x(i,:)+v(i,:);endif abs(globalbest_faval)<E0,break,endk=k+1;
end
Value1=1/globalbest_faval-1; Value1=num2str(Value1);
% strcat指令可以实现字符的组合输出
disp(strcat('the maximum value','=',Value1));
%输出最大值所在的横坐标位置
Value2=globalbest_x; Value2=num2str(Value2);
disp(strcat('the corresponding coordinate','=',Value2));
x=-5:0.01:5;
y=2.1*(1-x+2*x.^2).*exp(-x.^2/2);
plot(x,y,'m-','linewidth',3);
hold on;
plot(globalbest_x,1/globalbest_faval-1,'kp','linewidth',4);
legend('目标函数','搜索到的最大值');xlabel('x');ylabel('y');grid on;toc;

运行结果:

粒子群算法及其matlab实现相关推荐

  1. 粒子群算法的matlab实现

    转自:https://blog.csdn.net/just_do_it_123/article/details/50993439 粒子群算法,也称粒子群优化算法(Particle Swarm Opti ...

  2. jeremy的路径规划学习-1.三维地图定义,散点拟合插值与粒子群算法(matlab实现)

    jeremy的路径规划学习-1.三维地图定义,散点拟合插值与粒子群算法(matlab实现) 本文基于小黎的ally学习资料实现,感谢该博主的无私奉献 三维地图与二维地图的差别 1.二维无高度信息,多用 ...

  3. PSO粒子群算法的matlab实践【PSO学习笔记_02】

    在PSO粒子群算法[PSO学习笔记_01]_L1234X的博客-CSDN博客中,主要以介绍PSO算法的个人理解,以理论为主,本文将在此基础上进行实践. 目录 例题 对应函数图像用matlab画出为: ...

  4. MATLAB智能优化算法 - 粒子群算法及MATLAB实例仿真

    一.粒子群算法理论 粒子群算法来源于鸟类集体活动的规律性,进而利用群体智能建立简化模型.它模拟的是鸟类的觅食行为,将求解问题的空间比作鸟类飞行的时间,每只鸟抽象成没有体积和质量的粒子,来表征一个问题的 ...

  5. 粒子群算法(PSO)Matlab实现(两种解法)

    粒子群算法(PSO) 用途:可以用于寻求最优解问题 生物机理:鸟群寻找湖泊 在函数中,有很多是无法求出最优解的 在这时,我们会采用软计算方法,而PSO算法,在软计算算法中有重要的地位: 好吧,这个仁者 ...

  6. 粒子群算法的matlab实现(一)

    粒子群算法(Particle Swarm Optimization,PSO)是20世纪90年代兴起的一门学科,因其概念简明.实现方便.收敛速度快而为人所知.粒子群算法的基本思想是模拟鸟群随机搜寻食物的 ...

  7. 粒子群算法的matlab实现(二)

    上一次的博客中我将粒子群的搜索过程可视化了,并将其转存为了gif格式文件,这个过程我先在这里给大家讲一下: 1.首先pause(),是在每次绘图之后暂停一段时间,单位是秒,再进行下一次绘图: 2.而当 ...

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

    %程序1:PSO.m文件 %------ 基本粒子群优化算法( Particle Swarm Optimization ) ----------- %------ 功能:求解无约束问题 %------ ...

  9. 算法-粒子群算法-Matlab实现

    粒子群算法(Particle Swarm Optimization,PSO)是20世纪90年代兴起的一门学科,因其概念简明.实现方便.收敛速度快而为人所知.粒子群算法的基本思想是模拟鸟群随机搜寻食物的 ...

最新文章

  1. javaMail发邮件
  2. 全球及中国造纸行业十四五产量调研与运营能力状况分析报告2022版
  3. python对城市规划_Python对城市距离自动化爬取【必学小型项目】
  4. Hive 空值、NULL判断
  5. 第22章:MongoDB-聚合操作--聚合管道--$out
  6. ubuntu上有个小项目 ,需要调用xx.sh脚本, 出现无法识别 某些环境变量的解决办法,仅供参考
  7. 智能商业大会构造信息化交流平台
  8. 联级阴影贴图CSM(Cascaded shadow map)原理与实现
  9. 打开json文件的工具_Flutter中JSON转Model——在线生成
  10. 【动态规划】路径dp:蓝桥2020: 数字三角形
  11. 手动绘制方向梯度直方图(HOG)
  12. 合理安排计算顺序避免溢出
  13. 设计模式在实际业务应用中的介绍之3——外观或门面模式Facade对AOP装配业务工厂的应用...
  14. 牛逼!Python分析5万多场英雄联盟比赛,教你轻松预测胜负!
  15. python写ppt_python可以写PPT吗
  16. 使用FreeImage保存彩图,灰度图
  17. java毕业设计产品销售管理系统Mybatis+系统+数据库+调试部署
  18. android 应用市场图尺寸,【干货】最新App应用市场截图尺寸大全
  19. 1_一些文献中的英文解释和用法整理
  20. 如何设置Python环境变量?

热门文章

  1. Exception in thread main java.lang.NoClassDefFoundError: antlr/ANTLRException 解决方法
  2. 数据库--sql笔记--case when then用法
  3. 单链表的简单选择排序
  4. ISO26262 - Coverage
  5. 网络性能测试与分析(1——概述)
  6. elastic和mysql的区别_请问mongodb , elasticsearch , mysql各有什么优缺点?
  7. 【2021/7/19更新】【梳理】简明操作系统原理 附录五 RAID(docx)
  8. html页面加载触发的事件,jquery页面加载触发onchange事件
  9. 基于springboot西安酷跑健身房管理系统 毕业设计-附源码345421
  10. 如何提高效率(In memory of Aaron Swarts)