基于惯性权值非线性递减的改进粒子群算法 - 附代码

基于惯性权值非线性递减的改进粒子群算法


摘要:针对粒子群优化算法中出现的收敛早熟和不收敛的问题,提出了一种基于自然选择和惯性权值非线性递减的改进粒子群算法,在算法迭代过程中,粒子边界速度采用最大速度非线性递减变化策略来限制,惯性权值非线性递减变化用于平衡种群粒子前期全局搜索与后期局部寻优的能力;为使种群在进化过程中保持多样性,在标准粒子群算法中引用二阶振荡策略使种群在进化过程中始终保持着多样性;在此基础上,进一步地将遗传算法中的选择机理与粒子群算法结合起来用于提高算法的适用性能;

1.粒子群优化算法

基础粒子群算法的具体原理参考网络资料

2. 改进粒子群算法

2.1 惯性权值非线性变化策略

惯性权重是 PSO 算法中极其重要的参数, 它描 述了粒子上一代速度对当前代速度的影响, 按制其 取值大小可有效地调节平衡 PSO 算法的全局与局 部寻优能力。当惯性权值较大时, 全局寻优能力较 强, 局部寻优能力较弱; 当惯性权重较小时, 局部寻 优能力较强, 而全局寻优能力将减弱。考虑切比雪 夫滤波器幅频响应曲线模型在线性和非线性行为之 间表现出极好的过渡性, 提出了一种基于切比雪夫 滤波器惯性权重非线性变化策略, 并引入权重控制 因子, 通过调节该控制因子的大小进而来调整最大 惯性权值在种群进化过程中所占的比例, 能够保证 粒子群在初始状态时以较大的惯性权值进行全局开 发性搜索, 而在迭代后期又以较小的固定权值进行 更为精细化的局部寻优, 其数学模型如式 (5) 所示:
w ( t ) = 0.55 1 + ( K t T ) 10 + 0.4 (5) w(t)=\frac{0.55}{\sqrt{1+\left(\frac{K t}{T}\right)^{10}}}+0.4 \tag{5} w(t)=1+(TKt)10 0.55+0.4(5)
其中,K 为权重控制因子,t 为种群当前进化代数,T为种群总的进化代数。在算法迭代初始,粒子的权值可以取得最大值 0. 95,有利于前期的全局搜索,而随着迭代次数的增加,粒子的权值逐渐趋近最小值 0. 4,此时可以更好地进行局部精细化搜索。

2.2 粒子最大速度非线性递减策略

粒子最大速度的设置非常重要, 较大的速度有 利于种群进行全局的开发, 但粒子速度过大, 会导致 粒子在搜索的过程中错过全局最优解; 与之相反, 较 小的速度有助于种群进行局部搜索, 但速度过小, 会 导致粒子不能够在解空间内进行充分探索, 从而陷 入局部最优的可能性提高。为了进一步提高 PSO 算法的性能, 防止因为粒子飞离搜索空间而造成种 群多样性减小, 进而提出了一种粒子最大速度非线 性递減策略。粒子的最大速度在随着种群迭代的进 行过程中呈现非线性减小, 可使粒子有效地避免因为 过大的速度而落入边界区域进行无效地搜索。粒子 最大速度非线性递减策略数学模型如式 (6) 所示:
V max ⁡ ( t ) = v max ⁡ 1 + ( 3 t T ) 10 + v min ⁡ (6) V_{\max }(t)=\frac{v_{\max }}{\sqrt{1+\left(\frac{3 t}{T}\right)^{10}}}+v_{\min } \tag{6} Vmax(t)=1+(T3t)10 vmax+vmin(6)
其中, v max  v_{\text {max }} vmax  v min  v_{\text {min }} vmin  分别为种群粒子最大速度的最大值 与最小值, 它们的取值由标准测试函数定义域确定。

2.3 自然选择原理

考虑到 PSO 算法优化性能会受到的随机因素影响较多,为了提高算法的适用性,结合遗传算法中
的选择思想,在上述几种改进策略的基础上加入自然选择机制,其基本思想为每次迭代过程中将整个粒子群按照适应值的大小来进行排序,并用群体中适应值最好的一半的粒子的速度与位置来替换群体中适应值最差的一半的粒子的位置和速度,在这一过程中保留原来个体记忆的最优值,来提高粒子接近最优值的几率。

2.4 粒子二阶振荡策略

