粒子群算法(PSO)详解

article/2025/10/1 12:28:41

1 粒子群PSO算法简介

1.1 维基百科的解释

粒子群算法(Particle Swarm Optimization,简称PSO),或称粒子群优化,是属于人工智能算法,公元1995年由肯尼迪(Kennedy)与埃伯哈特(Eberhart)(1995)两位学者所提出,这两位学者借由观察鸟类族群觅食的讯息传递所得到的一个启发,粒子群算法的理论基础是以单一粒子来做为鸟类族群之中的单一个体,于算法中赋予该粒子(个体)拥有记忆性,并能够透过与粒子群体中的其他粒子之间的互动而寻求到最适解。因此在粒子群算法的基础理论可以理解,任一个体(粒子)皆可用有自身移动过程中所产生的记忆与经验,当个体移动的同时,能依造自身的经验与记忆来学习调整自身的移动方向,由于在粒子群算法中,多个粒子是同时移动的,且同时以自身经验与其他粒子所提供的经验进行比对找寻最适当的解,并使自己处于最适解中,该粒子群算法的特性使得粒子不单单受自身演化的影响,同时会对群体间的演化拥有学习性、记忆性,并使粒子本身达到最佳调整。

1.2 三个简单的行为准则

冲突避免:群体在一定空间移动,个体有自己的移动意志,但不能影响其他个体移动,避免碰撞和争执。
速度匹配:个体必须配合中心移动速度,不管在方向、距离与速率都必须互相配合。
群体中心:个体将会向群体中心移动,配合群体中心向目标前进。

1.3 基本理论公式

PSO是基于群鸟觅食而提出来的,是个最佳决策的过程,与人类决策的过程相似,往往基于两条重要的信息:他们的经验和自己的经验。
由此,在一个群鸟觅食中,在一个D维空间,有m个鸟组成群体,而第i个鸟的位置我们表示为
在这里插入图片描述
我们将这个位置代入目标函数便可以求出其的适应值,根据适应值的大小来确定该位置的好坏。假设我们记适应值越小该位置越好,则我们将每个鸟经历过的最好位置记为
在这里插入图片描述
整个鸟群取的适应值最小的最好位置为
在这里插入图片描述
第i个鸟的速度记为
在这里插入图片描述
则粒子群算法便采用下面的公式使得粒子(鸟)的位置不断更新。
在这里插入图片描述
其中,i = 1,2,…,m,表示第 i 个粒子(鸟);d = 1,2,…,D,表示第 d 维;w为非负数,称为惯性因子;r1和r2是[0,1]范围内变换的随机数;α称为约束因子,目的是控制速度的权重。

1.4 参数的选取

1.粒子数 m
一般取值为20~40,特殊难题需要100-200个粒子。粒子数量越多,搜索范围越大,越容易找到全局最优解,算法运行的时间也越长。

2.惯性常数 w
惯性因子w对于粒子群算法的收敛性有较大的影响。w可以取[0,1]区间的随机数,如果w是定值,建议取0.6~0.75区间的值。

3.加速常数c1和c2
加速常数c1和c2是调整自身经验和社会经验在其运动中所起作用的权重。一般情况下取c1 = c2 = 2;

4.最大飞翔速度
粒子最大飞翔速度一般不会超过最大速度的10%-20%。

2 算法流程

2.1 具体步骤

1.初始化粒子群(速度和位置)、惯性因子、加速常数、最大迭达次数和算法终止的最小误差。

2.评价每个粒子的初始适应值。

3.将初始适应值作为每个粒子的最优值,并将各适应值对应的位置作为每个粒子最优的位置。

4.将粒子中最好的适应值作为全局最好的最优值,并将各适应值对应的位置作为粒子全局最优的位置。

5.通过之前的公式更新粒子速度

6.对飞行速度进行限幅处理,使之不能超过最大飞翔速度

7.通过之前的公式更新粒子位置

8.比较每个粒子的适应值是否比历史的最优值好,如果是,则替换。

9.计算粒子全局最优的适应值是否比历史的最优值好,如果是,则替换。

10.重复5-9,直到满足设定的最小误差或者达到最大迭达次数。

11.输出最优粒子的全局最优值和其对应的位置以及每个粒子的局部最优值和对应的位置。

2.2 伪代码

