速成!|量子粒子群优化算法及其实现(Matlab)

news2024/9/27 21:29:40

在这里插入图片描述
作者在前面的两篇文章中介绍了标准粒子群及其变体,**由于PSO算法需要设定的参数(惯性因子w,学习因子 c1,c2)太多,不利于找到待优化模型的最优参数,而且粒子位置变化缺少随机性,容易陷入局部最优。**针对这些问题,本文提出一种性能更高的优化算法—量子粒子群优化算法(Quantum Particle Swarm Optimization,QPSO),下面将详细介绍其理论与实现。

00 文章目录

1 量子粒子群优化算法
2 代码目录
3 问题导入
4 仿真
5 源码获取

01 量子粒子群优化算法

量子粒子群优化算法取消了粒子的移动方向属性,相比较于粒子群算法,粒子位置的更新跟该粒子之前的运动没有任何关系,是量子编码与量子门计算进行更新,这样就增加了粒子位置的随机性,避免发生局部过早收敛。

1.1 量子粒子群优化算法原理

量子粒子群算法控制参数少,只有一个,且收敛度快,具有良好的性能。对于标准粒子群算法,粒子的位置和速度共同决定了粒子的运动轨迹,在牛顿力学中粒子沿着确定的轨迹运动。在量子力学中,轨迹项是没有意义的,因为粒子的位置和速度根据测不准原理无法同时确定。因此 QPSO 中粒子的运动行为与 PSO大相径庭。在量子粒子群算法中,粒子是由薛定谔方程描述 ψ( x, t),而不是标准粒子群算法的位置和速度。为保证算法的收敛需满足下式,每一粒子要收敛于各自的 p 点,对任意粒子i有p (pi1 , pi2 ,…, pid ),pid 是第i个粒子在第d维的值,其中φij(t)为0和1之间的随机函数。在这里插入图片描述

QPSO 算法引入的新名词 mb来达到优化粒子群全局最优的搜索过程,mb表示pbest的平均值,即平均粒子历史最优位置,公式为:
在这里插入图片描述

其中,Ms是粒子群的个数;j 为粒子的第 j 维其取值范围为j∈[1,d]。可得全局极值的平均值 La 的计算公式为:在这里插入图片描述

进而可得到粒子的进化方程为:在这里插入图片描述

u和k是在[0,1]范围产生的均匀随机数,其中 α 是收缩-扩张因子,是量子粒子群唯一的参数,调节它的值能控制算法的收敛速度,但由于当α 固定时,算法对粒子群规模和最大迭代次数都是敏感的,如果采用时变的α,则算法性能将获得提高,故对于收缩-扩张因子的选择对于性能是有影响的。综上可以看出,量子粒子群算法具有调节参数少、收敛速度快的优点。

1.2 收缩-扩张因子

若采用固定的收缩-扩张因子,则算法的鲁棒性会降低. 通常采用自适应变化的收缩-扩张因子,可以 在迭代后期改善算法局部搜索的精度,本文选取线性递减策略自适应的修改收缩-扩张因子:

其中: Kmax为最大迭代次数; α0, α1为预设值,一般取 α0 = 0.5, α1 = 1。
当然,收缩-扩张因子还有许多可选变式,这篇作为量子粒子群的引入文章先介绍其中一种,后续会介绍其它变式。
收缩-扩张因子随着迭代次数的变化关系如图:在这里插入图片描述

02 代码目录

首先运行main_pso.m与main_qpso.m,再运行compare.m即可看到迭代对比在这里插入图片描述

03 问题导入

为验证算法的性能,采用Benchmark中的1个常用的测试函数Rastrigrin函数:在这里插入图片描述


将该函数取负,则适应度为越大越佳。在这里插入图片描述

该函数为多峰函数,收敛于(0,0,…,0)。

04 仿真

将量子粒子群与标准粒子群通过Rastrigrin函数进行对比,得到如下结果:在这里插入图片描述

显然,量子粒子群的收敛速度和全局寻优能力都强于标准粒子群,而标准粒子群则陷入了局部最优解。
其中,QPSO的取值以及适应度为
在这里插入图片描述

