Page 184 - 《软件学报》2021年第10期
P. 184

3156                                 Journal of Software  软件学报 Vol.32, No.10, October 2021

                 优个体(x best )策略,这增加了算法陷入局部最优的风险.为了有效防止 FPA 算法早熟,本文利用公式(9)来产生一
                 个新个体以替换没有得到改善的父代个体.从公式(9)可以发现:新个体的产生利用了余弦函数因子,使得算法有
                 利于跳出局部最优.这是因为,余弦函数因子与线性递减因子相比,余弦函数因子具有振荡性.
                    本文通过融入余弦函数搜索因子,利用其振荡特点使得种群个体位置具有振荡性,扩展个体的搜索范围,有
                 效引导个体跳出局部最优,提高解的质量.
                    图 1 是余弦函数在 x 不同取值范围内的曲线图,从图 1 可知:随着 x 取值的不断扩大,余弦函数的峰值个数
                 增多,这说明余弦函数的振荡性更加剧烈.但是,如果算法的振荡性太强,不利于算法快速收敛,甚至造成算法找
                 不到全局最优解.鉴于此,本文把余弦函数的 x 取值设为t/(2Max_iter)(0,/2),以减缓个体的振荡性,使算法获
                 得更优质量的解.
                              1
                                                      1                     1
                             0.8
                                                     0.5                   0.5
                             0.6
                            y                         0                     0
                             0.4                    y                     y
                             0.2                    -0.5                   -0.5
                              0                      -1                    -1
                              0   0.5  1   1.5  2     -4  -2  0   2   4     -10  -5  0  5   10
                                       x                      x                     x
                                   (a) x(0,/2)                           (b) x(,)                         (c) x(2,2)
                              Fig.1    Curve graph of cosine functions within the range of different values of x
                                          图 1   余弦函数在 x 不同取值范围内的曲线图
                    (3)  同时,利用公式(9)中的余弦函数搜索因子,其作用是对产生的新个体半径范围进行调节.其思想是:在算
                 法进化初期,cos(t/(2Max_iter))值较大,则以原有个体 x t (r)为中心的搜索半径较大,使得算法具有良好的全局
                 搜索能力;而随着演化的不断深入,其搜索半径越来越小,因此到进化的后期,新个体更侧重于局部精细化开采.
                 由此可知:通过利用余弦函数因子,可使算法具有良好的全局搜索和局部搜索平衡性,提高了算法的全局优化能
                 力,并找到最优解.

                 2.4   MIFPA算法的流程
                    根据第 2.1 节~第 2.3 节描述的算法改进思想,本节给出 MIFPA 算法流程,如算法 1 所示.其中,n 为花朵的个
                 数,x best 是全局最优解,f min 是 x best 对应的最优值.
                    Aglorithm 1. MIFPA.
                    1.   Randomly produce n flowers {x i |i=1,2,…,n};
                    2.    Compute the fitness fun(x i );
                    3.   f min =min(fun(x i ));
                    4.    Find the best individual x best  in the initial population;
                    5.   FEs=n;
                    6.   while FEs≤Max_FEs do
                    7.      for i=1: n do
                    8.         Generate a new p according to Eq.(11);
                    9.         if p>rand(0,1)   //global optimization
                    10.          Randomly produce four flowers (solutions);
                    11.          produce a new candidate  x t 1   based on Eq.(2)~Eq.(4) and Eq.(6);
                                                  i
                    12.        else      // local optimization
                    13.          Randomly generate four flowers (solutions);
                    14.           if rand(0,1)<
   179   180   181   182   183   184   185   186   187   188   189