灰狼算法优化ICEEMDAN参数,四种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵...

今天给大家带来一期由灰狼算法优化ICEEMDAN参数的MATLAB代码。

优化ICEEMDAN参数的思想可以参考该文献:

[1]陈爱午,王红卫.基于HBA-ICEEMDAN和HWPE的行星齿轮箱故障诊断[J].机电工程,2023,40(08):1157-1166.

文献原文提到:由于 ICEEMDAN 方法的分解效果取决于白噪声幅值权重(Nstd)和噪声添加次数(NE),因此,笔者采用智能优化算法对 ICEEMDAN 的2个参数进行优化,适应度函数采用包络熵,当适应度值越小,则代表分 解的效果越好;通过优化和更新,来确定最终的最佳参数组合(Nstd, NE)。

本期文章以西储大学数据集为例,选用105.mat中的X105_BA_time.mat数据中1000个数据点。没有数据的看这篇文章。西储大学轴承诊断数据处理,matlab免费代码获取

选取四种适应度函数进行优化,任意切换,采用灰狼算法优化ICEEMDAN,优化30次,种群数量为10。噪声幅值权重的优化范围设置为[0.15,0.6],噪声添加次数的优化范围为[50,600],以此确定ICEEMDAN的白噪声幅值权重(Nstd)和噪声添加次数(NE)。

四种适应度函数分别是:最小包络熵,最小样本熵,最小信息熵,最小排列熵,代码中可以一键切换。

1.最小包络熵作为适应度函数

6c6436f5f52bdf4d1925c9fab477653f.png

优化过程如下:

4be331530e00abdebd3453f3b388a733.png

结果如下:

144fed6140ea8b7b96e9fc965236a9e1.png

2.最小样本熵作为适应度函数

42aac5185aa5dd8b026469e35216dfa2.png

a8a382ab57ecf5cfd04648c8728dadfe.png

3.最小信息熵作为适应度函数

78c7ed9370419cd972cd7cc01424aacc.png

8755403b6a75bfef8548b8b6c350ba3f.png

4.最小排列熵作为适应度函数

e1b5098973d1ea752800dfb17a168e4b.png

71b5b7b525bb0b5ac33252321279d43a.png

代码:

%% 以最小包络熵、最小样本熵、最小信息熵、最小排列熵为目标函数(任选其一),采用GWO算法优化ICEEMDAN,求取ICEEMDAN最佳的两个参数
clear
clc
close all
xz = 1;  %xz, 选择1,以最小包络熵为适应度函数,
% 选择2,以最小样本熵为适应度函数,
% 选择3,以最小信息熵为适应度函数,
% 选择4,以最小排列熵为适应度函数,
if xz == 1  
    fobj=@EnvelopeEntropyCost;          %最小包络熵
elseif xz == 2
    fobj=@SampleEntropyCost;            %最小样本熵
elseif xz == 3  
    fobj=@infoEntropyCost;              %最小信息熵
elseif xz == 4
    fobj=@PermutationEntropyCost;       %最小排列熵
end


%% 选取数据
load 105.mat
da = X105_DE_time(6001:7000); %这里选取105的DEtime数据,注意这里替换为自己的数据即可,数据形式为n行*1列,列数必须为1。


%% 设置参数
lb = [0.15 50];    %噪声幅值权重的优化范围设置为[0.15,0.6],噪声添加次数的优化范围为[50,600]
ub = [0.6 600];  
dim = 2;            % 优化变量数目
Max_iter=30;       % 最大迭代数目
SearchAgents_no=10;       %种群规模


%% 调用GWO函数
disp('代码运行时间较长,请耐心等待!')
[fMin , bestX, Convergence_curve ] = GWO(SearchAgents_no,Max_iter,lb,ub,dim,fobj,da);