PSO的取值以及适应度为:

在这里插入图片描述

05 源码获取

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 源码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                            https://mbd.pub/o/bread/ZJqclpxr
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 源码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

部分源码:

%% 量子粒子群算法应用于函数寻优,适应度为越大越好
% QPSO算法取消了粒子的移动方向属性 即惯性因子w 学习因子c1,c2

%% 粒子群参数
popsize = 20;% 群体规模
MAXITER = 300;% 最大迭代次数
dimension = 2;%问题维数
irange_l = [-2,-2];%位置初始化下界
irange_r = [2,2];%位置初始化上界
xmax = 0.5;% 搜索范围上界
xmin = -0.5;%搜索范围下界
M = (xmax - xmin)/2;%搜索范围的中值
sum1 = 0;
st = 0;
runno= 1;%算法运行x轮
yy2 = zeros( runno,MAXITER);%记录每一轮中每一迭代步的最好适应值

%% 初始化
T= cputime;%记录CPU时间
x = ( irange_r- irange_l) .* rand( popsize,dimension,1) + irange_l; %初始化粒子当前位置
pbest = x;%将粒子个体最好位置初始化为当前最好位置
gbest = zeros( 1,dimension) ;%初始化全局最好位置变量
for i= 1 : popsize%计算当前位置和个体最好位置的适应值
    f_x(i) = RA(x(i, : ));
    f_pbest(i)= f_x(i);
end

如果这篇文章对你有帮助或启发,可以点击右下角的 (ง •̀_•́)ง(不点也行),若有定制需求,可私信​作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

花了 44 块钱,实现 Java 发送短信功能

