1. 粒子群优化算法(PSO)核心原理剖析
粒子群优化算法(Particle Swarm Optimization)是一种模拟鸟群觅食行为的群体智能优化算法。它的核心思想来源于对自然界中群体行为的观察:每个个体在搜索过程中既会参考自身的历史最佳经验,也会借鉴群体的集体智慧。
1.1 算法动力学模型
PSO算法的数学表达基于以下两个核心方程:
速度更新方程:
vᵢᵈ = w×vᵢᵈ + c₁×rand()×(pbestᵢᵈ - xᵢᵈ) + c₂×rand()×(gbestᵢᵈ - xᵢᵈ)
位置更新方程:
xᵢᵈ = xᵢᵈ + vᵢᵈ
其中各参数含义:
- vᵢᵈ:第i个粒子在第d维的速度
- xᵢᵈ:第i个粒子在第d维的位置
- pbestᵢᵈ:第i个粒子在第d维的历史最佳位置
- gbestᵢᵈ:群体在第d维的历史最佳位置
- w:惯性权重,控制历史速度的影响
- c₁, c₂:学习因子,分别控制个体和群体经验的影响
1.2 参数选择与调优经验
在实际应用中,参数设置对算法性能有决定性影响。根据多年工程实践,我总结出以下调参经验:
- 群体规模:
- 一般问题:20-50个粒子
- 复杂问题:50-100个粒子
- 超高维问题:100+粒子
- 学习因子:
- 经典设置:c₁ = c₂ = 2.0
- 探索型设置:c₁ > c₂
- 开发型设置:c₁ < c₂
- 惯性权重:
- 固定值:0.6-0.9
- 动态调整:线性递减(0.9→0.4)效果通常更好
重要提示:参数设置没有绝对标准,需要通过实验验证。建议先用小规模测试确定参数范围,再逐步细化。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. PSO算法工程实现详解
2.1 基础PSO实现框架
以下是Python实现的完整PSO框架,包含详细注释和工程优化:
python复制import numpy as np
from typing import Callable, Tuple
class PSO:
def __init__(self,
objective_func: Callable,
dim: int,
bounds: Tuple[float, float],
num_particles: int = 30,
max_iter: int = 100,
w: float = 0.7,
c1: float = 1.5,
c2: float = 1.5):
"""
初始化PSO优化器
参数:
objective_func: 目标函数
dim: 问题维度
bounds: (min, max) 搜索边界
num_particles: 粒子数量
max_iter: 最大迭代次数
w: 惯性权重
c1: 个体学习因子
c2: 群体学习因子
"""
self.obj_func = objective_func
self.dim = dim
self.bounds = bounds
self.num_particles = num_particles
self.max_iter = max_iter
self.w = w
self.c1 = c1
self.c2 = c2
# 初始化粒子位置和速度
self.positions = np.random.uniform(bounds[0], bounds[1],
(num_particles, dim))
self.velocities = np.zeros((num_particles, dim))
# 记录个体最优和全局最优
self.pbest_positions = self.positions.copy()
self.pbest_values = np.array([self.obj_func(p) for p in self.positions])
self.gbest_index = np.argmin(self.pbest_values)
self.gbest_position = self.pbest_positions[self.gbest_index]
self.gbest_value = self.pbest_values[self.
