粒子群算法(PSO)——总体概述
粒子群算法(Particle swarm optimization ,PSO)
PSO 是1995年由 Kennedy 和 Eberhart提出的一种算法。PSO和GA的相似之处在种群的初始化,都是随机生成初始解,但对于PSO的每个潜在解都会设置一个随机速度和位置,这被称为粒子,粒子在问题空间飞行来搜寻最优解。粒子个体执行很简单行为:去模拟其周围个体的“成功”与该粒子本身的“成功”。从这些简单个体简单行为的群体涌现实现了在高维空间中的最优解搜索。
PSO根据他们邻居规模的不同被分为两种算法,分别是局部最优PSO( l−bestl-bestl−best PSO)和全局最优PSO( g−bestg-bestg−best PSO)。
PSO的速度成分
粒子 i 最佳位置以 yi(t)\mathbf y_i(t)yi(t) 表示(截止 t 时刻,粒子 i 搜索到的最优位置);邻居的最佳位置,记为 y^(t)\hat\mathbf y(t)y^(t); 粒子 i 的当前位置以 xi(t)\mathbf x_i(t)xi(t) 表示。将速度更新以矢量形式描述,则有:
vi(t+1)=vi(t)+c1⋅r1(t)⋅[yi(t)−xi(t)]+c2⋅r2(t)⋅[y^i(t)−xi(t)]\mathbf v_{i}(t+1)=\mathbf v_{i}(t)+c_1\cdot \mathbf r_{1}(t)\cdot [\mathbf y_{i}(t)-\mathbf x_{i}(t)]+c_2\cdot \mathbf r_{2}(t)\cdot [\hat \mathbf y_{i}(t)-\mathbf x_{i}(t)]vi(t+1)=vi(t)+c1⋅r1(t)⋅[yi(t)−xi(t)]+c2⋅r2(t)⋅[y^i(t)−xi(t)],
其中 vi(t)\mathbf v_{i}(t)vi(t) 是前速度,表示对之前飞行方向的记忆,这一项可视为动量,它阻止粒子改变方向,是惯性项;
c1⋅r1(t)⋅[yi(t)−xi(t)]c_1\cdot \mathbf r_{1}(t)\cdot [\mathbf y_{i}(t)-\mathbf x_{i}(t)]c1⋅r1(t)⋅[yi(t)−xi(t)] 是对粒子 i 过去表现的量化,被称为认知部分。某种意义上讲,认知部分是粒子 i 关于最优位置的个体记忆。这一项的影响是会使粒子退回到它曾经的最优位置;
c2⋅r2(t)⋅[y^i(t)−xi(t)]c_2\cdot \mathbf r_{2}(t)\cdot [\hat \mathbf y_{i}(t)-\mathbf x_{i}(t)]c2⋅r2(t)⋅[y^i(t)−xi(t)] 是对邻居信息的量化,即社会信息,被称为社会部分。社会部分类似于个人寻求达到的群体规范或标准;这一项的影响是使得每个粒子向该粒子邻居发现的最优位置移动。
认知部分和社会部分分别由 c1⋅r1(t)c_1\cdot \mathbf r_{1}(t)c1⋅r1(t)和 c2⋅r2(t)c_2\cdot \mathbf r_{2}(t)c2⋅r2(t) 赋予权重。当从时间 t 到 t+1 时,速度和位置的变化如下:
全局最优PSO
每个粒子的邻居是整个粒子群,g−bestg-bestg−best PSO的社会网络结构应用的是星型拓扑结构,这种结构中,粒子速度更新的社会部分反映的是从种群中的所有粒子中得到信息。
g−bestg-bestg−best PSO的速度为:vij(t+1)=vij(t)+c1⋅r1j(t)⋅[yij(t)−xij(t)]+c2⋅r2j(t)⋅[y^ij(t)−xij(t)]v_{ij}(t+1)=v_{ij}(t)+c_1\cdot r_{1j}(t)\cdot [y_{ij}(t)-x_{ij}(t)]+c_2\cdot r_{2j}(t)\cdot [\hat y_{ij}(t)-x_{ij}(t)]vij(t+1)=vij(t)+c1⋅r1j(t)⋅[yij(t)−xij(t)]+c2⋅r2j(t)⋅[y^ij(t)−xij(t)],
其中 vij(t)v_{ij}(t)vij(t) 是粒子 iii 在第 jjj 维的速度,xij(t)x_{ij}(t)xij(t) 是粒子 iii 在第 jjj 维的位置,j=1,2,⋯,nxj=1,2,\cdots,n_xj=1,2,⋯,nx;c1,c2c_1,c_2c1,c2 是加速度常数(用于衡量认知部分和社会部分分别的贡献程度),r1j(t),r2j(t)∼U(0,1)r_{1j}(t),r_{2j}(t)\sim U(0,1)r1j(t),r2j(t)∼U(0,1) 是从均匀分布中采样得到的随机值。
在最小化问题中,yi(t)\mathbf y_i(t)yi(t) 的更新规则为:yi(t+1)={yi(t),iff(xi(t+1))≥f(yi(t))xi(t+1)iff(xi(t+1))<f(yi(t))\displaystyle \mathbf y_i(t+1)=\left\{ \begin{aligned} \mathbf y_i(t), & & {if\,\,f(\mathbf x_i(t+1))\ge f(y_i(t))}\\ \mathbf x_i(t+1) & & {if\,\,f(\mathbf x_i(t+1))< f(y_i(t))}\\ \end{aligned} \right.yi(t+1)={yi(t),xi(t+1)iff(xi(t+1))≥f(yi(t))iff(xi(t+1))<f(yi(t))
其中,f:Rnx→Rf:\mathbb R^{n_x}\to\mathbb Rf:Rnx→R 是适应度函数。
而 y^(t)=min{f(x0(t)),⋯,xns(t))}\displaystyle \hat\mathbf y(t)=min\{f(\mathbf x_0(t)),\cdots,\mathbf x_{n_s}(t))\}y^(t)=min{f(x0(t)),⋯,xns(t))}
其算法伪代码可表示如下:
对于一个二维变量的寻优问题,以符号 “×\times×” 表示最优解位置,则在第 t 步和 t + 1步,粒子变化示意图为:
局部最优PSO
l−bestl-bestl−best PSO 中每个粒子的邻居相比于g−bestg-bestg−best PSO要少很多,它采用的是环形社会网络拓扑结构。这种结构中,粒子速度更新的社会部分反映的是粒子周边邻居中得到的信息,反映的是局部环境信息。这种情况下,社会信息是该粒子的邻居中的最佳位置,记为 y^(t)∈Ni\hat\mathbf y(t)\in\mathcal N_iy^(t)∈Ni。
其邻居集合可表示为:Ni={yi−nNi(t),yi−nNi+1(t),⋯,yi−1(t),yi+1(t),⋯,yi+nNi(t)}\mathcal N_i=\{\mathbf y_{i-n_{\mathcal N_i}}(t),\mathbf y_{i-n_{\mathcal N_i}+1}(t),\cdots,\mathbf y_{i-1}(t),\mathbf y_{i+1}(t),\cdots,\mathbf y_{i+n_{\mathcal N_i}}(t)\}Ni={yi−nNi(t),yi−nNi+1(t),⋯,yi−1(t),yi+1(t),⋯,yi+nNi(t)},邻居数量为nNin_{\mathcal N_i}nNi。个体最佳位置以 yi(t)\mathbf y_i(t)yi(t) 表示(截止 t 时刻,粒子 i 搜索到的最优位置)。则该方法的速度更新与 g−bestg-bestg−best PSO相同。
在基础的PSO中,粒子彼此之间没有联系,而邻居的选择是基于粒子索引的。基于索引的邻居选择,其不需要粒子的空间序列,因此计算是很便宜的,利用粒子之间的距离来生成邻居;同时,它不需要粒子在空间中的相对位置,还有助于所有粒子相关的优良解的信息的传播。
一个粒子可以作为许多粒子的邻居,这种邻居之间的交互作用促进了邻居之间的信息交换,使得种群向最优解收敛。
对于一个二维变量的寻优问题,以符号 “×\times×” 表示最优解位置,则在第 t 步和 t + 1步,粒子变化示意图为:
如图所示,在邻居 1 中,粒子 a 和 b 向 c 移动;邻居 2 中, 粒子 d 和 e 向 f 移动,但在下一次迭代中,粒子 e 变成了这一组的最优位置,则粒子 d 和 f 向 e 移动。
因为 g−bestg-bestg−best PSO 有着更大的粒子连通性,它的收敛比 l−bestl-bestl−best PSO更快;但是,它的多样性比 l−bestl-bestl−best PSO要差。因为 l−bestl-bestl−best PSO 的多样性更大,即其可以覆盖更大的搜索空间,因此不容易陷入局部最优,而其邻居的网络拓扑结构对 l−bestl-bestl−best PSO的性能也有影响。
关于粒子群算法参数及其他方面的讨论,可看以下两篇:
粒子群算法(PSO)——算法详解(一)
粒子群算法(PSO)——算法详解(二)
粒子群算法(PSO)——总体概述相关推荐
- 【老生谈算法】标准粒子群算法(PSO)及其Matlab程序和常见改进算法——粒子群算法
1.算法详解: 1.原文下载: 本算法原文如下,有需要的朋友可以点击进行下载 序号 原文(点击下载) 本项目原文 [老生谈算法]标准粒子群算法(PSO)及其Matlab程序和常见改进算法.docx 2 ...
- 粒子群算法(PSO)Matlab实现(两种解法)
粒子群算法(PSO) 用途:可以用于寻求最优解问题 生物机理:鸟群寻找湖泊 在函数中,有很多是无法求出最优解的 在这时,我们会采用软计算方法,而PSO算法,在软计算算法中有重要的地位: 好吧,这个仁者 ...
- C语言实现粒子群算法(PSO)一
C语言实现粒子群算法(PSO)一 最近在温习C语言,看的书是<C primer Plus>,忽然想起来以前在参加数学建模的时候,用过的一些智能算法,比如遗传算法.粒子群算法.蚁群算法等等. ...
- 粒子群优化算法和python代码_Python编程实现粒子群算法(PSO)详解
1 原理 粒子群算法是群智能一种,是基于对鸟群觅食行为的研究和模拟而来的.假设在鸟群觅食范围,只在一个地方有食物,所有鸟儿看不到食物(不知道食物的具体位置),但是能闻到食物的味道(能知道食物距离自己位 ...
- 粒子群算法(PSO)以及Matlab实现
粒子群算法(PSO)以及Matlab实现 算法背景 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy ...
- 粒子群算法(PSO)的C++实现
粒子群算法(PSO)的C++实现 粒子群算法(PSO----Particle Swarm Optimization)是常用的智能算法之一,它模拟了 鸟群觅食 行为,是一种具有随机性的 仿生算法 .PS ...
- 粒子群算法(PSO)初识
粒子群算法PSO是模拟群体智能所建立起来的一种优化算法,用于解决各种优化问题. 抽象问题实例化: 假设一群 鸟在觅食,只有一个地方有 食物,所有鸟儿都看不见食物(不知道食物的具体位置,知道了就不无需觅 ...
- Python编程实现粒子群算法(PSO)详解
1 原理 粒子群算法是群智能一种,是基于对鸟群觅食行为的研究和模拟而来的.假设在鸟群觅食范围,只在一个地方有食物,所有鸟儿看不到食物(不知道食物的具体位置),但是能闻到食物的味道(能知道食物距离自己位 ...
- 【ELM预测】基于粒子群算法PSO优化极限学习机预测含Matlab源码
1 模型 为了提高空气质量预测精度,提出一种基于粒子群算法优化极限学习机的空气质量预测模型.运用粒子群算法优化极限学习机的初始权值和偏置,在保证预测误差最小的情况下实现空气质量最优预测.选择平均绝对百 ...
- 【回归预测-ELM预测】基于粒子群算法PSO优化极限学习机预测附matlab代码
1 内容介绍 风电功率预测为电网规划提供重要的依据,研究风电功率预测方法对确保电网在安全稳定运行下接纳更多的风电具有重要的意义.针对极限学习机(ELM)回归模型预测结果受输入参数影响的问题,现将粒子群 ...
最新文章
- html文本框自动赋值,js给文本框赋值 value与innerHTML
- OC开发_Storyboard——MapKit
- 黔南民族师范学院计算机与信息学院,黔南民族师范学院
- wps嵌入字体后也不改变_冬至后的君子兰,养护方式要改变,不然过年不开花
- VC++显示文件或文件夹属性
- 平滑滤波器模板尺寸与平滑效果的关系_冲压模具丨折弯尺寸、毛刺、、卯合、滑块不顺的根源...
- python高琦_张永伟:语文辞书在异形词规范中的作用——以含有非规范汉字的异形词处理为例...
- pvacseq数据分析示例之准备数据,用VEP注释vcffile
- 计算机网络分开哪些阶段,物联网的发展可以分为哪四个阶段?
- matlab中注释多行
- 【数仓】数据仓库高频面试题题英文版(1)
- java编程题身高排队_编程初学者入门4_从键盘输入5个人的身高(米),求他们的平均身...
- 朝鲜打造尖端技术开发区 欲将开城变“硅谷”
- SVN添加忽略文件规则
- Object.assign()用法小结
- Java多文件压缩下载解决方案
- Java poi 在 Excel中生成统计图
- bugku---game1
- Zeppelin(0.10.1版本)安装及创建hive解释器
- 计算机操作不当有什么危害,驾考过程出现考官操作不当或电脑误判谁来承担责任...