自适应混沌粒子群算法(Matlab)

news2024/11/18 16:54:38

在这里插入图片描述

在这里插入图片描述

在上一个博客中作者介绍了标准粒子群及其实现,并给出了许多改进方向,那么从这一期开始就会陆续更新关于粒子群的改进,这一期的改进主要有三个方向,1.混沌初始化粒子群
2 非线性调整惯性权重
3 学习因子动态变化。

下面将对这些改进策略进行详细阐述。

00 文章目录

1 粒子群改进策略
2 代码目录
3 问题导入
4 仿真
5 源码获取

01 粒子群改进策略

粒子群算法在解决复杂优化问题方面展现出了较大的优势.但和其它智能算法一样,粒子群算法也具有较难克服的缺陷,例如早熟问题等。

PSO算法中惯性权重、学习因子等参数的取值对算法的收敛性能起着非常重要的作用,而研究者对于这些参数大都按常规取值,这样势必会影响算法的收敛性和收敛速度,同样初始化也对其精度和速度有较大影响,解空间不均匀的分布往往会陷入局部最优。

1.1 混沌初始化

传统粒子群算法一般采用随机初始化来确定初始种群的位置分布,由计算机生成随机数,再根据下式随机生成各个粒子的初始位置。在这里插入图片描述

Positions 代表生成的粒子位置;rand 代表生成的 随机数,取值范围为[0,1];ub,lb 分别为解空间的上下界。

通常这种随机初始化能生成每次不一样的初始种群,使用起来比较方便。但也存在弊端,就是初始粒子在解空间的分布并不均匀,常常遇到局部区域的粒子过于密集,同时一部分区域的初始粒子却过于稀疏。这样的情况对优化算法的前期收敛是非常不利的,对于容易陷入局部最优的群体优化算法,可能导致收敛速度下降甚至无法收敛的情况发生。

而混沌初始化则可以有效地避免这些问题。混沌 初始化具有随机性、遍历性和规律性的特点,是在一定范围内按照自身规律不重复地遍历搜索空间,这样生成的初始种群在求解精度和收敛速度方面有着明显改进。 本文中的混沌初始化选用 Logistic混沌模型,其公式如下:在这里插入图片描述

其中,lamda为混沌模型映射参数,若μ∈[3.57,4],则该系统处于混沌态;若μ=4,系统处于完全混沌状态。一般取μ为4。
上述两种初始化方法生成的解空间分布图如下:在这里插入图片描述

可以看到,经混沌初始化后的解空间分布较之随机初始化更加均匀,没有过于密集或过于稀疏的区域。

1.2 自适应惯性权重

惯性权重因子影响PSO算法性能,其值较大时有利于全局范围的搜索,较小的权重值有利 于加快算法的收敛速度,对于局部的细致开发益处较大。

为了平衡PSO算法的全局搜索能力和局部改良能力,采用非线性的动态惯性权重系数公式,其表达式为:在这里插入图片描述

其中,f表示粒子实时的目标函数值﹐favg和fmin分别表示当前所有粒子的平均值和最小目标值。从上面公式可以看出,惯性权重随着粒子目标函数值的改变而改变。当粒子目标值分散时,减小惯性权重;粒子目标值一致时,增加惯性权重。

1.3 动态学习因子

在标准粒子群算法中,c1、c2为学习因子,一般取固定的值,学习因子c1表示粒子对自身的思考,即粒子从自身学习的部分;学习因子c2 体现了粒子的社会性,即粒子向全局最优粒子学习的特性.

粒子群算法进行过程中,算法开始时应该在空间广泛搜索,增加粒子多样性,而在后期应该注重算法的收敛性,体现在算法中应该是学习因子c1,c2分别随着算法的进行其权值是变化的而不应该固定.

因此,为了防止粒子在进化初期快速聚集在局部最优解周围,使粒子在全局领域内大范围的搜索,让c1取较大的值,c2取较小的值。在搜索后期为了便于让粒子快速、准确地收敛于全局最优解,提高算法收敛速度和精度,设置c1取较小的值,c2取较大的值。因此本文构造C1为单调递减函数,构造C2为单调递增函数,二者表达式如下:在这里插入图片描述

