1 论文简介

粒子群优化算法(Particle Swarm Optimization, PSO)是由 James Kennedy 和 Russell Eberhart 于 1995 年在 IEEE International Conference on Neural Networks 上发表的开创性论文《Particle Swarm Optimization》中提出的。该论文针对连续优化问题,特别是高维、非线性、多峰函数的全局优化挑战,提出了一种基于群体智能的启发式算法。核心方法模拟鸟群或鱼群的社会行为,将每个潜在解视为一个“粒子”,通过粒子间的协作和个体经验共享来搜索最优解。具体地,每个粒子跟踪自身历史最优位置和群体全局最优位置,结合惯性权重和随机因子迭代更新位置和速度。这种方法避免了传统优化算法(如梯度下降)的局部收敛问题,具有计算高效、参数少、易于并行实现的优势。应用领域广泛,包括工程优化(如结构设计、参数调优)、机器学习(如神经网络训练、特征选择)、经济模型预测和控制理论等。自提出以来,PSO 已成为群体智能领域的基石算法,影响力深远:它启发了多种变体(如惯性权重 PSO、多目标 PSO),并在 IEEE Transactions on Evolutionary Computation 等顶级期刊上被广泛引用,推动了优化理论在人工智能和工业应用中的发展。

2 算法原理

粒子群算法的主要步骤如下:

步骤一:初始化粒子群

随机生成 NNN 个粒子的初始位置 Xi(0)X_i(0)Xi(0) 和速度 Vi(0)V_i(0)Vi(0),其中 i=1,2,…,Ni = 1, 2, \ldots, Ni=1,2,,N。每个粒子代表一个潜在解,位置向量维度与问题变量匹配。

步骤二:计算适应度

对每个粒子,评估其适应度函数 f(Xi(t))f(X_i(t))f(Xi(t)),该函数反映解的优劣(例如,最小化目标函数值)。

步骤三:更新个体最优位置和全局最优位置