粒子群算法在迭代过程中是呈现渐进收敛的,整个迭代过程中种群的多样性势必会有减小的趋势,这不利于粒子寻求最优解的几率提高,在标准粒子群算法的基础上,采用文献[11]中所述的方法,对粒子速度更新进行二阶振荡处理,以进一步提高种群的多样性,改善算法的全局与局部收敛平衡性能。其速度更新方程如下:
v i d k + 1 = w v i d k + c 1 r 1 [ p i d − ( 1 + ξ 1 ) x i d k + ξ 1 x i d k − 1 ] + c 2 r 2 [ p g d − ( 1 + ξ 2 ) x i d k + ξ 2 x i d k − 1 ] (7) v_{i d}^{k+1}=w v_{i d}^{k}+c_{1} r_{1}\left[p_{i d}-\left(1+\xi_{1}\right) x_{i d}^{k}+\xi_{1} x_{i d}^{k-1}\right]+c_{2} r_{2}\left[p_{g d}-\left(1+\xi_{2}\right) x_{i d}^{k}+\xi_{2} x_{i d}^{k-1}\right] \tag{7} vidk+1=wvidk+c1r1[pid(1+ξ1)xidk+ξ1xidk1]+c2r2[pgd(1+ξ2)xidk+ξ2xidk1](7)
其中, ξ 1 \xi_{1} ξ1 ξ 2 \xi_{2} ξ2 为随机数。根据文献 [ 12 ] [12] [12], 为使算法 在迭代前期具有较强的全局搜索能力, 取 ξ 1 ⩽ \xi_{1} \leqslant ξ1 2 c 1 r 1 − 1 c 1 r 1 , ξ 2 ⩽ 2 c 2 r 2 − 1 c 2 r 2 \frac{2 \sqrt{c_{1} r_{1}}-1}{c_{1} r_{1}}, \xi_{2} \leqslant \frac{2 \sqrt{c_{2} r_{2}}-1}{c_{2} r_{2}} c1r12c1r1 1,ξ2c2r22c2r2 1; 为使算法在迭代后期具 有较强的局部搜索能力能够渐进收玫, 取 ξ 1 ⩾ \xi_{1} \geqslant ξ1 2 c 1 r 1 − 1 c 1 r 1 , ξ 2 ⩾ 2 c 2 r 2 − 1 c 2 r 2 \frac{2 \sqrt{c_{1} r_{1}}-1}{c_{1} r_{1}}, \xi_{2} \geqslant \frac{2 \sqrt{c_{2} r_{2}}-1}{c_{2} r_{2}} c1r12c1r1 1,ξ2c2r22c2r2 1, 这里的算法迭代前期指 的是进化代数小于或等于最大进化代数的一半。

改进粒子群算法的主要实现步骤如下:
(1) 设定各参数, 初始化种群中各粒子的位置 和速度;
(2)计算种群中每个粒子的适应度值, 初始化 种群个体最优值和全局最优值, 将当前各粒子的位 置和适应度值存储在各个粒子的 p i p_{i} pi, 将当前所有 pbest 中适应度值最优个体的位置和适应度值存储 于 p g p_{g} pg 中;
(3)根据式 (5) 对惯性权值进行更新;
(4)根据式(7)以及式(1)中的位置更新公式 进行粒子的速度和位置更新;
(5)根据式(6)对粒子的最大速度进行更新, 以保证算法的收敛性能;
(6)比较粒子适应度值与其经历过的最好的位 置进行比较, 更新粒子当前的个体最优值;
(7)比较粒子适应度值与种群全局极值, 更新 粒子当前的全局最优值;
(8) 将种群适应度值的大小进行排序, 用群体 中最好的一半的粒子的速度和位置替换最差的一半 的粒子的速度和位置, 同时把持种群中个体最优值 与全局最优值记忆不变;
(9)若满足迭代停止条件, 则搜索结束; 若不满 足迭代停止条件, 则返回步骤 (3)。

3.实验结果

请添加图片描述

4.参考文献

[1]华勇,王双园,白国振,李炳初.基于惯性权值非线性递减的改进粒子群算法[J].重庆工商大学学报(自然科学版),2021,38(02):1-9.

5.Matlab代码

6.Python代码

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
粒子群算法是一种优化算法,用于寻找最优解,它模仿了鸟群或鱼群等动物的行为,算法的主要思想是通过粒子之间的合作和竞争来搜索问题的最优解。在使用粒子群算法进行优化时,源码的质量和性能直接影响算法的结果。下面是改进粒子群算法Matlab源码的一些建议: 1.修改目标函数: 在改进粒子群算法的Matlab源码时,我们可以尝试修改目标函数,以获得更好的结果。可以使用其他优化算法或更好的数学函数来修复粒子群算法中的问题。 2.适当增加粒子数量: 粒子群算法中的粒子数量很重要。增加粒子数可以获得更精确的结果,但会增加计算成本。因此,需要平衡计算成本和结果精度。 3.修改参数: 粒子群算法中有多个参数,例如惯性权值,学习因子等,它们直接影响算法的性能和效率。改变这些参数可以改善算法的运行和搜索能力。 4.使用局部搜索策略: 粒子群算法本质上是一种全局搜索算法,由于其随机性和多样性,它可以避免掉入局部极小值。但是,有时候全局搜索难以得到最优解,可以考虑在算法中添加局部搜索策略以提高精度。 5.优化计算性能: 在优化算法中,计算性能很重要。为了提高Matlab源码的计算效率,可以使用C++等高性能语言重写部分代码,或使用并行计算的技术。还可以采用其他优化方法,例如矩阵分解和空间索引算法,来减少计算成本。 总之,改进粒子群算法Matlab源码需要充分了解它的原理和局限性,同时考虑目标函数、粒子数量、参数和计算性能等多种因素,并适应具体应用场景选择不同的优化方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能算法研学社(Jack旭)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值