粒子群优化算法(PSO)

article/2025/10/7 1:52:35

粒子群优化算法(PSO)

粒子群优化算法(PSO)是一种进化计算技术,源于对鸟群捕食行为的研究。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物及群活动行为观察的基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。

什么是粒子群算法

官方说法

粒子群算法,也称粒子群优化算法或鸟群觅食算法,缩写为PSO,是一种新的进化算法。PSO算法属于进化算法中的一种,和模拟退火算法相似,它也是从随机解出发,通过迭代寻找最优解,通过适应度来评价解的品质,但是比遗传算法规则更为简单,并没有遗传算法的”交叉“和”变异“操作,它通过追随当前搜索到的最优质来寻找全局最优。这种算法以其容易实现、精度高、收敛快等优点引起重视,并在解决实际问题中展示了其优越性。粒子群算法是一种并行算法。

粒子群算法通俗描述

PSO模拟的是鸟群的捕食行为。设想场景:一群鸟在随机搜索食物。在这个区域里只有一块食物。所有鸟都不知道食物在哪里。但是他们知道当前的位置距离食物还有多远。那么找到食物的最优策略是什么?最简单有效的就是搜寻目前离食物最近的鸟的周围区域。

鸟群在整个搜寻过程中,通过相互传递各自的信息,让其他鸟知道自己当前的位置,通过这样的协作来判断自己找到的是不是最优解,同时也将最优解的信息传递给整个鸟群,最终整个鸟群都能聚集在食物源的周围,即找到了最优解。

PSO中,每个优化问题的解都是搜索空间的一只鸟,我们称之为“粒子”。所有的粒子都有一个被优化的函数决定的适应值,每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。

PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解,在每一次迭代中,粒子通过跟踪两个“极值”来更新自己。第一个就是粒子本身所找到的最优解,这个解叫做个体极值。另一个极值是整个种群目前找到的最优解,这个极值是全局机制。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。

再通俗描述

粒子群算法的基本思想是通过群体中个体之间的协作和信息共享来寻找最优解。试想一群鸟在寻找食物,在这个区域中只有一种虫子,所有鸟都不知道虫子在哪。但是它们知道自己的当前位置距离食物有多远,同时他们知道离食物最近的鸟的位置。那么这时候会发生什么?鸟群中每只鸟都会朝距离虫子最近的鸟的方向移动。同时各只鸟在位置不停变化的时候离食物的距离也不断变化,所以每个鸟一定有过离食物最近的位置,这是他们的一个参考。

所以粒子群算法就是把鸟看成一个个粒子,并且他们拥有位置和速度两个属性,然后根据自身已经找到的离食物最近的解和参考整个共享于整个集群中找到的最近的解去改变自己的飞行方向,最后我们会发现,整个集群大致向同一个方向聚集。而这个地方是离食物最近的区域,条件好的话就会找到食物。

粒子抽象

关于速度和位置

粒子群算法统领给设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅有两个属性:速度和位置,速度代表移动的快慢,粒子代表移动的方向。

鸟被抽象为没有质量和体积的微粒(点),并延伸到N维空间,粒子i在N维空间的位置表示为矢量Xi = (x1,x2,…,xn),飞行速度表示为矢量Vi=(v1,v2,…,vn)。每个粒子都有一个由目标函数决定的适应值,并且知道自己到目前为止发现的最好位置(pbest)和现在的位置Xi。这个可以看作是粒子自己的飞行经验。除此之外,每个粒子还知道到目前为止整个群体中所有粒子发现的最好的位置(gbest),这个可以看作是粒子同伴的经验。粒子就是通过自己的经验和同伴中最好的经验来决定下一步运动。

速度和位置的更新

PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个“极值(pbest和gbest)”来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。

img

对于公式(1):

  • 公式(1)中的第一部分称为记忆项,表示上次速度大小和方向的影响;
  • 公式(1)中的第二部分称为自身认知项,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;
  • 公式(1)中的第三部分称为群体认知项,是一个从当前点指向种群最好点的矢量,反映了粒子间的协调合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。

img

标准PSO算法流程

  1. 初始化一群微粒(群体规模为N),包括随机位置和速度;
  2. 评价每个微粒的适应度;
  3. 对每个微粒,将其适应值与其经过的最好位置pbest作比较,如果较好,则将其作为当前的最好位置pbest;
  4. 对每个微粒,将其适应值与其经过的最好位置gbest作比较,如果较好,则将其作为当前的最好位置gbest;
  5. 根据公式(2)、(3)调整微粒的速度和位置;
  6. 未达到结束条件则转到第二步。

