当前位置: 首页 > news >正文

一种加权变异的粒子群算法-附代码

一种加权变异的粒子群算法

文章目录

  • 一种加权变异的粒子群算法
    • 1.粒子群优化算法
    • 2. 改进粒子群算法
      • 2.1 自适应权重和自适应学习因子
      • 2.2 加权变异
      • 2.3 高斯扰动
    • 3.实验结果
    • 4.参考文献
    • 5.Matlab代码
    • 6.Python代码

摘要:针对粒子群算法易于陷入早熟、收敛速度慢及收敛精度低的问题,提出了加权变异的WVPSO(Weighted Variation Particle Swarm Optimization)粒子群算法。根据自适应惯性权重和自适应学习因子,平衡了全局搜索和局部搜索能力;基于算术交叉的变异和自然选择机制的替换策略,增加了粒子的多样性,提高了算法的收敛精度;最后加入高斯扰动,使粒子产生震荡,更容易跳出局部最优。

1.粒子群优化算法

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

2. 改进粒子群算法

2.1 自适应权重和自适应学习因子

在 PSO 算法迭代的过程中, 权重在算法迭代前期需要让粒子的步长变化更快, 从而让粒子尽可能早地 达到全局最优值所在的区域, 而在算法迭代后期则应该减少步长的变化, 让粒子在该区域内作精准的搜索使 之找到全局最优解。对于学习因子, 在算法迭代前期应该自我学习率占比高, 群体学习率占比低; 随着迭代 不断进行, 自我学习比率要逐步降低, 而群体学习比率则逐渐提高。这样既可以加快算法的收玫速度, 又可 以提高算法的收敛精度。基于上述思想, 本文提出了一种自适应权重和自适应学习因子的方法:
w = 0.8 × exp ⁡ ( − 2.5 i t Max ⁡ I t ) (3) w=0.8 \times \exp \left(\frac{-2.5 i t}{\operatorname{Max} I t}\right) \tag{3} w=0.8×exp(MaxIt2.5it)(3)

c 1 = c 1up  − rand ⁡ × ( 1 − exp ⁡ ( − Max ⁡ I t Max ⁡ I t − i t ) ) × ( c uup  − c 11  ow  ) (4) c_{1}=c_{\text {1up }}-\operatorname{rand} \times\left(1-\exp \left(\frac{-\operatorname{Max} I t}{\operatorname{Max} I t-i t}\right)\right) \times\left(c_{\text {uup }}-c_{11 \text { ow }}\right) \tag{4} c1=c1up rand×(1exp(MaxItitMaxIt))×(cuup c11 ow )(4)

c 2 = c 210 w + rand ⁡ × ( 1 − exp ⁡ ( − Max ⁡ I t Max ⁡ I t − i t ) ) × ( c 2  up  − c 21  ow  ) , (5) \begin{gathered} c_{2}=c_{210 w}+\operatorname{rand} \times\left(1-\exp \left(\frac{-\operatorname{Max} I t}{\operatorname{Max} I t-i t}\right)\right) \times\left(c_{2 \text { up }}-c_{21 \text { ow }}\right), \end{gathered} \tag{5} c2=c210w+rand×(1exp(MaxItitMaxIt))×(c2 up c21 ow ),(5)
式 (3) (5) 中, it 和 MaxIt 分别为算法当前的迭代次数和最大的迭代次数; rand 为 0 ∼ 1 0 \sim 1 01 之间的随机数; c 1  lup  , c 11  ov  c_{1 \text { lup }}, c_{11 \text { ov }} c1 lup ,c11 ov  为自我学习因子的上下界; c 2  uup  , c 21  ow  c_{2 \text { uup }}, c_{21 \text { ow }} c2 uup ,c21 ow  为群体学习因子的上下界。式 (3) 中, 权重 w w w 在算法迭代前期尽可能取最大值,从而使算法步长得到更快的变化;随着算法的不断迭代,权重则逐渐减小,以满足算法的自适应权重需求;式(4)在算法进行的过程中是一个递减的函数,式(5)则是一个递增的函数,符合自适应学习因子的思想要求。

2.2 加权变异

由于标准 PSO 算法收敛速度比较慢、迭代后期种群多样性降低, 使得算法最后难以搜索到全局最优值。 对此, 本文加入算术交叉和自然选择策略来提高粒子多样性、增强收玫速度与精度。对于变异粒子的比例, 通过以下方式选择:
 [  ∣ P 1 ∣ , ∣ P 2 ∣ , ⋯   , ∣ P N ∣ ] (6) \text { [ } \left.\left|P_{1}\right|,\left|P_{2}\right|, \cdots,\left|P_{N}\right|\right] \tag{6}  [ P1,P2,,PN](6)
