粒子群算法( 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. OpenCV使用CUDA处理图像的教程与实战
  2. C# 如何以参数的形式调用.exe程序
  3. MTK前CFO喻铭铎分享经营智慧:山寨只是门票
  4. NIUDAY 11.23 北京站抢票啦 | 看 AI 落地行业 享 AI 时代红利
  5. linux自带浏览器如何更新,在deepin上安装edge浏览器后更新系统报错的解决方案
  6. java math 类_Java Math类静态双层(double d)示例
  7. Vue 切换路由后页面回到页面顶部
  8. android ndk 文件管理,Android NDK开发指南(二)Android.mk文件
  9. 最新数据:中国网民超10亿,中老年群体增速最快
  10. JqueryEasyUI $.Parser
  11. 拓端tecdat|R语言使用蒙特卡洛模拟进行正态性检验及可视化
  12. 哪些好的绘图软件和绘图工具?
  13. 网站服务器 开放端口扫描,端口扫描之开放端口扫描方式
  14. ubuntu安装系分区,挂载磁盘
  15. Tableau——其他参考方法
  16. Android studio使用SVN
  17. Windows7 基本常见问题及解决方案之汇总
  18. 古典密码分析(冗余度,唯一解距离,语言统计,重合指数)
  19. mui ajax 下拉,mui下拉菜单
  20. 第一章 爬虫(认识网络爬虫)

热门文章

  1. matlab计算欧式距离代码,欧式距离计算公式
  2. 计算样本欧式距离——python
  3. 计算机系迎新主题,计算机系迎新庆国庆晚会异彩纷呈
  4. 虚拟画笔 - OpenCV
  5. linux 实验楼Linux 基础入门 作业
  6. 用 html+JavaScript+CSS 写一个全屏时钟
  7. 华为中国生态大会2021:因聚而生 有能有为
  8. react实现tree组件
  9. Netty(三)文件上传下载、心跳检测
  10. siege 用户登录_压测工具siege