迭代终止条件根据具体问题一般选为最大迭代次数Gk或微粒群迄今为止搜索到的最优位置满足预定最小适应阈值。

PSO流程图解

img

学习因子c1、c2分析

公式(2)、(3)中pbest和gbest分别表示微粒群的局部和全局最优位置。

  • 当C1 = 0 时,则粒子没有了认知能力,变为只有社会的模型(social-only):

    img

    称为全局PSO算法。粒子有扩展搜索空间的能力,具有较快的收敛速度,但由于缺少局部搜索,对复杂问题比标准PSO更易陷入局部最优。

    c1 = 0 表示与单粒子本身的pbest无关了

  • 当C2 = 0 时,则粒子之间没有社会信息,模型变为只有认知(cognition-only)模型。

    此时称为局部PSO算法。由于个体之间没有信息交流,整个群体相当于多个粒子进行盲目的随机搜索,收敛速度满,因而得到最优解的可能性小。

操作思路

在D维空间中,有N个粒子;

粒子i的速度:xi = (xi1,xi2,…,xiD),将xi带入**适应函数f(xi)**求适应值;

粒子i的速度:vi = (vi1,vi2,…,viD)

粒子i个体经历的最好位置:pbest = (pi1,pi2,…,piD)

种群所经历的最好位置:gbest = (g1,g2,…,gD)

通常,在第d(1<=d<=D)维的位置变化范围限定在(Xmin d,Xmax d)内,速度变化范围限定在(-Vmax d,Vmax d)内(即在迭代中若超出了边界值,则该维的速度或位置被限制维该维最大速度或边界位置)

粒子i的第d维速度更新公式:

img

粒子i的第d维位置更新公式:

img

粒子其运动的过程受到三方面影响:粒子先前的速度、粒子认知部分、粒子社会部分

img

算法流程

  1. Initial:初始化例子群体(群体规模为N),包括随机位置和速度。
  2. Evaluation:根据fitness function,评价每个粒子的适应度。
  3. Find the Pbest:对每个粒子,将其当前适应值与其个体历史最佳位置(pbest)对应的适应值做比较,如果当前的适应值更高,则将用当前位置更新历史最佳位置pbest。
  4. Find the Gbest:对每个粒子,将其当前适应值与全局最佳位置(gbest)对应的适应值进行比较,如果当前的适应值更高,则将用当前的粒子位置更新全局最佳位置gbest。
  5. Update the Velocity:根据公式更新每个粒子的速度与位置。
  6. 如为满足条件,返回步骤二。

通常算法达到最大迭代次数或者最佳适应度值的增量小于某个给定的阈值时算法停止。

算法应用

种群大小m

m很小容易陷入局部最优;m很大,PSO的优化能力很好,当种群数目增长到一定水平时,再增长将不再有显著的作用。

权重因子

对于粒子的速度更新的三部分:

  1. 惯性因子w=1表示基本的粒子群算法,w=0表示失去对粒子本身的速度的记忆;
  2. 自我认知部分的学习因子C1 = 0 表示无私型的粒子群算法,只有社会,没有自我,这样会使群体丧失多样性,从而导致容易陷入局部最优而无法跳出;
  3. 社会经验部分的学习因子C2=0表示自我型的粒子群算法,只有自我没有社会,这样导致没有信息的社会共享,算法收敛速度较慢。

这三个参数的选择非常重要,如何调整这三个参数使得算法避免早熟又可以较快收敛,对于解决实际问题的意义较大。

最大速度

速度限制作用为:维护算法的探索能力与开发能力的平衡。

Vm较大时,探索能力强,但是粒子容易飞过最优解;

Vm较小时,开发能力强,但是粒子容易陷入局部最优解;

Vm一般设定为每维变量变化范围的10%–20%。

停止准则

最大迭代次数;

可以接受的满意解(通过fitness function判断是否满意)

粒子空间的初始化

较好地选择粒子的初始化空间,将大大缩短收敛时间。初始化空间根据具体问题的不同而不同,根据具体问题进行设定。该算法为数不多的关键参数的设置却对算法的精度和效率有着显著影响。

线性递减权值(未测)

img

Wmax最大惯性权重,Wmin为最小惯性权重,run为当前迭代次数,runmax为算法迭代总次数。

较大的w有较好的全局收敛能力,较小的w则有较强的局部收敛能力。因此随着迭代次数的增加,惯性权重w应不断减少,从而使得粒子群算法在初期具有较强的全局收敛能力,而晚期具有较强的局部收敛能力。

收缩因子法(未测)

1999年,引入收缩因子以保证算法的收敛性,因此更改速度公式:

