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/(2Max_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/(2Max_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)<