优化方法

因为很有可能会在局部最优,很难到达全局最优。所以需要优化:

最简单的就是将粒子个数设置大一点。但对于一些问题来说不够有效。

惯性权重

惯性权重取值一般是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。

引入收缩因子后,速度更新公式改为:

非对称学习因子

其实就是和权重类似,根据不同的迭代代数产生变化。

  • 目的

    在迭代初期采用较大的,较小的,即个体意识优先于集体意识。使得各个粒子可以快速寻找最优解。

    在迭代后期采用较大的,较小的,即群体意识优先于个体意识。使得收敛到全局最优。

  • 做法

    随着迭代次数的提升,递减

    随着迭代次数的提升,递增

公式:

参数的值是假设的