粒子群算法 PSO(Particle Swarm Optimization)——原理及实现
文章目录
- 1. 粒子群算法的概念
- 2. 粒子群算法分析
- 3. PSO算法的流程和伪代码
- 4. PSO算法举例
- 5. PSO算法的matlab实现
1. 粒子群算法的概念
粒子群优化算法(PSO:Particle swarm optimization)是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。
2. 粒子群算法分析
- 基本思想
粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:
- 更新规则
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。
vi=vi+c1×rand()×(pbesti−xi)+c2×rand()×(gbesti−xi)(1)v_{i}=v_{i}+c_{1}\times\mathrm{rand}()\times(pbest_{i}-x_{i})+c_{2}\times\mathrm{rand}()\times(gbest_{i}-x_{i}) \tag{1} vi=vi+c1×rand()×(pbesti−xi)+c2×rand()×(gbesti−xi)(1)
xi=xi+vi(2)x_{i}=x_{i}+v_{i} \tag{2} xi=xi+vi(2)
其中i=1,2,⋯,Ni=1,2,\cdots,Ni=1,2,⋯,N,NNN是此群中粒子的总数;
viv_{i}vi是粒子的速度,viv_{i}vi的最大值为Vmax>0V_{\max}>0Vmax>0,如果vi>Vmaxv_{i}>V_{\max}vi>Vmax,则vi=Vmaxv_{i}=V_{\max}vi=Vmax;
rand()\mathrm{rand}()rand()是介于(0,1)之间的随机数;
xix_{i}xi为粒子的当前位置;
c1c_{1}c1和c2c_{2}c2是学习因子,通常c1=c2=2c_{1}=c_{2}=2c1=c2=2;
公式(1)的
- 第一部分称为记忆项,表示上次速度大小和方向的影响;
- 第二部分称为自身认知项,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;
- 第三部分称为群体认知项,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。
以上面两个公式为基础,形成了PSO的标准形式。
vi=ω×vi+c1×rand()×(pbesti−xi)+c2×rand()×(gbesti−xi)v_{i}=\omega\times v_{i}+c_{1}\times \mathrm{rand}()\times(pbest_{i}-x_{i})+c_{2}\times\mathrm{rand}()\times(gbest_{i}-x_{i}) vi=ω×vi+c1×rand()×(pbesti−xi)+c2×rand()×(gbesti−xi)
其中ω\omegaω叫做惯性因子,其值为非负。其值较大,全局寻优能力强,局部寻优能力弱;其值较小,全局寻优能力弱,局部寻优能力强。动态ω\omegaω能获得比固定值更好的寻优结果。动态ω\omegaω可在PSO搜索过程中线性变化,也可以根据PSO性能的某个测度函数动态改变。
目前采用较多的是线性递减权值(Linear Decreasing Weight,LDW)策略:
ω(t)=(ωini−ωend)(Gk−g)/Gk+ωend\omega^{(t)}=(\omega_{ini}-\omega_{end})(G_{k}-g)/G_{k}+\omega_{end} ω(t)=(ωini−ωend)(Gk−g)/Gk+ωend
其中GkG_{k}Gk是最大迭代次数;
ωini\omega_{ini}ωini是初始惯性权值;
ωend\omega_{end}ωend是迭代至最大进化代数时的惯性权值;
典型权值为:
ωini=0.9,ωend=0.4\omega_{ini}=0.9,\omega_{end}=0.4 ωini=0.9,ωend=0.4
ω\omegaω的引入,使用PSO算法性能有了很大的提高,针对不同的搜索问题,可以调整全局和局部搜索能力,也使PSO算法有成功地应用于很多实际问题。
公式(2)(3)被视为标准PSO算法。
3. PSO算法的流程和伪代码
4. PSO算法举例
5. PSO算法的matlab实现
% PSO algorithm:
% velosity: vi=w*vi+c1*rand()*(pbesti-xi)+c2*rand()*(gbesti-xi);
% position: xi=xi+vi;
% Objective Funtion:y=f(x1,x2)=x1^2+x2^2,-10<=x1,x2<=10%% -------------- set the weight of parameters ----------------
w=0.5; % the weight of velocity
c1=2; % the first weight of position
c2=2; % the second weight of position
N=1000; % the number of particles
NP=3; % the number of parameters per particle
Nstep=1000; % the step number of iteration
xmin=-100; % the upper limit for x
xmax=100; %the lower limit for x
vmax=1; % to be modified according to experience%% -------------- initialize --------------------------
x=unifrnd(xmin,xmax,N,NP) % position
v=unifrnd(-vmax,vmax,N,NP) %velositypbest=x; % the best position
% f=x(:,1).^2+x(:,2).^2; % objective function
%f=(x-5).^2;
% f=(x(:,1)-5).^2+(x(:,2)-10).^2;
f=(x(:,1)-5).^2+(x(:,2)-10).^2+(x(:,3)-20).^2;
flbest=f; % the optimal value per particle
fgbest=min(flbest); % for optimal value all particle
[p1,p2]=find(flbest==fgbest); % the position of the global optimal value
p3=size(p1);
if p3(1)==1p4=p1;
elsep4=p1(1);
end
gbest=pbest(p4,:); % the position of the global optimal value%% ----------- to iterate PSO------------------------
for i=1:Nstepgbesttemp=repmat(gbest,N,1); % extend 1D matrix into 2D matrixvtemp=w*v+c1*rand()*(pbest-x)+c2*rand()*(gbest-x);vtemp(vtemp>vmax)=vmax;vtemp(vtemp<-vmax)=-vmax;v=vtemp;xtemp=x+v;xtemp(xtemp>xmax)=xmax;xtemp(xtemp<xmin)=xmin;x=xtemp;% f=x(:,1).^2+x(:,2).^2; % to be improved
% f=(x-5).^2;
% f=(x(:,1)-5).^2+(x(:,2)-10).^2;f=(x(:,1)-5).^2+(x(:,2)-10).^2+(x(:,3)-20).^2;flbest=min(f,flbest); % compare two matrix for the minimum value[temp1,temp2]=find((flbest-f)==0); % the location of the optimal value changeif isempty(temp1)==0 % prevent null matrixx(temp1,:);pbest(temp1,:)=x(temp1,:);endfgbest=min(flbest); % for optimal value per particle's position[p1,p2]=find(flbest==fgbest); %the position of the global optimal valuep3=size(p1);if p3(1)==1 % prevent matrix elements from being greater than onep4=p1;elsep4=p1(1);endgbest=pbest(p4,:); %the position of the global optimal valueend
粒子群算法 PSO(Particle Swarm Optimization)——原理及实现相关推荐
- 【智能算法】粒子群算法(Particle Swarm Optimization)超详细解析+入门代码实例讲解...
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 算法起源 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由E ...
- 机器学习中的数学——粒子群算法(Particle Swarm Optimization, PSO)(三):改进的粒子群算法
分类目录:<机器学习中的数学>总目录 相关文章: · 梯度下降法(Gradient Descent) · 随机梯度下降(Stochastic Gradient Descent, SGD) ...
- 粒子群算法(PSO)的C++实现
粒子群算法(PSO)的C++实现 粒子群算法(PSO----Particle Swarm Optimization)是常用的智能算法之一,它模拟了 鸟群觅食 行为,是一种具有随机性的 仿生算法 .PS ...
- 粒子群算法(PSO)初识
粒子群算法PSO是模拟群体智能所建立起来的一种优化算法,用于解决各种优化问题. 抽象问题实例化: 假设一群 鸟在觅食,只有一个地方有 食物,所有鸟儿都看不见食物(不知道食物的具体位置,知道了就不无需觅 ...
- 粒子群优化算法和python代码_Python编程实现粒子群算法(PSO)详解
1 原理 粒子群算法是群智能一种,是基于对鸟群觅食行为的研究和模拟而来的.假设在鸟群觅食范围,只在一个地方有食物,所有鸟儿看不到食物(不知道食物的具体位置),但是能闻到食物的味道(能知道食物距离自己位 ...
- 粒子群算法(PSO)Matlab实现(两种解法)
粒子群算法(PSO) 用途:可以用于寻求最优解问题 生物机理:鸟群寻找湖泊 在函数中,有很多是无法求出最优解的 在这时,我们会采用软计算方法,而PSO算法,在软计算算法中有重要的地位: 好吧,这个仁者 ...
- C语言实现粒子群算法(PSO)一
C语言实现粒子群算法(PSO)一 最近在温习C语言,看的书是<C primer Plus>,忽然想起来以前在参加数学建模的时候,用过的一些智能算法,比如遗传算法.粒子群算法.蚁群算法等等. ...
- 【老生谈算法】标准粒子群算法(PSO)及其Matlab程序和常见改进算法——粒子群算法
1.算法详解: 1.原文下载: 本算法原文如下,有需要的朋友可以点击进行下载 序号 原文(点击下载) 本项目原文 [老生谈算法]标准粒子群算法(PSO)及其Matlab程序和常见改进算法.docx 2 ...
- 粒子群算法(PSO)以及Matlab实现
粒子群算法(PSO)以及Matlab实现 算法背景 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy ...
最新文章
- canvas做一个简单气泡图
- [AlwaysOn Availability Groups]排查:Primary上的修改无法在Secondary体现
- 有的OUTLOOK不能自动加载归档ARCHIVE邮件的问题
- ListView之SimpleAdapter的使用
- UA STAT675 统计计算I 随机数生成7 Envelope Accept-Reject Algorithm
- Piggy-Bank POJ - 1384(完全背包+背包放满)
- Oracle提供的序号函数
- python 不显示前几个字符_「Python 秘籍」删除字符串中不需要的字符
- SMART Utility for mac (硬盘检测工具)
- 软考对程序员的作用,对程序员有多大意义?
- 51单片机学习笔记8 -- OLED显示(SPI)
- iOS 录音,播放并上传
- BeX5企业快速开发平台-前端快速开发框架
- 金税盘计算机USB无法识别,金税盘连接电脑无法识别怎么回事?
- android 11.0 12.0Camera2 去掉后置摄像头 仅支持前置摄像头功能
- 段式液晶程序设计技巧
- 模拟水面表面张力,效果自然、真实,北大图灵班研究入选SIGGRAPH
- 大连理工大学计算机科学与技术考研科目,2020年大连理工大学计算机科学与技术考研都考哪些科目,尤其-培训家...
- html隐藏m3u8文件,播放具有HTML视频标签的m3u8文件
- discuz帖子列表页调用帖子作者头像
热门文章
- CPU基本结构和运行原理
- 很火的华为太空表网站源码
- 绍兴文理学院元培学院第十五届大学生程序设计竞赛
- Vuforia 虚拟按钮(Unity 2020)
- 滑雪与时间胶囊 题解 BZOJ2753
- 各国语言代码,对于多语言软件非常有用!
- 前端微信小程序资讯类仿今日头条微信小程序
- js获取的当前时间的月份--getFullYear()、getMonth()、getDate(),本示例是获取当前月份的开始跟结束
- hibernate的hql查询语句总结
- 泌尿外科电子病历软件的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告