其中t为当前迭代次数。Tmax为粒子群最大迭代次 数,由上可知,通过动态调整学习因子的取值,使得进化 初期,群体能在较短时间内快速搜索到最优值,进化后期能够快速准确收敛到最优解。
C1,C2函数图像如下:在这里插入图片描述

02 代码目录

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

03 问题导入

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


将该函数取负,则适应度为越大越佳。

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

04 仿真

将上述的改进策略加入标准粒子群中,并通过Rastrigrin函数进行对比,得到如下结果:在这里插入图片描述

其中,IPSO的取值以及适应度为:在这里插入图片描述

PSO的取值以及适应度为:在这里插入图片描述

显然,PSO陷入局部最优,且很难跳出局部解。自适应混沌粒子群算法性能更佳。

05 源码获取

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
https://mbd.pub/o/bread/ZJqbmpdv
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

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

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

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

相关文章

网络犯罪分子在新的代理劫持活动中劫持脆弱的SSH服务器

一个活跃的金融活动针对的是脆弱的SSH服务器,以隐蔽地将它们纳入一个代理网络。 "Akamai研究员Allen West在周四的一份报告中说:"这是一个活跃的活动,攻击者利用SSH进行远程访问,运行恶意脚本,隐蔽地将受害…

正点原子stm32HAL库学习_基础篇_1

单片机简介 STM32芯片分类 ST中文社区网:https://www.stmcu.org.cn/ ST官网:https://www.st.com/content/st_com/en.html STM32命名规则 数据手册 在设计STM32F103 原理图的时候,我们需要用到一个非常重要的文档:STM32F103 数据 …

Tomcat的概念及部署

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、Tomcat的概述1.tomcat 概述2.tomcat 的主要特点 二、Tomcat的核心组件1.核心组件关系图2.核心组件的介绍2.1 Web容器2.2 servlet容器2.3 JSP容器2.4 Tomcat核心…

7、Redis复制(replica)

Redis复制(replica) 是什么? 就是主从复制,master以写为主,Slave以读为主。当master数据变化的时候,自动将新的数据异步同步到其它slave数据库 读写分离 容灾恢复 数据备份 水平扩容支撑高并发 案例演示 架构说明 一个Master两个…

SQL-每日一题【182.查找重复的电子邮箱】

题目 表: Person 编写一个 SQL 查询来报告所有重复的电子邮件。 请注意,可以保证电子邮件字段不为 NULL。 以 任意顺序 返回结果表。 查询结果格式如下例。 示例 1: 解题思路 前置知识 count() 1.count(*) :统计所有的行数&a…

KMeans算法实现图像分割

1. Kmeans聚类算法简介 由于具有出色的速度和良好的可扩展性,Kmeans聚类算法算得上是最著名的聚类方法。Kmeans算法是一个重复移动类中心点的过程,把类的中心点,也称重心(centroids),移动到其包含成员的平均位置,然后重…

数据结构和算法-2023.06.29

斐波那契数列 初衷💁🏻 说来也是惭愧,入行这么久了,一直没有仔细去思考为什么去做这个,之前一直游想法去好好学学数据结构和算法,一直苦于是重点学习Docker、K8S、JVM,多线程,或者是…

SpringBoot整合Redis缓存管理

1. 添加 Spring Data Redis 依赖启动器。在 chapter06 项目的 pom.xml 文件中添加 Spring Data Redis 依赖 启动器。 <!-- 引入整合 Redis 缓存的依赖启动器 --> <dependency> <groupId> org.springframework.boot </groupId> <artifactId>…

【单片机】STM32F103C8T6单片机,OLED 1.3寸 IIC OLED,STM32F103单片机,I2C OLED

文章目录 main.coled.coled.hOLED_Font.h 效果&#xff1a; main.c #include "sys.h" #include "usart.h" #include "OLED.h"int main(void) {NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* 设置NVIC中断分组2:2位抢占优…

C/C++图形库EasyX保姆级使用教程(一) Microsoft Visual Studio 2022和EasyX的下载及安装使用