img

K为收缩因子,φ1 φ2 限制的w。φ1 φ2是需要预先设定的模型参数。

img

收缩因子法控制系统行为最终收敛,且可以有效搜索不同区域,该法能得到较高质量的解。

算法的邻域拓扑结构(未测)

粒子群算法的邻域拓扑结构包括两种:一种是将群体内所有个体都作为粒子的邻域,另一种是只将群体中的部分个体作为粒子的邻域。邻域拓扑结构决定群体历史最优位置,因此该算法分为全局粒子群算法和局部粒子群算法。

全局粒子群算法:

  1. 粒子自己历史最优值;
  2. 粒子群体的全局最优值。

局部粒子群算法:

  1. 粒子自己历史最优值;
  2. 粒子邻域内粒子的最优值。

邻域随迭代次数的增加先行增大,最后邻域扩展至整个粒子群。

实践证明:全局版本的粒子群算法收敛速度快,但是容易陷入局部最优。局部最优的粒子群算法收敛速度慢,但是很难陷入局部最优。现在粒子群算法大都在收敛速度与摆脱局部最优这两个方面下功夫。


http://chatgpt.dhexx.cn/article/gwKDs8Hr.shtml

相关文章

数学建模——粒子群优化算法(PSO)【有详细样例 + 工具:matlab】(万字总结)

文章目录 一、粒子群优化算法(PSO)是什么&#xff1f;二、粒子群优化算法有什么用&#xff1f;三、粒子群优化算法的适用范围&#xff1f;四、算法简介(有助于理解)五、算法流程第一步&#xff1a;初始化第二步&#xff1a;计算粒子的适应度第三步&#xff1a;更新个体极值与全…

粒子群优化算法(PSO)附代码

