麻雀算法SSA,优化VMD,适应度函数为最小包络熵,包含MATLAB源代码

article/2025/10/17 6:05:40

针对大家评论区给出的很多问题,作者一直都有关注,因此在这里又写了一篇文章,而且思路与这篇文章有不同之处,至于具体的不同之处放在下一篇文章了,大家感兴趣的可以移步观看,下一篇文章可以说是作者的呕心力作。

(4条消息) 白鲸优化算法优化VMD参数,并提取特征向量,以西储大学数据为例,附MATLAB代码_今天吃饺子的博客-CSDN博客https://blog.csdn.net/woaipythonmeme/article/details/131226447?spm=1001.2014.3001.5501好了,废话到此为止!接下来讲正文!

同样以西储大学数据集为例,选用105.mat中的X105_BA_time.mat数据。

首先进行VMD分解,采用麻雀优化算法(SSA)对VMD的两个关键参数(惩罚因子α和模态分解数K)进行优化,以最小包络熵为适应度值。其他智能优化算法同样适用,关键要学会最小包络熵代码的编写,网上的五花八门,代码中会对最小包络熵部分进行详细注释。

先上结果图:

实验过程中,会实时显示每次寻优后的最小包络熵值和VMD对应的两个最佳参数。本次寻优共100次(自己可以随意更改寻优次数)。

可以看到寻优100次后,最小包络熵为7.4036,对应两个vmd的最佳参数为122,8,其中惩罚因子为122,模态分解数为8。

 收敛曲线如下所示:

代码包含一个脚本,三个函数!

主函数脚本:其中惩罚因子α的范围是[100-2500],模态分解数K的范围是[3-10]。这里大家可以自行更改,但是一般建议是这样

clear all 
clc
addpath(genpath(pwd))
CostFunction=@(x) Cost(x);        % 适应度函数的调用,包络熵值,详情请看Cost
%设置SSA算法的参数
Params.nVar=2;                           % 优化变量数目
Params.VarSize=[1 Params.nVar];          % Size of Decision Variables Matrix
Params.VarMin=[100 3];      % 下限值,分别是a,k
Params.VarMax=[2500 10];        % 上限值
Params.MaxIter=30;       % 最大迭代数目
Params.nPop=30;        % 种群规模
[particle3, GlobalBest3,SD,GlobalWorst3,Predator,Joiner] =  Initialization(Params,CostFunction,'SSA');  %初始化SSA参数
disp(['***采用SSA算法开始寻优***'])
[GlobalBest,SSA_curve] =  SSA(particle3,GlobalBest3,GlobalWorst3,SD,Predator,Joiner,Params,CostFunction);  %采用SSA参数优化VMD的两个参数
fMin = GlobalBest.Cost;
bestX = GlobalBest.Position;
%画适应度函数图
figure
plot(1:Params.MaxIter,SSA_curve,'Color','r')
title('Objective space')
xlabel('Iteration');
set(gca,'xtick',0:10:Params.MaxIter);
ylabel('Best score obtained so far');
legend('SSA优化VMD')
display(['The best solution obtained by SSA is : ', num2str(round(bestX))]);  %输出最佳位置
display(['The best optimal value of the objective funciton found by SSA is : ', num2str(fMin)]);  %输出最佳适应度值

关于VMD函数的详解和相关图像的绘制,可以参考这个文章:(5条消息) VMD分解,matlab代码,包络线,包络谱,中心频率,峭度值,能量熵,近似熵,包络熵,希尔伯特变换,包含所有程序MATLAB代码,-西储大学数据集为例_今天吃饺子的博客-CSDN博客

完整代码获取:下方卡片回复关键词:SSAVMD

觉着不错的给博主留个小赞吧!您的一个小赞就是博主更新的动力!谢谢!


http://chatgpt.dhexx.cn/article/jY4wTpBw.shtml

相关文章

计算适应度函数(目标函数)(单目标)

适应度函数 function fitness = CacFitNess(Energy,Time,MissError,overSpeed,Jerk) %UNTITLED 计算适应度函数 caculation fitness % 能耗Energy % 时间Time % 舒适度Jerk % 超限速overSpeed % 停车误差MissError global DESINTIME EMAX; y=zeros(1,5);%% 1 能耗 if E…

进化算法——昂贵、有噪声与动态适应度函数

1.昂贵适应度函数 在很多实际问题中,对适应度做一次评价会需要几分钟、几小时、几天甚至更长时间的计算或实验。我们在这里讨论如何减少适应度评价所需的时间以便降低进化算法对计算量的要求。 实际问题涉及的适应度函数常常包含下列的一种或多种特征:…

经典算法研究系列:七、深入浅出遗传算法,透析GA本质

经典算法研究系列:七、遗传算法初探 ---深入浅出、透析GA本质 作者:July 二零一一年一月十二日。 本文参考:维基百科 华南理工大学电子讲义 互联网 ------------------------------------------------------------------------------- 一、初探遗传算法…

适应度函数及遗传操作

本文转载自:http://blog.csdn.net/b2b160/article/details/4680853/ 这篇文章所举的例子非常给力,摘自《遗传算法原理与应用》,至少我是看过之后就明白了很多概念~ 首先,什么是遗传算法? 遗传算法是为那些难以找到传统…

遗传算法(三)——适应度与选择

适应度(fitness) 含义: 个体的适应度(fitness)指的是个体在种群生存的优势程度度量,用于区分个体的“好与坏”。适应度使用适应度函数(fitness function)来进行计算。适应度函数也叫…