C/C图形库EasyX保姆级使用教程 第一章 Microsoft Visual Studio 2022和EasyX的下载及安装使用 文章目录 C/C图形库EasyX保姆级使用教程前言一、图形库【EasyX】是什么&#xff1f;二、2.EasyX图形库和Microsoft Visual Studio 2022的安装1.Microsoft Visual Studio 2022&#…

详细讲述,人工智能、机器学习、深度学习、神经网络、自然语言处理、AIGC之间的关系...

人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是计算机科学中一个庞大的研究领域&#xff0c;旨在为计算机创造类似人类智能的功能&#xff0c;例如学习、推理、解决问题、识别模式、理解自然语言等。AI的核心目标是使计算机能够执行那些通常需要人类…

sql读取数据直接存成pandas

导包 import pymysql import pandas as pd获取mysql链接 def get_db():#打开数据库连接db pymysql.connect(host*.*.*.*,port3306,user "wws",passwd "yourpasswd",db "youdb")return db db get_db()写sql 读数据保存 sql "select…

【技术分享】RK356X Debian/Ubuntu 系统安装Docker

本文基于IDO-SBC3528主板演示Debian/Ubuntu 系统任何安装Docker&#xff0c;方法适用于RK3568全系列产品。 IDO-SBC3528-V1采用RK3568四核64位开发的智能主板&#xff0c;可作为RK3568开发评估板&#xff0c;支持8G大内存&#xff1b;支持PCIE2.0接口&#xff0c;可扩展大容量…

数据结构——直接插入排序与希尔排序(图示+文字详解)

内容包括&#xff1a;排序的代码实现&#xff0c;排序原理详解&#xff0c;代码详解&#xff0c;图示 part 1&#xff1a;直接插入排序 代码实现&#xff1a; void InsertSort(int* a, int n) {int i 0;for (i 0; i < n - 1; i){int end i;int tmp a[i 1];while (en…

【已解决】ubuntu下谷歌浏览器不能上网(而火狐可以上网)

现象&#xff1a;ubuntu18.04安装的谷歌浏览器chrome不能上网(谷歌和百度都不可以)&#xff0c;而火狐可以访问谷歌和百度。 问题解决[参考]&#xff1a;将HTTPS Proxy的代理端口号也设为7890就ok了

thinkphp5---安装到宝塔出现Warning: require(): open_basedir错误

centos系统&#xff0c;nginxphp7.3 使用thinkphp5安装到宝塔的linux上&#xff0c;出现以下错误&#xff1a; Warning: require(): open_basedir restriction in effect. File(/www/wwwroot/c 解决办法&#xff1a;找到 php.ini 打开 open_basedir 修改为&#xff1a; /www/…

4.原子操作类:AtomicLong、LongAdderLong、Accumulator

JUC包中有AtomicInteger、AtomicLong和AtomicBoolean等原子性操作类&#xff0c;它们原理类似&#xff0c;下面以AtomicLong为例进行讲解。 AtomicLong 底层的操作自增自减都用Unsafe类中的getAndAddLong方法&#xff08;获取本类内存偏移值&#xff09;实现的&#xff0c;get…

UE4/5数字人Metahuman与Style3D的使用【二、布料模拟】

目录 鼠标点击布料模拟&#xff1a; 让布料模拟可以跟着动画序列&#xff1a; 有穿模情况&#xff1a; 多件衣服替换&#xff1a; 关卡序列中使用缓存&#xff1a; 效果&#xff1a; UE4/5数字人Metahuman与Style3D的使用【一、Style3DAtelier软件制作smd格式衣服并导入ue】…

Apikit 自学日记:保存、使用测试用例

API测试用例是SaaS版本企业版才能使用的功能&#xff0c;免费版用户可通过付费升级后使用。 API管理应用中的测试用例管理涉及到两个场景&#xff1a;单接口测试用例管理 和 多接口测试用例批量测试。 一、单接口测试用例管理 功能入口&#xff1a;API管理应用 / 选中某个项目…

基于Java+SSM+Vue的高校校园点餐系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…