惯性权重控制前一变化量对当前变化量的影响,如果ω较大,能够搜索以前未能达到的区域,整个算法的全局搜索能力较强;若ω较小,则前一部分的影响较小,主要是在当前解的附近搜索,局部搜索能力较强。
常见的PSO算法有自适应权重法、随机权重法和线性递减权重法等。
1.线性递减权重法
针对PSO算法容易早熟及后期容易在全局最优解附近产生振荡的现象,提出了线性递减权重法,即使惯性权重依照线性从大到小递减,其变化公式为
其中,ωmax表示惯性权重最大值;ωmin表示惯性权重最小值;t表示当前迭代步数。
2.随机权重法
随机权重法的计算步骤如下:
①随机设置各个粒子的速度和位置。
②评价每个粒子的适应度,将粒子的位置和适应值存储在粒子的个体极值pbest中,将所有pbest中最优适应值的个体位置和适应值保存在全局极值gbest中。
③更新粒子位移和速度:
④更新权重:
⑤将每个粒子的适应值与粒子的最好位置进行比较,如果相近,则将当前值作为粒子最好的位置。比较当前所有的pbest和gbest,更新gbest。
⑥当算法达到其停止条件时,则停止搜索并输出结果;否则,返回第③步继续搜索。
将实现自适应权重的优化函数命名为PSO_line,在MATLAB中编写实现以上步骤的代码如下:
例6.5 用随机权重法求解下列函数的最小值:
其中,粒子数为60,学习因子均为1.2,惯性权重取值[0.6,0.9],迭代步数为700。
解:目标函数的MATLAB代码如下:
编写如下代码:
运行后得到结果如下:
以上结果说明,用线性递减权重的方法得到了精确的最优点。需要注意的是,惯性权重并不是对所有的问题都有效,具体问题需要具体分析最合适的方法。
3.自适应法
本部分主要介绍两种自适应修改权重的方法。
(1)根据全局最优点的距离进行调整
一些学者认为惯性权重的大小还和其距全局最优点的距离有关,并提出了不同粒子惯性权重不仅随迭代次数的增加而递减,还随距全局最优点距离的增加而递增,即权重ω根据粒子的位置不同而动态变化。目前大多采用非线性动态惯性权重系数公式,该公式如下:(www.daowen.com)
其中,f表示粒子实时的目标函数值;favg和fmin分别表示当前所有粒子的平均值和最小目标值。从上面的公式可以看出,惯性权重随着粒子目标函数值的改变而改变。当粒子目标值分散时,减小惯性权重;当粒子目标值一致时,增加惯性权重。
根据全局最优点的距离调整算法的基本步骤如下:
①随机初始化种群中各个粒子的位置和速度。
②评价每个粒子的适应度,将粒子的位置和适应值存储在粒子的个体极值pbest中,将所有pbest中最优适应值的个体位置和适应值保存在全局极值gbest中。
③更新粒子位移和速度:
④更新权重:
⑤将每个粒子的适应值与粒子的最好位置进行比较,如果相近,则将当前值作为粒子最好的位置。比较当前所有的pbest和gbest,更新gbest。
⑥当算法达到其停止条件时,则停止并输出结果;否则,返回第③步继续搜索。
(2)依据早熟收敛程度和适应值进行权重调整
根据群里的早熟收敛程度和适应值,可以确定惯性权重的变化。
设定粒子pi的适应值为fi,最优粒子适应度为fm,则粒子群的平均适应值,对优于平均适应值的粒子适应值求平均(记为),定义。
依据fi、fm、favg将群体分为3个子群,分别进行不同的自适应操作。其惯性权重的调整如下:
①如果fi优于,那么
②如果fi次于,且次于fm,则惯性权重不变。
③如果fi次于,则
其中,k1、k2为控制参数,k1用来控制ω的上限,k2主要用来控制ω=1.5-的调节能力。
当算法停止时,如果粒子的分布分散,则Δ比较大,ω变小,此时算法局部搜索能力加强,从而使群体趋于收敛;若粒子的分布聚集,则Δ比较小,ω变大,使粒子具有较强的探查能力,从而有效地跳出局部最优。
将实现自适应权重的优化函数命名为PSO_adp,在MATLAB中编写实现以上步骤的代码如下:
例6.6 用自适应权重法求解下列函数的最小值。
其中,粒子数为40;学习因子均为1.5;惯性权重取值为[0.7,0.7];迭代步数为200。
解:首先建立目标函数代码如下:
编写目标函数最小值计算代码如下:
运行后得到结果如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。