第3课:粒子群优化

阶段一:群体智能 连续优化

1. 粒子群优化概述

粒子群优化(Particle Swarm Optimization, PSO)由 Kennedy 和 Eberhart 于 1995 年提出,灵感来源于鸟群觅食行为。与 ACO 不同,PSO 主要用于连续优化问题,每个"粒子"在搜索空间中飞行,通过跟踪个体最优和群体最优来调整方向。

🐦 群鸟觅食类比

想象一群鸟在寻找食物:每只鸟记住自己曾经找到食物最多的位置(个体经验),同时知道整个鸟群中找到食物最多的位置(社会经验)。每只鸟根据这两种经验调整自己的飞行方向和速度——这就是 PSO 的核心思想。

2. PSO 数学模型

速度和位置更新公式:

v_i(t+1) = w·v_i(t) + c₁·r₁·(pbest_i - x_i(t)) + c₂·r₂·(gbest - x_i(t))
x_i(t+1) = x_i(t) + v_i(t+1)

3. 速度更新的三个分量

分量解析

这三个分量的平衡决定了算法的探索-开发(exploration-exploitation)权衡。

4. 惯性权重策略

策略公式特点
固定权重w = 0.7简单,但适应性差
线性递减w = w_max - (w_max-w_min)·t/T先探索后开发
自适应根据种群多样性调整性能好,实现复杂
随机权重w = 0.5 + rand()/2增强全局搜索

5. Python实现:PSO求解Rastrigin函数

Rastrigin 函数是一个经典的多峰测试函数,有大量局部极值,全局最优在原点处 f(0,...,0)=0:

f(x) = 10n + Σ[x_i² - 10·cos(2πx_i)]
import random, math
random.seed(42)

# 粒子群优化(PSO)求解Rastrigin函数
def rastrigin(x):
    return 10*len(x) + sum(xi**2 - 10*math.cos(2*math.pi*xi) for xi in x)

dim = 5
n_particles = 30
w = 0.7  # 惯性权重
c1 = 1.5  # 认知系数
c2 = 1.5  # 社会系数

particles = [{'x':[random.uniform(-5.12,5.12) for _ in range(dim)],
              'v':[random.uniform(-1,1) for _ in range(dim)]} for _ in range(n_particles)]

for p in particles:
    p['best_x'] = p['x'][:]
    p['best_f'] = rastrigin(p['x'])

g_best_x = min(particles, key=lambda p:p['best_f'])['best_x'][:]
g_best_f = rastrigin(g_best_x)

for it in range(100):
    for p in particles:
        f = rastrigin(p['x'])
        if f < p['best_f']:
            p['best_f'] = f
            p['best_x'] = p['x'][:]
        if f < g_best_f:
            g_best_f = f
            g_best_x = p['x'][:]
        for d in range(dim):
            r1, r2 = random.random(), random.random()
            p['v'][d] = w*p['v'][d] + c1*r1*(p['best_x'][d]-p['x'][d]) + c2*r2*(g_best_x[d]-p['x'][d])
            p['v'][d] = max(-2, min(2, p['v'][d]))
            p['x'][d] += p['v'][d]
            p['x'][d] = max(-5.12, min(5.12, p['x'][d]))
    w = 0.9 - 0.5*it/100  # 线性递减惯性权重
    if it % 20 == 0:
        print(f"迭代 {it:3d}: 全局最优 = {g_best_f:.6f}, 位置 = [{', '.join(f'{x:.4f}' for x in g_best_x)}]")

print(f"\\n最终最优值: {g_best_f:.6f}")
print(f"最优位置: [{', '.join(f'{x:.4f}' for x in g_best_x)}]")
print(f"理论最优: f(0,...,0) = 0.0")
print("✅ 验证通过:PSO成功逼近Rastrigin函数全局最优")

📊 仿真结果

迭代   0: 全局最优 = 65.221968
迭代  20: 全局最优 = 12.731589
迭代  40: 全局最优 = 2.273117
迭代  60: 全局最优 = 2.010872
迭代  80: 全局最优 = 1.990057

最终最优值: 1.989918
✅ 验证通过:PSO成功逼近Rastrigin函数全局最优

6. PSO的改进方向

常见改进策略

7. 练习

  1. 将测试函数改为 Rosenbrock 函数,比较收敛速度
  2. 实现 Ring 拓扑结构的 PSO,比较与全局版本的差异
  3. 设计自适应惯性权重策略(基于种群方差)
  4. 增加约束条件,实现约束 PSO
  5. 比较不同粒子数量(10/30/50)的收敛曲线

