基于粒子群算法的函数优化问题
一.算法简介
1.1思想来源
粒子群算法(Particle Swarm Optimization,PSO)是1995年提出的一种全局搜索算法,同时也是一种模拟自然界的生物活动以及群体智能的随机搜索算法,因其概念简明、实现方便、收敛速度快而为人所知。
粒子群算法的基本思想是模拟鸟群随机搜寻食物的捕食行为,鸟群通过自身经验和种群之间的交流调整自己的搜寻路径,从而找到食物最多的地点。其中每只鸟的位置/路径则为自变量组合,每次到达的地点的食物密度即函数值。每次搜寻都会根据自身经验(自身历史搜寻的最优地点)和种群交流(种群历史搜寻的最优地点)调整自身搜寻方向和速度,这个称为跟踪极值,从而找到最优解。
1.2基本原理
粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟。
粒子仅具有两个属性:
速度:代表移动的快慢
位置:代表移动的方向。
每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。
速度和位置更新是粒子群算法的核心,其原理表达式和更新方式如下:
id:代数
X:位置
V:速度
w:惯性权重
c1:个体可信度
c2:群体可信度
r:随机数
二.基本流程
粒子群基本流程的主要分为:
1.参数初始化
2. 产生初始粒子和速度
3、寻找个体极值
4、寻找全局最优解
5、修改粒子的速度和位置
三.涉及参数
种群数量:影响算法的搜索能力和计算量。虽然初始种群越大收敛性会更好,不过太大了也会影响速度;
迭代次数:太少解不稳定,太多浪费时间。对于复杂问题,进化代数可以相应地提高;
惯性权重:该参数反映了个体历史成绩对现在的影响
加速系数:一般取0~2,此处要根据自变量的取值范围来定,分为个体和群体两种;
空间维数:粒子搜索的空间维数即为自变量的个数。
位置限制:限制粒子搜索的空间,即自变量的取值范围,对于无约束问题此处可以省略。
速度限制:如果粒子飞行速度过快,很可能直接飞过最优解位置,但是如果飞行速度过慢,会使得收敛速度变慢,因此设置合理的速度限制就很有必要了。
四.代码验证
1.加速系数与惯性因子
2.种群数量和空间维度
4.1 Griewank函数
此实验为验证三个最优值为0的多维函数
运行10次,每次迭代1000代 取平均值找到以下值的较好搭配:
二维图绘制:
4.1.1加速系数与惯性因子的探讨
在这里其他的参数为定值:
迭代次数:maxgen=1000;
种群规模:sizepop=200;
适应度函数维度:dim=10;
1.1 c1,c2为定值,w线性递减
c1 = 1.49445;
c2 = 1.49445;
w=-0.0007x+0.9(其中x为迭代次数1000,w随迭代次数从0.9到0.2线性变化)
# | 最优适应度 | 运行时间 | 收敛代数 |
---|---|---|---|
1 | 0.00000 | 12.094 | 108 |
2 | 0.000000 | 12.060 | 96 |
3 | 0.000000 | 14.478 | 85 |
4 | 0.000000 | 12.348 | 113 |
5 | 0.000000 | 12.502 | 84 |
6 | 0.000000 | 13.415 | 104 |
7 | 0.000000 | 13.230 | 103 |
8 | 0.000000 | 12.573 | 89 |
9 | 0.000000 | 13.436 | 94 |
10 | 0.000000 | 12.346 | 97 |
平均值 | 0.000000 | 12.8428 | 98 |
1.2 c1线性递减,c2线性递增,w为定值
c1 = -0.0007x+0.9(其中x为迭代次数1000,c1随迭代次数从0.9到0.2线性变化)
c2 = 0.0007x+0.9(其中x为迭代次数1000,c2随迭代次数从0.2到0.9线性变化)
w=0.8
# | 最优适应度 | 运行时间 | 收敛代数 |
---|---|---|---|
1 | 0.000000 | 12.154 | 62 |
2 | 0.000000 | 12.504 | 63 |
3 | 0.000000 | 12.398 | 58 |
4 | 0.000000 | 15.531 | 61 |
5 | 0.000000 | 12.531 | 64 |
6 | 0.000000 | 12.668 | 65 |
7 | 0.000000 | 12.438 | 70 |
8 | 0.000000 | 12.458 | 58 |
9 | 0.000000 | 13.294 | 58 |
10 | 0.000000 | 12.392 | 57 |
平均值 | 0.000000 | 12.748 | 62 |
1.3 c1线性递减,c2线性递增,w线性递减
# | 最优适应度 | 运行时间 | 收敛代数 |
---|---|---|---|
1 | 0.000000 | 12.458 | 93 |
2 | 0.000000 | 12.686 | 93 |
3 | 0.000000 | 14.969 | 92 |
4 | 0.000000 | 13.452 | 95 |
5 | 0.000000 | 12.493 | 97 |
6 | 0.000000 | 12.305 | 96 |
7 | 0.000000 | 13.202 | 98 |
8 | 0.000000 | 12.467 | 95 |
9 | 0.000000 | 12.675 | 93 |
10 | 0.000000 | 13.245 |