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

基于竞争学习的粒子群优化算法-附代码

基于竞争学习的粒子群优化算法

文章目录

  • 基于竞争学习的粒子群优化算法
    • 1.粒子群优化算法
    • 2. 改进粒子群算法
      • 2.1 竞争学习机制
    • 3.实验结果
    • 4.参考文献
    • 5.Matlab代码
    • 6.Python代码

摘要:针对传统PSO算法容易陷入局部最优的问题,提出一种基于竞争学习的粒子群优化算法(CLPSO);在CLPSO中,首先通过动态计算粒子的适应度值将种群分成优选、合理和疏离3个子群;其次,根据3个子群中粒子的进化特性,为3个子群分别设计了不同的更新变异方式;然后,利用12个基准测试函数对算法的性能进行了验证;实验结果表明,所提的竞争学习策略能够有效克服经典PSO算法在处理复杂多峰问题时容易陷入局部最优的缺陷;

1.粒子群优化算法

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

2. 改进粒子群算法

2.1 竞争学习机制

本文提出新颖的竞争学习机制来指导粒子调 整飞行状态, 起到提高 PSO 处理复杂多峰优化问题 能力的目的。竞争学习机制的核心是将种群分类。 传统的 PSO 算法中粒子的更新方式单一, 所有的粒 子不论好坏共用同一种更新方式, 因此种群缺乏多 样性易陷入局部最优。本文所提算法则针对已分组 的 3 组粒子的各自特点, 设计三种独特的更新策略, 使每个粒子都能及时调整飞行状态, 向全局最优靠 近, 最终 3 个子群的输出形成新种群 P ( t + 1 ) \mathrm{P}(t+1) P(t+1)
在 CLPSO 中, 通过自适应分区操作, 每个粒 子都参与了适应度值竞争, 增强了种群的多样性, 扩大了粒子的搜索范围, 能够有效避免种群陷入局 部最优。下面具体介绍子群的划分依据和每个子群 的更新策略。
首先, 求出所有粒子的适应度值, 按照从小到 大排序, 再根据适应度值的平均值和标准差对种群 中粒子进行分组。平均值和标准差的具体计算公式 如下:
f ˉ = ∑ i = 1 M f i M (3) \begin{aligned} &\bar{f}=\frac{\sum_{i=1}^{M} f_{i}}{M} \end{aligned}\tag{3} fˉ=Mi=1Mfi(3)

σ = 1 M ∑ i = 1 M ( f i − f ˉ ) (4) \sigma=\sqrt{\frac{1}{M} \sum_{i=1}^{M}\left(f_{i}-\bar{f}\right)} \tag{4} σ=M1i=1M(fifˉ) (4)

其中, f i f_{i} fi 为第 i i i 个粒子的适应度值, N N N 为粒子个数,
f ˉ \bar{f} fˉ 为粒子适应度值的平均值, σ \sigma σ 为粒子适应度值的 标准差。
在划分子群时, 首先标记出最靠近平均适应度 值的粒子, 再以标准差为半径设定合理区粒子的范 围, 进一步得出疏离区粒子和优选区粒子。

针对不同的子群, 本文分别设计了不同的更新 机制。优选区粒子距离种群最优位置较近, 为了避 免陷入局部最优, 需要增强全局探索能力, 因此利 用改进的柯西公式设计了自我变异的更新机制。 变异后的柯西公式即为优选区粒子更新公式如下:
x i j p ( t + 1 ) = x i j p ( t ) ⋅ ( 1 + n t ⋅ C ( 0 , 1 ) ) (5) x_{i j}^{p}(t+1)=x_{i j}^{p}(t) \cdot\left(1+n_{t} \cdot C(0,1)\right) \tag{5} xijp(t+1)=xijp(t)(1+ntC(0,1))(5)

n t = t m a x − t t max ⁡ (6) n_{t}=\frac{t_{\mathrm{max}}-t}{t_{\max }} \tag{6} nt=tmaxtmaxt(6)

