智能优化算法——粒子群优化算法(PSO)(小白也能看懂)

article/2025/10/7 1:58:17

前言:

本文主要参考B站的一篇学习视频后,加之自己的理解和浓缩精华,不想看文字的可以直接划到末尾去b站看原视频,非常通俗易懂。

理论知识:

感性认知:如下面一张图片所示。在一个范围内,以三点(三)为例,假如此时A点为目前的最优点,那么B点和C点都可能会向A点靠,但不是直接到A点而是下一步(下一个迭代循环)会向A点靠。
在这里插入图片描述
简化版过程:
C—直接—>A:(1,1) = (2,3)+(-1,-2)
———————>A点=原始位置+位移的方向和大小
C—靠近—>A:(1,1) = (2,3)+rand*(-1,-2)
———————>A点=原始位置+位移的方向和大小(rand为0-1之间的随机数)
在实际中,C点的位移方向大小由三个参数所确定
1、惯性(上一次迭代时候的位移大小和方向)
2、自身希望的位移大小和方向
3、全局最优的位移大小和方向
由这三个参数共同确定其最后的位移方向和大小,每次迭代都会更新位移的方向和大小,进而确定下一次该粒子往什么方向位移,位移多少。当然这些量都有对应的公式计算,将这些粒子的数量扩大,并且用一个数学模型表示出来就得到了粒子群算法的基本原理。

数学模型:

  1. 在一个D维空间中,有N个粒子,每个粒子可以表示一个D维的向量,如下:
    Xi = (xi1, xi2, xi3…xiD),其中i=1,2,3…N
  2. 第i个粒子的“飞行”速度,也是一个D维的向量,如下:
    Vi = (vi1, vi2, vi3…viD), 其中i=1,2,3…N
  3. 在第t代中的某个粒子,向比t+1代更新时的更新公式如下:
    先计算位移大小:Vij(t+1) = wvij(t) + c1r1(t)[Pij(t) - xij(t)] + c2r2(t)[Pgi(t) - xij(t)]
    再更新位置:xij(t+1) = xij(t) + Vij(t+1)
    下面我逐一解释一下上述方程的各个变量的意思:
    w:惯性权重
    vij(t):上一次迭代的速度。其与w相乘=w
    vij(t)就得到了整个惯性变量。
    c1:参数1,可以理解为学习率,就是控制每次迭代粒子步幅的权重。
    r1(t):0-1之间的随机数,与c1一起起作用。
    Pij(t):个体认为的最优点。
    至此c1r1(t)[Pij(t) - xij(t)]:向每个个体粒子飞行的具体方向和大小。
    c2:社会学习率,就是控制整个种群(所有变量粒子)的学习率。
    r2:同理r1与c2一起起作用。
    Pgi(t):全局认为的最优点。
    至此c2r2(t)[Pgi(t) - xij(t)]:向全局最优点应该飞行的具体方向和大小

    注意:不是更新位置就一定是更新位置,若更新后的点xij(t+1)的适应度不如原位置xij(t),则不更新位置,保留在原位置。(适应度后面解释)

算法流程:

首先:设置各个参数:w:0.5-0.8;c1、c2:0.1-2;以及vmax和xmax:粒子的飞行边界,取决于优化函数。
接下来介绍算法具体步骤:

  1. 初始化粒子群:设定粒子个数N,并将所有的粒子初始到某个值(位置)上
  2. 计算所有粒子的适应度。
  3. 计算待更新的粒子的新速度,以及待更新粒子的新位置(大小和方向)
  4. 计算新位置的适应度,若新位置适应度更高,则将粒子位置更新,否则不更新
  5. 判断迭代次数等条件是否满足终止循环条件,若满足,则退出且输出最优结果,否则返回第二步继续迭代计算。
    PS:适应度的解释:就是满足我们需要优化的函数的结果的程度。例如,我们需要优化一个函数,并找到其的最小值,那么这个适应度就是值该粒子的函数值是不是全局最小的,或者比上一次的粒子的函数值更小,这个粒子的函数值就是否更小就作为本次迭代的粒子的适应度。
    PS:在第三步中,计算出下一步粒子的速度和位置后,需要先进行一个边界检测,看速度和位置是否大于边界值,若速度或位置大于边界值,则直接用边界值替换该计算结果即可。
    提醒:在初始化比如50个粒子时,在100次迭代中,找到了全局最优解(例如最小值),但不是意味着所有50个粒子全都收敛到了最小值的位置,我们只需要在100次迭代后有至少一个粒子收敛到了全局最优的位置,我们就能够得到这个最优解。别的粒子可能因为学习率等原因没能向最优解靠近,也没问题。但是这种模型的参数肯定是不如那种能够全体收敛至最优解的模型的参数来得好的。

优缺点分析:

优点:原理简单,容易实现,参数较少。
缺点:容易早熟收敛,导致局部最优,且迭代后期的收敛速度很慢
解释:w参数前期要大一些,保证粒子的个体独立性强一些,能够多搜索一些位置,后期要小一些,多向其他粒子学习,尽可能收敛到全局最优。
参数设置的一些其他规律:前期:c1大一些c2小一些,保证粒子独立性。后期:c1小一些c2大一些,尽快收敛至全局最优。

改进方法:

  1. 针对以上参数的设定原理,实现参数的自适应变化这是对模型提升的一个好办法,例如可以将w设置成一个随着迭代次数增大而递减的函数。
  2. 引入一些其他因素,比如速度,边界值随着迭代次数而增大或减小等等方法。
  3. 结合一些其他的只能优化算法,例如遗传算法(GA),免疫算法,模拟退火算法等等,来帮助粒子跳出局部最优,改善收敛速度。

参考:

参考b站相关视频——通俗易懂讲算法-最优化之粒子群优化(PSO)
链接:通俗易懂讲算法-最优化之粒子群优化(PSO)
谢谢b站这位up主的讲解,非常通透。

后续

后续会有时间分析一些别的优化算法的自己的相关学习理解——遗传算法(GA)、梯度下降算法、主成分分析(PCA)等。


http://chatgpt.dhexx.cn/article/21mZs1jL.shtml

相关文章

智能算法系列之粒子群优化算法

本博客封面由ChatGPT DALLE 2共同创作而成。 文章目录 前言1. 算法思想2. 细节梳理2.1 超参数的选择2.2 一些trick 3. 算法实现3.1 问题场景3.2 python实现 代码仓库:IALib[GitHub] 前言 本篇是智能算法(Python复现)专栏的第三篇文章,主要介绍粒子群优化…

粒子群优化算法(PSO)

粒子群优化算法(PSO) 粒子群优化算法(PSO)是一种进化计算技术,源于对鸟群捕食行为的研究。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物及群活动行…

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

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

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

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

浏览器添加划词翻译插件

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

Chrome划词翻译-Saladict

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

谷歌划词翻译

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

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

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

python实现划词翻译

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

划词翻译简单实现

环境:archlinux ,其余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划词插件-有道词典

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

PDF划词翻译插件

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

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

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

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

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

关于网页划词翻译

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

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

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

PDF划词翻译软件

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

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

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

一个简单的划词翻译工具

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

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

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