For each particle
____Initialize particle
END
Do
____For each particle
________Calculate fitness value
________If the fitness value is better than the best fitness value (pBest) in history
____________set current value as the new pBest
____End
____Choose the particle with the best fitness value of all the particles as the gBest
____For each particle
________Calculate particle velocity according equation (a)
________Update particle position according equation (b)
____End
While maximum iterations or minimum error criteria is not attained

3 具体实现

建议采用MATLAB和Python,又相关的函数或库。

3.1 MATLAB

句法规则
x = particleswarm(fun,nvars)
x = particleswarm(fun,nvars,lb,ub)
x = particleswarm(fun,nvars,lb,ub,options)
x = particleswarm(problem)
[x,fval,exitflag,output] = particleswarm(___)

描述
x = particleswarm(fun,nvars)试图找到一个x达到局部最小值的向量fun。nvars是的尺寸(设计变量的数量)fun。
注意
传递额外参数(优化工具箱)介绍了如有必要,如何将额外参数传递给目标函数。

x = particleswarm(fun,nvars,lb,ub)定义了一组在设计变量下界和上界的,x,使得溶液中的范围内发现lb ≤ x ≤ ub。

x = particleswarm(fun,nvars,lb,ub,options)最小化,默认优化参数替换为中的值options。设置lb = [],ub = []如果没有界限。

x = particleswarm(problem)查找的最小值problem,其中problem为结构。

[x,fval,exitflag,output] = particleswarm(___),对于上述任何输入参数,返回:
标量fval,是目标函数值fun(x)
一个exitflag描述退出条件的值
output包含有关优化过程信息的结构

3.2 Python

我们使用常用的 scikit-opt库,可在GitHub上进行下载。
具体例子如下
1.准备待优化的目标函数

def demo_func(x):x1, x2, x3 = xreturn x1 ** 2 + (x2 - 0.05) ** 2 + x3 ** 2

2.实施PSO算法,并打印结果

from sko.PSO import PSO
pso = PSO(func=demo_func, dim=3)
fitness = pso.fit()
print('best_x is ', pso.gbest_x, 'best_y is', pso.gbest_y)

4 扩展

一般我们可以使用粒子群算法和神经网络一起用,或者使用k-means聚类和粒子群算法一起用等等。具体相关研究以及参考可查看相关论文。


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

相关文章

优化算法——粒子群算法(PSO)

一、粒子群算法的概述 粒子群算法(PSO)属于群智能算法的一种,是通过模拟鸟群捕食行为设计的。假设区域里就只有一块食物(即通常优化问题中所讲的最优解),鸟群的任务是找到这个食物源。鸟群在整个搜寻的过程中,通过相互…

粒子群算法(PSO) 介绍

算法理解 粒子群算法,又叫鸟群算法,可见是受鸟群捕食行为的启发。它属于遗传算法、群智算法。粒子群算法关注于粒子的两个属性:位置和速度。每个粒子在空间中单独搜寻,它们记得自己找到的过最优解,也知道整个粒子群当…

【优秀作业】粒子群算法

粒子群优化算法 一、概述 粒子群优化算法(Particle Swarm Optimization,PSO)的思想来源于对鸟捕食行为的模仿,最初,Reynolds.Heppner 等科学家研究的是鸟类飞行的美学和那些能使鸟群同时突然改变方向,分散…

Dex加固与反编译

编译与反编译 编译 将java代码转换为Dalvik字节码 将res资源文件、AndroidManifest.xml等配置文件编译为二进制文件 反编译 将DEX文件转换为jar包或者Smali文件 将二进制资源文件还原为资源源码文件 编译与反编译是相对的过程,转换过程分别由编译器和反编译器实…

编译与反编译

编译:高级语言转换成计算机认识的低级语言 编译的主要的目的是将便于人编写、阅读、维护的高级语言所写作的源代码程序,翻译为计算机能解读、运行的低级语言的程序,也就是可执行文件。 反编译:Java的反编译,一般是将…

反编译网站

最近帮一个公司反编译了一个他们在用的网站,是一个印照片,然后群(384389229)里面的伙伴们(专指:魂牵悲梦),叫我写个反编译的教程出来,由于前面时间很忙,一拖再拖到了现在终于有空就写…

编译/反编译

1.Android APK 1.软件 1.apktool 1.作用:反编译apk或重新打包apk 2.dex2jar 1.作用:将Android的可执行文件.dex转换为.jar 3.jd-gui 1.作用:方便阅读jar文件的代码工具 2.步骤 1.通过apktool将apk软件反编译2.使用dex2jar将classes.dex文件转…