个人项目:社交支付项目(小老板) 作者:三哥(https://j3cod3.cn) 本篇为从 0 到 1 的一个,用 Java 对接腾讯短信发送功能的一篇流程文章。而标题中的 44 大洋则是用来购买短信套餐,当然…

怎么用21zui工具为图片添加水印

有些小伙伴工作内容是推荐公司产品,在平台中发布产品图片的时候,应该为图片添加专属水印(文字水印或者logo水印),为什么要这么做呢?因为添加水印可以保护我们的图片不被盗用,同时也有助于推广我…

(24)目标检测算法之YOLOv6 (2)量化与部署详解

目标检测算法之YOLOv6 (2)量化与部署详解 详解量化训练方式 详解部署方法:onnx 、openvnio、 tensorrt YLOLOv6目前发布的模型:从模型大小方面来看,可分为微小型(Nano),小(Small),中(Medium),大模型(Larg…

【单周期CPU】LoongArch | 32位寄存器DR | 32位的程序计数器PC | 通用寄存器堆Registers | 32位RAM存储器

前言:本章内容主要是演示在vivado下利用Verilog语言进行单周期简易CPU的设计。一步一步自己实现模型机的设计。本章先介绍单周期简易CPU中基本时序逻辑部件设计。 💻环境:一台内存4GB以上,装有64位Windows操作系统和Vivado 2017.…

黑马微信小程序登录弹窗问题与解决的说明

1.问题 1.1开发者工具报错 [getFuzzyLocation] is not authorized如何解决? 1.2弹窗问题 2.解决方法 2.1开发工具报错问题 首先登录微信公众平台,找到开发管理。如下图 然后开通wx.getFuzzyLocation 申请模版,通过速度很多,…

24小时不定时价格监测如何做到

在做电商平台的数据监测时,品牌需要对线上监测的数据进行不定时监测,这是因为品牌做价格监测的目的是为了管控渠道,如果对店铺只能在特定的时间进行监测,那对于其他时间段的低价行为将不被发现,这也会使品牌渠道管控的…

【Redis】配置

🎯Redis 配置 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf(Windows 名为 redis.windows.conf)。 1、查看配置 语法如下通过 config get 命令查看或设置配置项。 CONFIG GET 配置的名字 使用 * 号获取所有配置项 127.0.0.1:6379>…

Parsing error: Unexpected token :

如果你创建的是Vue3的项目还报这个错误的话,很可能就是.eslintrc.js配置的问题。 我为了省事把vue2项目的.eslintrc.js复制到vue3的项目了。。 .eslintrc.js module.exports {root: true,env: {node: true,},extends: [plugin:vue/vue3-essential,eslint:recomm…

【哈士奇赠书活动 - 29期】- 〖人工智能与ChatGPT〗

文章目录 ⭐️ 赠书 - 《人工智能与ChatGPT》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《人工智能与ChatGPT》 ⭐️ 内容简介 人们相信人工智能可以为这个时代的技术带来突破,而ChatGPT则使这种希望成为现实。现在&#xff0…

自定义View实战《弹幕》

自定义View实战《弹幕》 前言一、步骤讲解二、缓存优化三、弹幕框架DanmakuFlameMaster介绍DanmakuFlameMasterDanmakuFlameMaster的使用 四、初步实现的完整代码总结 前言 前面已经学习了自定义的View《渐变色的文字》是继承View的。现在我们在继承ViewGroup来实现我们的《弹…

C++【初识哈希】

✨个人主页: 北 海 🎉所属专栏: C修行之路 🎃操作环境: Visual Studio 2019 版本 16.11.17 文章目录 🌇前言🏙️正文1、哈希思想2、哈希函数2.1、哈希函数的设计原则2.2、常见的哈希函数 3、哈希…

曹操最有名的4首诗

在中国帝王级的人物中间,真正称得上诗人的,曹操必定是最杰出一个。 曹操简介: 曹操(155年-220年正月庚子),字孟德,一名吉利,小字阿瞒,沛国谯(今…

Redis实现用户签到

用户签到 现在许多的APP或者网上应用为了提高用户的活跃度,都会设置一个每日签到的活动,签到完成后会给予一定的奖励,从而达到其目的。 而记录用户的签到信息可以使用如下一张数据库表来进行记录。 在用户数量并不多的情况下,数…

排序算法--冒泡排序(Java语言)

冒泡排序(Bubble Sort)是啥? 冒泡排序是一种简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素…

Android:Lifecycle

整体架构 LifecycleOwner Lifecycle持有者 在ComponentActivity中new出来,所以Activity和Fragment自带 实现了LifecycleOwner接口的类 可以获得生命周期信息类Lifecycle Fragment和Activity都已经实现了该接口 Lifecycle Registry 生命周期注册器 可以提交生命周…

栈板识别的思考

0.啰嗦几句 最近公司又变动了,所以又做了一个关于视觉的项目。简单说就是栈板定位,主要应用在AGV叉车上,当然这一套流程基本适用于所有的视觉项目。主要是看算法的设计和一些人为的经验。 1.结果图 可以看到在图像上3个托盘都分割出来了&am…

青少年机器人技术一级核心知识点:机械结构及模型(三)

随着科技的不断进步,机器人技术已经成为了一个重要的领域。在这个领域中,机械结构是机器人设计中至关重要的一部分,它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说,了解机械结构的基础知识,掌…

2024考研408-计算机组成原理第七章-输入输出系统学习笔记

文章目录 前言一、IO系统基本概念1.1、输入/输出系统基本概念1.1.1、现代计算机的结构1.1.2、常见的I/O设备1.1.3、主机与I/O设备如何进行交互?(认识I/O接口)1.1.4、I/O系统的基本组成(I/O硬件、I/O软件)本节回顾 1.2、…

标配8155,智驾延续「高低配」,小鹏G6能否挽回颜面?

对于小鹏汽车来说,G6就是最后的尊严。 高工智能汽车研究院监测数据显示,2023年1-5月,小鹏汽车交付量为3.22万辆,同比上年同期下滑39.81%,是「蔚小理」三家新势力中唯一下滑的一家。 去年上市的G9(何小鹏口中…

基于声音信号的工业设备异常检测

异常检测主要目标是将异常事件与正常事件区分开来,因此才有了“异常”一词。本文将介绍基于声音信号的工业机械异常检测,使用的数据集是MIMII声音数据集,该数据集很容易在网上获得。 异常检测的任务可以通过多种方式实现。其中最简单的一种方…