将所有粒子适应值的绝对值从小到大按照式 (6) 方式排列, 并按照式(7) 进行分割, 式(7) 如下:
[ ∣ P 1 ∣ , ∣ P 2 ∣ , ⋯   , ∣ P N 5 ∣ , ∣ P N 5 + 1 ∣ , ⋯   , ∣ P N 2 ∣ , ∣ P N 2 + 1 ∣ , ⋯   , ∣ P 4 N 5 ∣ , ⋯   , ∣ P N ∣ ] . \left[\left|P_{1}\right|,\left|P_{2}\right|, \cdots,\left|P_{\frac{N}{5}}\right|,\left|P_{\frac{N}{5}+1}\right|, \cdots,\left|P_{\frac{N}{2}}\right|,\left|P_{\frac{N}{2}+1}\right|, \cdots,\left|P_{\frac{4 N}{5}}\right|, \cdots,\left|P_{N}\right|\right] . [P1,P2,, P5N , P5N+1 ,, P2N , P2N+1 ,, P54N ,,PN].
将式 (6) 中的适应值分成 ξ 1 , ξ 2 , ξ 3 , ξ 4 \xi_{1}, \xi_{2}, \xi_{3}, \xi_{4} ξ1,ξ2,ξ3,ξ4 四个部分, 由于粒子群算法存在的随机性, 因此将粒子的适应值分 为好 ( ξ 1 , ξ 2 ) \left(\xi_{1}, \xi_{2}\right) (ξ1,ξ2) 与不好 ( ξ 3 , ξ 4 ) \left(\xi_{3}, \xi_{4}\right) (ξ3,ξ4) 两个群体。其中 ξ 1 , ξ 4 \xi_{1}, \xi_{4} ξ1,ξ4 各占总体的 20 % ; ξ 2 , ξ 3 20 \% ; \xi_{2}, \xi_{3} 20%;ξ2,ξ3 各占总体的 30 % 30 \% 30% 。这里使用交叉 操作作用于 ξ 2 , ξ 3 \xi_{2}, \xi_{3} ξ2,ξ3, 融合好粒子与差粒子, 不仅能够产生具有多样性的后代, 而且促使差粒子向好粒子移动; 使用自然选择作用于 ξ 1 , ξ 4 \xi_{1}, \xi_{4} ξ1,ξ4, 直接将差粒子 ξ 4 \xi_{4} ξ4 的速度与位置直接替换为好粒子 ξ 1 \xi_{1} ξ1 的速度与位置, 类似于将整 个种群缩小 20 % 20 \% 20%, 从而大大加快粒子的收敛速度。具体策略如下:
(1)算术交叉: 根据文献 [11] 的交叉公式, 本文改进算术交叉公式如下所示:
x ξ 3 =  rand  × x ξ 2 + ( 1 −  rand  ) × x ξ 3 (8) x_{\xi_{3}} =\text { rand } \times x_{\xi_{2}}+(1-\text { rand }) \times x_{\xi_{3}} \tag{8} xξ3= rand ×xξ2+(1 rand )×xξ3(8)