如果当前适应度优于历史最优,更新粒子的个体最优位置 pbestipbest_ipbestipbesti(t+1)={Xi(t)如果 f(Xi(t))<f(pbesti(t))pbesti(t)否则 pbest_i(t+1) = \begin{cases} X_i(t) & \text{如果 } f(X_i(t)) < f(pbest_i(t)) \\ pbest_i(t) & \text{否则} \end{cases} pbesti(t+1)={Xi(t)pbesti(t)如果 f(Xi(t))<f(pbesti(t))否则
从所有 pbestipbest_ipbesti 中选择最优位置作为全局最优位置 gbest(t)gbest(t)gbest(t)

步骤四:更新速度和位置

对每个粒子,根据以下公式迭代更新速度 Vi(t)V_i(t)Vi(t) 和位置 Xi(t)X_i(t)Xi(t)
Vi(t+1)=w⋅Vi(t)+c1⋅r1⋅(pbesti(t)−Xi(t))+c2⋅r2⋅(gbest(t)−Xi(t)) V_i(t+1) = w \cdot V_i(t) + c_1 \cdot r_1 \cdot (pbest_i(t) - X_i(t)) + c_2 \cdot r_2 \cdot (gbest(t) - X_i(t)) Vi(t+1)=wVi(t)+c1r1(pbesti(t)Xi(t))+c2r2(gbest(t)Xi(t))
Xi(t+1)=Xi(t)+Vi(t+1) X_i(t+1) = X_i(t) + V_i(t+1) Xi(t+1)=Xi(t)+Vi(t+1)
其中,www 是惯性权重,c1c_1c1c2c_2c2 是加速常数(通常设为 2),r1r_1r1r2r_2r2 是均匀分布在 [0,1][0,1][0,1] 的随机数。

步骤五:迭代终止

重复步骤二至四直到满足终止条件(如最大迭代次数或收敛阈值)。

3 CEC2017

CEC2017(IEEE Congress on Evolutionary Computation 2017 基准测试函数集)是由 IEEE 计算智能协会组织的顶级会议 CEC 在 2017 年发布的一套标准测试函数集,主要用于评估和比较各类元启发式优化算法(如遗传算法、粒子群算法、差分进化、灰狼优化器、麻雀搜索算法等)的性能。核心目标是为全球优化算法研究者提供一个统一、公平、具有挑战性的测试平台,以客观地比较不同算法在解决复杂优化问题时的收敛精度、速度、鲁棒性和可扩展性。CEC2017 共包含 30 个测试函数(编号为 F1-F30),分为 4 大类(F2 已经被剔除):
在这里插入图片描述
注意:

  • 单峰函数(F1、F3):只有一个全局最优值,无局部最优值,测试算法收敛速度和开发能力,好的算法应能快速、准确地找到最优点。
  • 简单多峰函数(F4-F10):有多个局部最优值,但数量相对可控,测试算法跳出局部最优的探索能力。
  • 混合函数:(F11-F20):由多个不同的基本函数(如椭圆函数、Rastrigin 函数等)通过某种方式拼接、组合而成,不同子区域具有不同特性,测试算法处理复杂、非均匀搜索空间的能力,是 CEC2017 的亮点和难点之一。
  • 复合函数:(F21-F30):比混合函数更复杂,整个搜索空间由一个“外套函数”进行全局整形,内部再嵌入多个不同的基础函数,并加上偏置、旋转和位移,使得问题高度非线性、不可分。
  • 维度: 默认推荐维度为 2D,10D, 30D, 50D, 100D。允许研究者测试算法在不同维度下的可扩展性。
  • 搜索范围: 通常为 [−100,100]D[-100, 100]^D[100,100]D
  • 由于 CEC2017 函数的复杂性,如何绘制并呈现函数曲面成为难点之一,下面展示 PSO 在 CEC2017 测试集上的运行结果。

4 PSO 在 CEC2017 测试集上的运行结果

所有函数曲面绘制与原文章显示一致,但是 F11-F20、F29 和 F30 原文章并未给出实际函数曲面(高纬度函数无法绘制),博主采取将其它维度赋值为 0 的形式显示。

4.1 绘制 CEC2017 函数 3D 曲面并保存

F1-F10 函数曲面
在这里插入图片描述
F11-F20 函数曲面
在这里插入图片描述
F21-F30 函数曲面
在这里插入图片描述
单独保存函数曲面
在这里插入图片描述

4.2 PSO 在 CEC2017 函数上的运行结果(包括函数绘制、收敛曲线、等高线与搜索历史、箱线图)

在这里插入图片描述
在这里插入图片描述

注意,当实际维度大于 2D 时,搜索历史并不准确。

4.3 PSO 在 CEC2017 函数上的运行结果(3D 粒子轨迹图)

在这里插入图片描述
注意,当实际维度大于 2D 时,不显示 3D 粒子轨迹图。

5 参考文献

[1] Kennedy J, Eberhart R. Particle swarm optimization[C]//Proceedings of ICNN’95-international conference on neural networks. ieee, 1995, 4: 1942-1948.
[2] Wu G, Mallipeddi R, Suganthan P N. Problem definitions and evaluation criteria for the CEC 2017 competition on constrained real-parameter optimization[J]. National University of Defense Technology, Changsha, Hunan, PR China and Kyungpook National University, Daegu, South Korea and Nanyang Technological University, Singapore, Technical Report, 2017, 9: 2017.

6 MATLAB 代码

1、粒子群算法(Particle Swarm Optimization, PSO)论文和作者给出的代码已存放在工粽号(却相迎的小屋),回复 1995-PSO,诸君自取!
2、粒子群算法(Particle Swarm Optimization, PSO)在 CEC2017 测试集上的运行结果文件夹包括(却相迎的小屋):

  • CEC2017 测试集 PDF 文档
  • input_data 数据
  • 粒子群算法(Particle Swarm Optimization, PSO)在 CEC2017 测试集上的运行代码(包括函数绘制、收敛曲线、等高线与搜索历史、箱线图和 3D 粒子轨迹图)
  • 注意:存在以下三点需在此说明:一是搜索历史显示仅在 2D 时为真实搜索历史;二是很多组合函数和混合函数(F11-F20、F29、F30)没有 2D 时的数据;三是 3D 粒子轨迹图仅在维度等于 2D 时显示。

更多推荐