文章目录 1 算法介绍2 算法模型3 实现步骤4 MATLAB代码实现PSO算法4.1. main.m4.2. 运行结果 1 算法介绍 粒子群优化算法(Particle Swarm Optimization&#xff0c;PSO)是一种经典的群智能算法&#xff0c;该算法灵感源自于鸟类飞行和觅食的社会活动&#xff0c;鸟群通过个体之…

浏览器添加划词翻译插件

网站&#xff1a;https://github.com/Selection-Translator/crx-selection-translate 安装下载的扩展程序

Chrome划词翻译-Saladict

Saladict 沙拉查词是一款专业划词翻译扩展&#xff0c;为交叉阅读而生。大量权威词典涵盖中英日韩法德西语&#xff0c;支持复杂的 划词操作、网页翻译、生词本、PDF&#xff0c;以及 Vimium 全键盘操作 。 迄今为止最好用的网页划词翻译插件。 下载安装地址&#xff1a;Chrome…

谷歌划词翻译

谷歌划词翻译是个谷歌插件 复制及时翻译很好用 插件下载地址 配置谷歌翻译方法

惊了,MATLAB竟能制作如此方便的划词翻译工具???

我点开程序一看&#xff0c;程序第一行就写着import&#xff0c; 却歪歪斜斜的每行上都是着MATLAB几个大字。 我横竖睡不着&#xff0c;仔细看了半夜&#xff0c; 才从字缝里看出字来&#xff0c;满页都写着 ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀——Java 其实用的…

python实现划词翻译

最近因为编程&#xff0c;需要大量地看一些说明文档&#xff0c;无奈说明文档都是英文的&#xff0c;可把我这个半桶水折腾死了&#xff0c;太多词汇不知道&#xff0c;一个个复制翻译太麻烦了。于是我根据自己的需要&#xff0c;用python写了一个划词翻译。 一&#xff1a;使…

划词翻译简单实现

环境&#xff1a;archlinux &#xff0c;其余linux系统类似 安装依赖 sudo pacman -S xsel sudo pacman -S translate-shell sudo pacman -S libnotify脚本书写 创建脚本 touch word_translate.sh chmod x word_translate.sh vim word_tranlate.sh#!/bin/bashwhile true; d…

Chrome划词插件-有道词典

当我们在阅读文章&#xff0c;查找资料或者查看英文文献时&#xff0c;经常会遇到不认识的英文单词&#xff0c;这时&#xff0c;我们往往会复制单词百度一下才行。 其实&#xff0c;遇到这种情况&#xff0c;我们可以直接下载一个有道词典的Chrome划词插件&#xff0c;遇到需…

PDF划词翻译插件

PDF划词翻译插件 1、打开一个拓展插件的下载网站2、下载沙拉查词并安装3、进入详情&#xff0c;设置为允许打开文件网址4、固定她5、打开她的设置最终划词结果 1、打开一个拓展插件的下载网站 点击此网站地址 2、下载沙拉查词并安装 打开开发者模式&#xff0c;把下载好的.cr…

福昕pdf阅读器的划词翻译功能如何添加(图文并茂)

一、打开福昕阅读器 二、可在上方工具栏&#xff0c;点击“帮助”&#xff0c;关于福昕阅读器领鲜版查看安装的版本信息&#xff0c;如图1-1&#xff0c;图1-2 图1-1 图1-2 三、找到上方工具栏的图标按键&#xff0c;名为“自定义快速访问工具栏”&#xff0c;如图1-3&#…

谷歌浏览器无法翻译成中文,谷歌翻译,最新(沉浸式翻译和划词翻译,chrome无法翻译,谷歌浏览器无法翻译此网页)

简介&#xff1a;谷歌浏览器自带的翻译功能&#xff0c;对我们来说用处很大&#xff0c;但有的时候突然就会变成“无法翻译此网页”&#xff0c;之前给大家提供过两种无法翻译此网页的解决方案&#xff0c;这次再给大家分享下两款别的翻译方法&#xff1b; 一、上次介绍&#x…

关于网页划词翻译

2013-4-21 近日偶然看到js页面文字选中后分享到新浪微博实现&#xff0c;发现原来竟然只要一句话就可以实现获取划词。便萌生自己写个划词翻译的东东&#xff0c;方便自己看文档。 我首先想到了之前看到的油猴插件&#xff0c;最早是在看优酷去广告插件的原理时知道这个东西。感…

基于Edge浏览器的沙拉划词插件使用教程(好用的翻译插件)

1.使用目的 - 使用沙拉划词实现网页多种翻译源进行实时翻译。 - 使用沙拉划词实现PDF翻译。 2.安装方法 2.1 打开edge扩展 点击工具栏右侧… 然后点击扩展 进入扩展 2.2 下载沙拉划词 2.2.1 点击获取扩展 2.2.2点击搜索 搜索沙拉划词 回车搜索 正常获取并添加扩展 出现沙…

PDF划词翻译软件

PDF划词翻译 一个简单的PDF划词翻译软件。 Github仓库地址&#xff1a;https://github.com/WCX1024979076/simple_pdf_translator Github下载地址&#xff1a; https://github.com/WCX1024979076/simple_pdf_translator/releases/tag/v0.1.0 Gitee仓库地址&#xff1a; htt…

推荐一个谷歌浏览器插件:划词翻译

地址&#xff1a;划词翻译插件 最近在看一些英文文档&#xff0c;遇到了一些词汇不认识&#xff0c;在谷歌浏览器上找到了这个翻译插件 谷歌浏览器自己有一个全文翻译的功能&#xff0c;对于一些技术类文档&#xff0c;有些词如果翻译错误了就会闹出笑话来&#xff0c;限于对…

一个简单的划词翻译工具

一个简单的划词翻译工具 看论文时经常要翻译&#xff0c;然而手动复制粘贴到翻译网站上又很麻烦&#xff0c;有些划词翻译工具比如有道的划词和取词&#xff0c;虽然不用按快捷键只选中文本就能翻译&#xff0c;但有时也会失灵什么的&#xff0c;于是就自己用python写了个调用百…

安装侧边翻译,划词翻译,看外文论文神器,比知云还好用Edge Translate

前言 写论文相信大家参考的大多数都是外文文献&#xff0c;但是想我这样英文水平不佳的小伙伴还是比较多的&#xff0c;所以看外文文献就很费劲。 有的小伙伴用谷歌或者百度翻译 一边复制翻译一边看&#xff0c; 后来用知云翻译方便的很多&#xff0c;但是每次…

论文阅读利器——划词翻译插件(桌面与浏览器)

对于喜爱学习&#xff0c;阅读文献的各位来说&#xff0c;满屏的英文字母常常会磨灭我们的热情&#xff0c;而一般的翻译软件又有些贵&#xff0c;或者是根本没有很好的效果。 那么&#xff0c;今天&#xff0c;在这里介绍几款开源的插件与软件。都是可以免费使用的。 一、Edg…

5个超好用的屏幕划词翻译软件,选中文字就能翻译

分享5个划词翻译工具&#xff0c;支持翻译多种语言&#xff0c;并且有多种翻译源和词典可以选择&#xff01; 一、划词翻译插件 1、Talent划词翻译 一个好用的划词翻译插件&#xff0c;支持Chrome、Edge、360等主流浏览器&#xff0c;安装之后选中词汇或者短句就会自动进行翻译…