图3-7 测试函数Ⅱ的优化过程
3.3.5.3 算法评估
标准粒子群算法是在基本粒子群算法的基础上进行简单的改进,对于求解简单优化问题(测试函数)时,能够较快、较准地取得最优值。而在求解复杂优化问题(测试函数)时,往往出现精度不高和陷入局部极值的情况,这方面是算法瓶颈问题,无法通过调整算法自身参数给以解决,必须对算法进行思想方面的改进才能提高算法性能。
3.4小生境粒子群算法 3.4.1 算法思想 3.4.2 算法测试
3.4.3 测试结果与算法评估
3.5自适应调整飞行时间粒子群算法 3.5.1 算法思想 3.5.2 算法测试
3.5.3 测试结果与算法评估 3.6本章小结
为了改善算法的收敛性能,Sin和Eberhart在1998年的论文中引入了惯性因子的概念[12],速度和位置更新公式(3-3)和(3-4)所示:
vijt?1??t?vijt?c1r1?(pbestijt?xijt)?c2r2?(gbestijt?xijt) (3-3)
t?1tt?1 xij?xij?vij (3-4)
这里,?为惯性因子,其大小决定了对粒子当前速度继承的多少,合适的选择可以使粒子具有均衡的探索和开发能力。也就是起到权衡全局搜索能力和局部搜索能力。?较大时,原速度影响较大,全局搜索能力较强;?较小时,原速度影响较小,局部搜索能力较强。
目前,对于PSO算法的研究大多以带惯性因子的PSO算法为基础进行分析、扩展和改进,因此把这种带惯性因子的PSO算法称为标准PSO算法;而将前述的PSO算法称为原始PSO算法。原始PSO算法就是惯性因子?=1时的特例。
第四章 自适应粒子群算法AFIPSO
4.1 引言
粒子群算法存在早熟收敛、收敛速度慢以及稳定性差等缺点。为提高算法性能,已有很多学者通过分析PSO参数对优化性能的影响提出了很多改进方案,例如:惯性权重法[10]、收缩因子法[11]、杂交粒子群算法[12]、非线性惯性递减策略[13]等。这些方法很好地解决了早熟收敛问题,但仍存在对有些测试函数收敛速度慢和稳定性差的问题。本章提出一种自适应粒子群算法AFIPSO。通过自适应调整飞行时间和惯性权值,克服了粒子群算法在进化后期搜索能力下降的问题,并且充分利用目标函数的信息,提高了算法的稳定性,加快了算法的收敛速度。通过测试函数对本章算法进行实验,实验表明:本章算法具有较好的稳定性和收敛速度。
4.2 AFIPSO基本思想
在标准粒子群算法中,由于每代粒子飞行时间固定为1,导致“振荡”现象的产生,且惯性权重?是线性递减的,没有充分利用目标函数所提供的其它信息,使得搜索方向的启发性不强,收敛速度较慢且易陷入局部极值。
为了解决上述问题,本章提出的AFIPSO算法权值?根据全局最优值信息进行自适应调整。惯性权值计算公式如式(4-1)所示[51]。
?ttFbestt?exp(?) (4-1)
Fbestt?1tt?1式中?表示第t代粒子的惯性权值,Fbest、Fbest子的全局最优值。
分别表示第t代、第t-1代粒
另外,在公式(3-2)中未考虑飞行时间,但是为了减少“振荡”现象,本文AFIPSO算法加入飞行时间,并对飞行时间进行自适应调整,调整公式如式(4-2)所示[52]。
xijt?1?xijt?vijt?1?T0?(1?k0t) (4-2) Imax式中T0表示初始飞行时间, k0是调整参数。
4.3 AFIPSO算法流程
AFIPSO算法过程描述如下: 1)种群初始化X?{X1,X2,?,Xn}; 2)计算种群中各个个体的适应度;
tt3)计算个体历史最优位置pbestij、群体历史最优位置gbestij及其所对应的最优值
Fbestt;
4)根据式(3-1)、(4-1)、(4-2)更新粒子的速度与位置; 5)判断是否达到最大迭代代数,如果到了,则退出,否则转2)。 流程图如下:
开始 微粒群体初始化 微粒适应度计算 计算个体历史最优值pbestij 计算群体历史最优值Fbest(t) 根据式(3-1)(4-1)、(4-2) 更新微粒的速度和位置 t判断迭代次数是否达到Imax 判断?是否大于10?6 找不到合理最优值 输出迭代次数t以及最优值 结束
图4-1 自适应粒子群算法AFIPSO流程图
4.4 AFIPSO实验 4.4.1 测试函数
为了考察本章算法的性能,对两个典型的测试函数进行优化。选定测试函数如表1
所示。
表4-1 两个测试函数
测试函数 f(x,y) x2?y2 100(x2?y)2?(1?x)2 x,y取值范围 [-100,100] [-30,30] 求最大/最小值 精确最优值 Ⅰ Ⅱ
最小值 最小值 0 0 4.4.2 参数选取
在本章实验中,取N?100,为
4-2)中k0、T0的取值,分别对k0、T0与迭代收敛次数的关系进行实验。测试结果如图4-2、图4-3所示。
为使迭代次数最少,根据图1、2结果,AFIPSO算法对于测试函数Ⅰ选用参数为:
k0=0.9,T0=0.4;对于测试函数Ⅱ选用参数为:k0=0.6,T0=0.3。