v ξ 3 =  rand  × v ξ 2 + ( 1 −  rand  ) × v ξ 3 . (9) \begin{aligned} v_{\xi_{3}} &=\text { rand } \times v_{\xi_{2}}+(1-\text { rand }) \times v_{\xi_{3}} . \end{aligned} \tag{9} vξ3= rand ×vξ2+(1 rand )×vξ3.(9)
x ξ 2 , x ξ 3 x_{\xi 2}, x_{\xi 3} xξ2,xξ3 为式 (7) 中 ξ 2 , ξ 3 \xi_{2}, \xi_{3} ξ2,ξ3 处的粒子位置; v ξ 2 , v ξ 3 v_{\xi 2}, v_{\xi 3} vξ2,vξ3 为式 (7) 中 ξ 2 , ξ 3 \xi_{2}, \xi_{3} ξ2,ξ3 处的粒子速度; rand 为 0 ∼ 1 0 \sim 1 01 之间的随机数。
(2)自然选择: 通过选择好的粒子来替换差的粒子, 增加粒子的收敛速度, 具体方式如下:
{ x ξ 4 = x ξ 1 v ξ 4 = v ξ 1 . , (10) \left\{\begin{array}{l} x_{\xi_{4}}=x_{\xi_{1}} \\ v_{\xi_{4}}=v_{\xi_{1}} . \end{array},\right. \tag{10} {xξ4=xξ1vξ4=vξ1.,(10)
x ξ 1 , x ξ 4 x_{\xi 1}, x_{\xi^{4}} xξ1,xξ4 为式 (7) 中 ξ 1 , ξ 4 \xi_{1}, \xi_{4} ξ1,ξ4 处的粒子位置; v ξ 1 , v ξ 4 v_{\xi 1}, v_{\xi 4} vξ1,vξ4 为式 (7) 中 ξ 1 , ξ 4 \xi_{1}, \xi_{4} ξ1,ξ4 处的粒子速度。

2.3 高斯扰动

随着算法的迭代,当全局最优值所在的区域远离当前种群的最优值时,粒子容易向错误的方向学习,此时粒子将极易陷入早熟。为了让算法跳出局部最优,在后期迭代时加入高斯扰动。如果当前适应值经过几次迭代后不再发生变化,则判断算法陷入早熟,这时加入高斯扰动,让粒子震荡,使其摆脱局部最优,因此在迭代初期加入高斯扰动策略。

WVPSO 算法流程如下所示:
Step1 随机初始化粒子的位置和速度, 设定相关参数;
Step2 根据式 (3) (5) 计算惯性权重 w w w, 学习因子 c 1 c_{1} c1 c 2 c_{2} c2;
Step3 计算粒子群的适应值, 根据适应值的绝对值从小到大按照式 (6) 方式排列, 并使用式 (7) 分割;
Step4 使用算术交叉式 (8) (9) 和自然选择式 (10) 策略将分割后的粒子进行重新替换;
Step5 根据式 (1) (2) 更新粒子速度和位置, 更新每个粒子历史最优位置 pbest 和群体最优值 gbest。 判断是否陷入早熟,如果陷入早熟则加入高斯扰动;
Step6 若满足终止条件, 则输出最优值, 否则转入步骤 (2), 进入下一次寻优。

3.实验结果

请添加图片描述

4.参考文献

[1]徐灯,傅晶,王文丰,章香,韩龙哲,方宗华,董健华.一种加权变异的粒子群算法[J].南昌工程学院学报,2021,40(01):51-56+82.

5.Matlab代码

6.Python代码

相关文章:

  • 带符号整数的除法与余数
  • Spring Cloud集成Dubbo实现RPC调用
  • 怎么开发自己的NFT平台
  • Android Context
  • 架构师的 36 项修炼第10讲:架构实战案例分析
  • 力扣每日一题-第63天-867. 转置矩阵
  • java基于ssm+vue的考研信息查询系统 elementui
  • 北大肖臻老师《区块链技术与应用》系列课程学习笔记[29]总结
  • C++设计模式之工厂模式(创建型模式)
  • 姿态分析开源工具箱MMPose使用示例:2d手势估计
  • MySQL分页查询
  • 第22篇 基础 (二十二)手把手教学 Qt 操作 ini 文件(详解)
  • Linux CentOS 8(用户管理)
  • 算法---找出数组中的所有孤独数字(Kotlin)
  • 【Git命令】git commit --amend
  • 网络传输文件的问题
  • CentOS7 安装JDK
  • Consul Config 使用Git做版本控制的实现
  • co模块的前端实现
  • git 常用命令
  • JS字符串转数字方法总结
  • oschina
  • python docx文档转html页面
  • Travix是如何部署应用程序到Kubernetes上的
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 动态规划入门(以爬楼梯为例)
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 聊聊redis的数据结构的应用
  • 新版博客前端前瞻
  • 自制字幕遮挡器
  • Android开发者必备:推荐一款助力开发的开源APP
  • Mac 上flink的安装与启动
  • 通过调用文摘列表API获取文摘
  • # 飞书APP集成平台-数字化落地
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (2020)Java后端开发----(面试题和笔试题)
  • (Java)【深基9.例1】选举学生会
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (转)重识new
  • ..回顾17,展望18
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .Net IE10 _doPostBack 未定义
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net 无限分类
  • .net下的富文本编辑器FCKeditor的配置方法
  • .net下简单快捷的数值高低位切换
  • .net中的Queue和Stack
  • .php文件都打不开,打不开php文件怎么办
  • .project文件
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @EnableWebMvc介绍和使用详细demo