粒子群算法优化方法
优化方法
因为很有可能会在局部最优,很难到达全局最优。所以需要优化:
最简单的就是将粒子个数设置大一点。但对于一些问题来说不够有效。
惯性权重
惯性权重取值一般是0.8-1.2之间
- 惯性权重越大越有利于全局搜索
- 惯性权重越小越有利于局部搜索
一般有以下几种优化方式:
参数解释
$w_{start}$:最开始的惯性权重,一般是0.9
$w_{end}$:最终的惯性权重,一般是0.4
$G$:最终迭代次数
$t$:当前代数
$N$:粒子群个体数
线性递减惯性权重
每次迭代过程中加上这个公式的代码变换惯性权重。
非线性递减惯性权重
两种方式:
自适应惯性权重
$f_{average}^t$ 表示第 t 次迭代时,所有粒子的平均适应度。
$f_{max}^t = max {f(x_1^t) , f(x_2^t) , \cdots , f(x_N^t) }$
$f_{min}^t = min {f(x_1^t) , f(x_2^t) , \cdots , f(x_N^t) }$
最小值问题
最大值问题
随机惯性权重
其中rand是之间的均匀分布随机数。randn为正态分布的随机数。 为标准差,用来度量随机变量权重与其数学期望(均值)之间的偏离程度。
$\sigma \times randn$ 的目的是控制取值中的权重误差,使权重 $w$ 有利于向期望权重方向进化。
因子
很明显$c_1$和$c_2$对于速度的影响也比较大。
$c_1$较大会使粒子过多地在局部搜索。
$c_2$较大会使粒子过早收敛到局部最优解。
压缩因子法
引进新参数:收缩因子 $\Phi$
一般要求:$c_1 = c_2 = 2.05, C = c_1 + c_2 = 4.10$,收缩因子为
其中,的值可以不等于2.05,但是$C$要满足大于4。
引入收缩因子后,速度更新公式改为:
非对称学习因子
其实就是和权重类似,根据不同的迭代代数产生变化。
目的
在迭代初期采用较大的,较小的,即个体意识优先于集体意识。使得各个粒子可以快速寻找最优解。
在迭代后期采用较大的,较小的,即群体意识优先于个体意识。使得收敛到全局最优。
做法
随着迭代次数的提升,递减
随着迭代次数的提升,递增
公式:
参数的值是假设的