反编译(Decompilers)

工具下载 调试工具反汇编工具反编译工具PE相关工具编译工具编辑工具.NET工具脱壳工具加壳工具补丁工具监视软件代码计算 密码学工具其它 反编译(Decompilers) VFP程序 UnFoxAll 3.0专业增强版  优点:界面和功能较实用缺点:支持到…

反编译器

转自:https://blog.csdn.net/kongwei521/article/details/54927689 在项目开发过程中,估计也有人和我遇到过同样的经历:运行环境出现了重大Bug亟需解决、或者由于电脑挂了、旧代码覆盖新代码,而在这种情况下,我们不能…

如何构建反汇编代码?

大型的非结构化反汇编指令堆几乎不可能被分析,所以大多数反汇编工具都会以某种简单的分析方法来构造反汇编代码。在本节中,我们将会讨论通过反汇编工具恢复的通用代码和数据结构,以及这些通用代码和数据结构会如何帮助我们进行二进制分析。 …

反编译

反编译 我们都知道,Android程序打完包之后得到的是一个APK文件,这个文件是可以直接安装到任何Android手机上的,我们反编译其实也就是对这个APK文件进行反编译。Android的反编译主要又分为两个部分,一个是对代码的反编译&#xff…

解决openai.error.APIConnectionError: Error communicating with OpenAI

一、问题描述 可以fanqiang,但是使用openai的接口还是报错如下的openai.error.APIConnectionError: Error communicating with OpenAI问题: File "D:\Anaconda3\envs\gms\lib\site-packages\openai\api_resources\abstract\engine_api_resource.py…

【Nginx应用】1.理解正、反向代理和负载均衡

在讲解Nginx之前,我们首先要理解什么是正向代理和反向代理。因为Nginx作为负载均衡的作用时,扮演的就是一个代理的角色,理解了正反向代理,对我们接下来学习Nginx会很有帮助1.正向代理 在我们的日常生活中其实就已经使用到了正向代…

软件安全实验——局域网DDoS攻击

文章目录 实验任务实验过程DoS攻击与DDoS攻击ping命令参数实施DDoS攻击 实验任务 对局域网内IP地址为10.12.186.186的主机(已关闭防火墙)发起基于网络流量的DDoS攻击。 实验过程 DoS攻击与DDoS攻击 DoS是Denial of Service的简称,即拒绝服务…

kali局域网攻击(一)

前言 很久以前的博客才发现,发布一下。 这个系列以后有时间再做。 arp攻击 arp路由链表,感兴趣的自行百度,我的博客我的笔记. 路由指向 介绍两个东西. echo 0 >/proc/sys/net/ipv4/ip_forward #让经过的数据不留通 echo 1 >/proc/sys/net/ipv4/ip_forward…

嗅探欺骗之Ettercap局域网攻击

嗅探欺骗 ——Ettercap局域网攻击 最近在练习使用ettercap工具,下面来介绍一下用ettercap实施嗅探以及欺骗的实验过程。 嗅探: 首先,我们把虚拟机作为攻击者,物理机作为受害者。①在虚拟机中打开一个终端,输入命令ett…

当代局域网攻击软件到底带来了什么

20世纪00年代晚期21世纪初,计算机网络技术及其安全技术得到了迅速发展,出现了一系列新的局域网攻击工具,如Metasploit,它是一款强大的局域网渗透测试开发框架;NetWox,它可以扫描网络中的漏洞;Wi…

局域网arp攻击_ARP局域网攻防浅析

ARP官方释意:地址解析协议,即ARP(Address Resolution Protocol),是根据获取的一个。发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址(MAC);收到返回…

局域网断网攻击 (arp攻击)

ARP攻击能够实现的技术前提有两个,一是作为攻击者的计算机需要和被攻击者的计算机在一个局域网中,二是作为攻击者的计算机需要知道被攻击者计算机的局域网IP。 环境:安装在VMware Workstation中的Kali Linux,我们需要在VMware的设…

局域网arp攻击_如何排查ARP网络攻击

ARP攻击危害:众所周知,ARP攻击变得日益猖狂,局域网内频繁性区域或整体掉线、IP地址冲突;网速时快时慢。极其不稳定,严重影响了网络的正常通讯。 那么如何排查ARP网络攻击呢? 首先诊断是否为ARP病毒攻击 1、当发现上网明显变慢,或者突然掉线时,我们可以用arp -a命令来检…