遗传算法适应度函数的计算原理

遗传算法: 适应度函数: FitnVranking(ObjV) ranking函数分两步操作: (1)对个体的目标值ObjV进行由小到大的排序 (2)按照排序的值,利用计算公式 其中:Position是第一步…

SQL 分组统计去重有条件的过滤

见字如面,如标题拆分: 分组 GROUP BY field_name统计 COUNT(field_name)去重 DISTINCT field_name条件过滤 CASE WHEN age > 18 THEN age END 示例: 前序: 表结构 CREATE TABLE data_table_name (id int(11) …

mysql sql 分组求和函数_SQL分组函数group by和聚合函数(COUNT、MAX、MIN、AVG、SUM)的几点说明...

1 分组聚合的原因 SQL中分组函数和聚合函数之前的文章已经介绍过,单说这两个函数有可能比较好理解,分组函数就是group by,聚合函数就是COUNT、MAX、MIN、AVG、SUM。 拿上图中的数据进行解释,假设按照product_type这个字段进行分组,分组之后结果如下图。 SELECT product_ty…

SQL分组取最大值的方法

一、业务需求 1.1.数据表展示 1.2.查询要求 要求查询所有字段,并按iceName,orderPath,exceptionType分组,在分组时取systemTime值最大的那条数据 注:本文适用于查询多字段的查询,单纯的 select MAX(字段A) 或select B,MAX(字段…

SQL分组后将不存在的组记为0

说明 最近遇到这么一个需求&#xff1a;统计区间在0-2000,2000-3000,3000-4000,4000-5000,5000工资的人数。 快速开始 数据如下&#xff1a; 开始看到这个问题&#xff0c;想都没想就开始写了下面的代码&#xff1a; SELECT casewhen salary < 2000 then [0, 2000)when …

SQL 分组条件深入剖析

问题 在 stackoverflow 网站上看到这样一个 SQL 分组条件的需求&#xff0c;需求看似挺简单&#xff0c;但能把 SQL 写正确对于新手来说也不容易&#xff0c;我们拿过来深入剖析一下&#xff0c;数据如下&#xff1a; 需求是查找只有Ready 状态的设备。 解答 自然思路&#xff…

SQL分组排序函数(组内分别排序)

建表并插入数据 -- 部门表 create table dept( deptno int primary key auto_increment, -- 部门编号 dname varchar(14) , -- 部门名字 loc varchar(13) -- 地址 ) ; -- 员工表 create table emp( empno int primary key auto_increment,-- 员工编号 …

sql 分组 行列转换

sql 分组 & 行列转换 文章目录 sql 分组 & 行列转换1、groupby&#xff08;配合组合函数使用&#xff09;2、Sql的行列转换 - 纵横表1&#xff09;纵表转横表2&#xff09;横表转纵表 sql语句教程参考W3C School - SQL 教程 就够了 1、groupby&#xff08;配合组合函数…

SQL:分组数据

分组数据&#xff1a; A. SQL Server Group By语句 Group By 从字面意义上理解就是根据“By”指定的规则对数据进行分组&#xff0c;所谓的分组就是将一个“数据集” 划分成若干个“小区域”&#xff0c;然后针对若干个“小区域”进行数据处理。 以下是 GROUP BY 子句的语…

SQL语言中的分组数据

&#xff08;1&#xff09;group by子句 group by 根据by指定的规则对数据进行分组。 分组&#xff1a;即将一个“数据集”划分成若干个“小区域”&#xff0c;再对若干个“小区域”进行数据处理。 语法&#xff1a; group by 子句为列中的每个值组合生成一个组。 group by子…

SQL分组指南

目录 什么是SQL分组&#xff1f; SQL GROUP BY和Sum 排序分组结果 HAVING和GROUP BY 包含多个表的GROUP BY 按SUM()排序 带有表达式的GROUP BY SQL GROUP BY与DISTINCT 结论 什么是SQL分组&#xff1f; 在SQL中&#xff0c;分组是唯一的列值组合。当查询具有GROUP BY…

单例模式的使用和应用场景

1.概念 标题单例模式&#xff1a;单例指的是单实例&#xff0c;一个类中有且仅有创建一个实例 单例模式的应用场景&#xff1a;windows的任务管理器(不可打开两次吧)、回收站等 单例模式应用一般发现在以下条件下&#xff1a; servlet单例、struts2多例、springmvc单例 &…

单例模式实战应用

理论 什么是单例模式 保证整个系统中一个类只有一个对象的实例&#xff0c;实现这种功能的方式就叫单例模式 常用的 service 和 dao 层的对象通常都是单例的&#xff0c;而多例则指每个请求用一个新的对象来处理&#xff0c;比如 action spring 中的 bean 和 spring mvc 中…

单例模式php应用场景,php单例模式 使用场景和使用方法

一个类只有一个对象实例 1、含义 作为对象的创建模式&#xff0c;单例模式确保某一个类只有一个实例&#xff0c;而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本&#xff0c;而是会向单例类内部存储的实例返回一个引用。 2、单例模式的三个要点&#xff1a…

Java设计模式及应用场景之《单例模式》

文章目录 一、单例模式定义二、单例模式的结构和说明三、懒汉式和饿汉式的实现1、懒汉式2、饿汉式 四、懒汉式和饿汉式的优缺点五、双重检查加锁方式的实现六、类级内部类方式的实现七、枚举方式的实现 (最佳方式)八、单例模式的应用场景 一、单例模式定义 保证一个类只能有一个…