%% 画适应度函数曲线图,并输出最佳参数
figure
plot(Convergence_curve,'Color',[0.9 0.5 0.1],'Marker','>','LineStyle','--','linewidth',1);
title('Objective space')
xlabel('Iteration');
ylabel('Best score obtained so far');
legend('GWO优化ICEEMDAN')
disp(['The best solution obtained by GWO is : [',num2str(bestX(1)),',',num2str(fix(bestX(2))),']']);  %输出最佳位置
disp(['The best optimal value of the objective funciton found by GWO is : ', num2str(fMin)]);  %输出最佳适应度值

大家注意看到xz这个变量,当选择1,以最小包络熵为适应度函数,选择2,以最小样本熵为适应度函数,选择3,以最小信息熵为适应度函数,选择4,以最小排列熵为适应度函数。这样大家切换起来就很方便了。

代码目录如下:

8f3fcb26490c9f06a2a09da887703af3.png


这里浅浅说一个MATLAB的小技巧:右键MATLAB的“名称”,出现分组依据,勾选这个类型,MATLAB会自动将当前文件夹下的所有文件按照不同的类型进行分组,这个时候就能清楚地看到哪些文件属于函数,哪些文件属于脚本,一般来说,脚本是可以运行的,而函数是不可以运行的。这样对于一些新手小伙伴就很友好啦!

0a7eb878570c77e8d1d607f93a507cf5.png

本期完整代码获取,后台回复关键词:

TGDM828

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
灰狼最小包络算法是一种优化算法,通常用于求解最优化问题。它通过模拟灰狼群体的行为,实现在搜索空间中寻找最优解。 灰狼最小包络算法的步骤如下: 1. 初始化灰狼个体的位置和速度,包括每个灰狼的目标函数值和值。 2. 根据每个灰狼的目标函数值和值,确定群体中的alpha灰狼(具有最小的目标函数值),beta灰狼(次小的目标函数值)和delta灰狼(目标函数值第三小的灰狼)。 3. 通过运用灰狼的捕食行为,即追逐和跟随,更新灰狼的位置和速度。 4. 根据更新后的灰狼位置计算目标函数值和值,并更新alpha、beta和delta灰狼。 5. 重复步骤3和4,直到达到设定的终止条件。 在Python中实现灰狼最小包络算法,可以使用numpy库进行向量运算,提高计算效率。以下是一个简单的示例代码: ```python import numpy as np def objective_function(x): # 定义目标函数 return x**2 def wolf_pack_search(num_wolves, num_iterations, lower_bound, upper_bound): alpha = np.zeros(num_iterations) # 存储alpha灰狼的目标函数值 alpha_entropy = np.zeros(num_iterations) # 存储alpha灰狼的值 wolves_position = np.random.uniform(lower_bound, upper_bound, (num_wolves,)) # 初始化灰狼位置 for iter in range(num_iterations): # 计算灰狼的目标函数值和值 wolves_fitness = objective_function(wolves_position) entropy = calculate_entropy(wolves_position) # 更新alpha灰狼 alpha_index = np.argmin(wolves_fitness) alpha[iter] = wolves_fitness[alpha_index] alpha_entropy[iter] = entropy[alpha_index] # 运用捕食行为更新灰狼的位置 for i in range(num_wolves): A = 2 * alpha[iter] * np.random.random() - alpha[iter] C = 2 * np.random.random() D = np.abs(C * alpha[iter] - wolves_position[i]) wolves_position[i] = alpha[iter] - A * D # 对灰狼位置进行限制,确保其在搜索空间内 wolves_position = np.clip(wolves_position, lower_bound, upper_bound) return alpha, alpha_entropy # 示例运行 num_wolves = 10 num_iterations = 100 lower_bound = -5 upper_bound = 5 alpha, alpha_entropy = wolf_pack_search(num_wolves, num_iterations, lower_bound, upper_bound) print("最优解:", alpha[-1]) print("最小值:", alpha_entropy[-1]) ``` 这是一个简单的示例代码,实际应用中可以根据具体问题进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天吃饺子

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值