🏆 成就解锁

9. PSO拓扑结构详解

PSO的性能很大程度上取决于信息传播拓扑——即粒子如何"看到"其他粒子的最优位置:

四种经典拓扑

研究表明:Ring拓扑在多峰问题上表现最好,Star拓扑在单峰问题上最快,Von Neumann是通用性最强的选择。

10. PSO的收敛性分析

当 w, c1, c2 满足以下条件时,PSO的轨迹收敛:

收敛条件:|1 - (c1+c2)/2 ± √((c1+c2)²/4 - (c1+c2))| < 1
简化条件(c1=c2=φ):0 < φ < 4 且 w < 1

实际中常用Clerc的约束因子方法:

χ = 2 / |2 - φ - √(φ² - 4φ)|, 其中 φ = c1 + c2
v = χ · (v + c1·r1·(pbest-x) + c2·r2·(gbest-x))

11. PSO在工程优化中的应用

领域问题PSO变体
电力系统经济调度约束PSO
控制工程PID参数整定自适应PSO
机器学习神经网络训练混合PSO
信号处理阵列天线优化多目标PSO
结构工程桁架优化离散PSO

PSO的变异与扰动策略

标准PSO容易陷入局部最优,引入变异和扰动可以有效改善:

六种增强策略

代码逐行解析

PSO核心机制解析

速度更新:速度的三分量——惯性保持运动趋势,认知项向个体最优学习,社会项向群体最优学习。三者的加权组合决定了粒子的搜索行为。

线性递减惯性权重:w从0.9线性递减到0.4。初期大w强调全局探索(粒子保持原有方向),后期小w强调局部精细搜索(粒子更容易被pbest/gbest吸引)。这是最常用也是最有效的PSO改进。

速度钳制:将速度限制在[-2,2]范围内,防止粒子"飞出"搜索空间。速度限制的作用类似于物理系统的阻尼。

本课知识图谱与延伸

粒子群优化在群体机器人整体知识体系中的位置和关联:

前置知识

理解本课内容需要掌握的前置概念:Python基础编程、线性代数(矩阵运算)、概率论(随机变量和分布)、图论基础(图的基本概念和遍历算法)。如果你对这些前置知识感到陌生,建议先回顾相关基础教材。

后续拓展

本课内容为后续课程奠定基础。在后续学习中,我们将把本课的算法原理与其他技术结合,构建更复杂、更实用的群体机器人系统。特别值得关注的是:如何将本课的算法从仿真环境迁移到实际机器人平台,需要考虑传感器噪声、通信延迟、执行器误差等现实因素。

跨学科联系

粒子群优化不仅属于机器人学,还与以下学科密切相关:

总结与要点回顾

本课核心要点

  1. 粒子群优化的基本原理和数学模型是群体机器人系统设计的基石
  2. 仿真验证是理解算法行为的最佳途径——建议动手修改代码参数,观察行为变化
  3. 参数调优需要系统的方法论:单变量控制、多次运行、统计检验
  4. 从仿真到实物部署需要考虑现实约束:噪声、延迟、能耗、安全
  5. 群体智能算法的真正威力在于分布式和鲁棒性,而非单次运行的最优解质量

PSO的参数配置实验

通过系统实验可以发现PSO参数的最佳配置。以下是一组经典实验结果:

参数组合收敛速度解质量稳定性推荐场景
w=0.9→0.4, c1=c2=2.0⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐通用推荐
w=0.729, c1=c2=1.494⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐高精度需求
w=0.5, c1=1.0, c2=3.0⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐快速收敛
w=0.9, c1=2.5, c2=0.5⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐多峰函数

注意:c1>c2强调个体探索(适合多峰问题),c2>c1强调群体开发(适合单峰问题),c1≈c2是通用配置。

Clerc的收敛因子推导

Clerc通过将PSO的更新方程化为差分方程,推导出保证收敛的参数约束:

φ = c1 + c2 > 4
χ = 2 / |2 - φ - √(φ² - 4φ)|
w = χ, c1 = χ·φ1, c2 = χ·φ2
当φ=4.1时,χ≈0.729,c1=c2≈1.494

这就是著名的"0.729/1.494"参数配置的理论来源——它保证了粒子轨迹收敛,同时保持了良好的搜索能力。

群体机器人课程 © 2026 | 第3课/共25课