其中: n t n_{t} nt 为控制变异步长的参数, C ( 0 , 1 ) C(0,1) C(0,1) 是由柯西分 布函数产生的随机数。 x i j p x_{i j}^{p} xijp 表示优选区粒子的位置。 t max  t_{\text {max }} tmax  为最大迭代次数, t t t 为当前迭代次数。从公式(6) 可以看出, n t n_{t} nt 能够随着迭代次数的增加而自适应减 小, 起到了平衡优选区粒子的探索和开发的作用。 在进化前期, 需要设置一个较大的变异因子值, 使 得粒子能够跳出局部最优; 反之, 在进化后期, 需 要设置一个较小的变异因子值, 以加快算法的收敛 速度。因此, 本文采用了公式(6)所示的自适应策略。 疏离区粒子距离种群最优位置较远, 为了加快 向可能的全局最优解逼近的速度, 该区域粒子主要 是向优选区粒子进行学习。
疏离区粒子更新公式为:
x i j A ( t + 1 ) = c 1 x A i j ( t ) + c 2 ( x i j i j ( t ) − x p k j ( t ) ) + c 3 α ( f ˉ − x i j ( t ) ) (7) \begin{aligned} x_{i j}^{A}(t+1)=& c_{1} x^{A}{ }_{i j}(t)+c_{2}\left(x_{i j}{ }_{i j}(t)-x^{p}{ }_{k j}(t)\right) +c_{3} \alpha\left(\bar{f}-x_{i j}(t)\right) \end{aligned}\tag{7} xijA(t+1)=c1xAij(t)+c2(xijij(t)xpkj(t))+c3α(fˉxij(t))(7)
其中, c 1 、 c 2 c_{1} 、 c_{2} c1c2 c 3 c_{3} c3 为加速因子。从公式(7)可以看出, x i j A ( t + 1 ) x_{i j}^{A}(t+1) xijA(t+1) 是由三部分组成, 第一部分和标准 PSO 更 新公式的第一部分相同; 第二部分中 x P k j ( t ) x^{P}{ }_{k j}(t) xPkj(t) 为优选 区的粒子, 这部分表示疏离区粒子以优选区粒子为 学习对象进行状态更新; 第三部分引入新的参数 α \alpha α ( α \alpha α 为一个较小的正数), 这部分表示粒子更新过程 还受粒子中心位置的牵制, 作用是控制粒子的更新 范围, 增强算法的收敛性。
合理区粒子需要自适应平衡全局搜索和局部 开发, 因此为合理区粒子设计了竞争切换机制。合 理区粒子更新公式分两种情况:1)当种群末陷入局 部最优时, 合理区粒子采用传统的粒子更新方式(公 式 1 、 2 ) 1 、 2) 12) 来更新状态, 目的是保证种群向全局最优 解逐步逼近, 保证算法收玫性; 2)当种群陷入局部 最优时, 粒子当前位置的适应度值与上一次迭代产 生的适应度值相同, 即 f ( x i ) t − f ( x i ) t − 1 = 0 f\left(x_{i}\right)^{t}-f\left(x_{i}\right)^{t-1}=0 f(xi)tf(xi)t1=0 时, 合理区粒 子采用公式(5)来更新状态, 目的是通过自身变异增 强种群搜索能力, 增加跳出局部最优的机率。

3.实验结果

请添加图片描述

4.参考文献

[1]张钰,王蕾,周红标,赵环宇.基于竞争学习的粒子群优化算法设计及应用[J/OL].计算机测量与控制:1-9[2021-06-18].http://kns.cnki.net/kcms/detail/11.4762.TP.20210527.0930.008.html.

5.Matlab代码

6.Python代码

相关文章:

  • 猿创征文|忘记背后,努力面前【开学季flag】
  • 使用bloodyAD对域属性进行查询与修改
  • python——装饰器深入研究(二)
  • 前端面试谈:简历通用注意事项
  • Inveigh结合DNS v6配合NTLM Relay 的利用
  • Vue学习之--------路由的query、params参数、路由命名(3)(2022/9/5)
  • 华为交换机配置ACL
  • 离职总结(2022-9-5)
  • 计算机组成原理_Cache的替换算法
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • 如何快速提取设计地形等高线?
  • 详解MeerEVM:MeerDAG共识下的智能合约执行引擎
  • 上万字全面解读websocket(多种实现方案,含集群实现代码)
  • 【网络安全】XSS跨站脚本攻击专题讲解
  • 【栈和队列OJ】一、有效的括号
  • @jsonView过滤属性
  • 【347天】每日项目总结系列085(2018.01.18)
  • CAP理论的例子讲解
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • V4L2视频输入框架概述
  • yii2中session跨域名的问题
  • 成为一名优秀的Developer的书单
  • 大快搜索数据爬虫技术实例安装教学篇
  • 关于Java中分层中遇到的一些问题
  • 和 || 运算
  • 猴子数据域名防封接口降低小说被封的风险
  • 计算机常识 - 收藏集 - 掘金
  • 浏览器缓存机制分析
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 七牛云假注销小指南
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 想使用 MongoDB ,你应该了解这8个方面!
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​ubuntu下安装kvm虚拟机
  • (16)Reactor的测试——响应式Spring的道法术器
  • (30)数组元素和与数字和的绝对差
  • (C++17) std算法之执行策略 execution
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (一)RocketMQ初步认识
  • (原創) 物件導向與老子思想 (OO)
  • (转)nsfocus-绿盟科技笔试题目
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @Pointcut 使用
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [2]十道算法题【Java实现】
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [C++] Windows中字符串函数的种类
  • [C++核心编程](四):类和对象——封装
  • [codevs1288] 埃及分数
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战
  • [EFI]ASUS EX-B365M-V5 Gold G5400 CPU电脑 Hackintosh 黑苹果引导文件