背景介绍
PSO(Particle Swarm Optimization):受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。
核心思想
1. 随机产生一些粒子
2. 找出所有粒子中适应度最优的粒子gbest
$$g_{best}=\underset{x}{arg \ min} \ f(x)$$
3. 更新每一个粒子的飞行速度
$$v_{i}’=w \cdot v_{i}+c1 \cdot r_{i} \cdot (p_{i}-x_{i})+c2 \cdot s_{i} \cdot (g_{best}-x_{i})$$
4. 获得每个粒子当前位置xi和该粒子在飞行中到达过的最优位置pi
$$x_{i}’=x_{i}+v_{i}’$$
$$p_{i}’= \begin{cases} x_{i}’ & f(x_{i}’) < f(p_{i}) \ p_{i} & f(x_{i}’) \ge f(p_{i}) \end{cases}$$
5. 回到步骤2,直到满足某个终止条件
6. 此时粒子集群,粒子群位置为极小值,最小的p为算法的最优解
7. 回到步骤2,直到满足某个终止条件
算法流程
代码实战
代码中所用测试函数可以查看相关文档,测试函数(Test Function)
PSO_main.m
1 | clear;clc;close all; |
f.m
1 | function res=f(x) |
实验结果
$$f(x)=x \cdot \sin(\sqrt{\lvert x \rvert}) \ , \ x \in [-500,500]$$
$$理论值:f(x)_{min}=f(-420.96874592006)=-418.982887272434$$
$$所求值:f(x)_{min}=f(-420.968750420615)=-418.982887272432$$
性能比较
- 优点:
- 搜索能力最快
- 从群体出发,具有并行性
- 可用于求解复杂的非线性优化问题
- 缺点:
- 受到参数影响较大
- 存在早熟收敛问题
- 对初始粒子群的数量有很高的要求