【故障诊断】基于冯洛伊曼拓扑的鲸鱼算法用于滚动轴承的故障诊断研究(Matlab代码实现)

目录

💥1 概述

📚2 运行结果

2.1 改进鲸鱼算法

2.2 普通 lssvm 

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

本文利用最小二乘支持向量机进行分类器建模,改进鲸鱼算法(基于冯洛伊曼拓扑的鲸鱼算法)进行超参数寻优,最后将所提方法用于滚动轴承的故障诊断。

基于冯洛伊曼拓扑的鲸鱼算法是一种用于优化问题的算法,它模拟了鲸鱼在搜索食物时的行为。而滚动轴承的故障诊断是指通过监测轴承的振动、温度、声音等信号来判断轴承的运行状态,进而预测是否存在故障。

研究中,基于冯洛伊曼拓扑的鲸鱼算法可以用于优化滚动轴承故障诊断模型的参数,提高诊断的准确性和效率。具体步骤可能包括以下几个方面:

1. 数据采集:收集滚动轴承振动、温度、声音等各种信号的数据,形成数据集。

2. 特征提取:从采集到的数据中提取特征,如时域特征、频域特征、小波特征等。这些特征能够反映轴承的运行状态和可能存在的故障。

3. 构建模型:根据特征数据构建滚动轴承故障诊断模型。可以采用各种机器学习算法或深度学习算法,如支持向量机、神经网络等。

4. 参数优化:利用基于冯洛伊曼拓扑的鲸鱼算法来优化模型的参数。这里可以将优化问题定义为最小化代价函数,使得模型在故障诊断方面的准确性达到最佳。

5. 模型评估:使用部分数据集对优化后的模型进行评估,计算故障诊断的性能指标,如准确率、召回率等。

通过以上步骤,基于冯洛伊曼拓扑的鲸鱼算法可以帮助优化滚动轴承故障诊断模型,提高诊断准确性,并能更好地应对复杂的故障情况。

📚2 运行结果

2.1 改进鲸鱼算法

 

2.2 普通 lssvm 

 部分代码:

%% 本程序用于多种优化算法的对比
% 分别为粒子群 遗传算法 鲸鱼算法  基于冯洛伊曼拓扑的鲸鱼算法
% 运行只需要取消对应算法的注释
% 将不需要的算法加上注释  即‘%’
% 由于运行比较慢  我已经保存了一次vnwoa的结果在trace中
% 未优化的程序在lssvm_putong中
clear
clc
close all
format compact
%% 加载数据
load data_kjade
input=data_kjade;
output=[1*ones(1,100) 2*ones(1,100) 3*ones(1,100) 4*ones(1,100) 5*ones(1,100) 6*ones(1,100) 7*ones(1,100) 8*ones(1,100) 9*ones(1,100) 10*ones(1,100)]';
rand('seed',0)
%% 随机取700为训练集  300为测试集
[m,n]=sort(rand(1,1000));
m=700;
X1=input(n(1:m),:);
y1=output(n(1:m),:);
Xt=input(n(m+1:end),:);
yt=output(n(m+1:end),:);
%%
N=5;
G=10;
% [x,trace]=psoforlssvm(N,G,X1,y1,Xt,yt);%粒子群算法
% [x,trace]=gaforlssvm(N,G,X1,y1,Xt,yt);%遗传算法
[x,trace]=woaforlssvm(N,G,X1,y1,Xt,yt);%鲸鱼算法
% [x,trace]=vnwoaforlssvm(N,G,X1,y1,Xt,yt);%改进鲸鱼算法
load trace 
figure
plot(trace)
xlabel('迭代次数')
ylabel('适应度值')
title('适应度曲线')
%%
gam = x(1)  
sig2 =x(2)
% 利用寻优得到的最优gam与sig2重新训练lssvm
[yc,codebook,old_codebook] = code(y1,'code_OneVsOne'); 
%code_OneVsAll
%code_OneVsOne
%code_MOC
model = initlssvm(X1,yc,'c',gam,sig2,'RBF_kernel');
model = trainlssvm(model);
Y = simlssvm(model,X1);
predict_label = code(Y,old_codebook,[],codebook);
fprintf(1,'Accuracy: %2.2f\n',100*sum(predict_label==y1)/length(y1));
figure 
stem(y1)
hold on
plot(predict_label,'*')
xlabel('训练集样本编号')
ylabel('输出标签')
title('训练集分类输出')

%%% 测试集准确率
Y = simlssvm(model,Xt);
predict_label = code(Y,old_codebook,[],codebook);
fprintf(1,'Accuracy: %2.2f\n',100*sum(predict_label==yt)/length(yt));
figure 
stem(yt)
hold on
plot(predict_label,'*')
xlabel('测试集样本编号')
ylabel('输出标签')
title('测试集分类输出')

%% 普通 lssvm
clear
clc
close all
format compact
addpath LSSVMlab
%% 加载数据
load data_kjade
input=data_kjade;
output=[1*ones(1,100) 2*ones(1,100) 3*ones(1,100) 4*ones(1,100) 5*ones(1,100) 6*ones(1,100) 7*ones(1,100) 8*ones(1,100) 9*ones(1,100) 10*ones(1,100)        ]';
rand('seed',0)
%% 随机取700为训练集  300为测试集
[m,n]=sort(rand(1,1000));
m=700;
X1=input(n(1:m),:);
y1=output(n(1:m),:);
Xt=input(n(m+1:end),:);
yt=output(n(m+1:end),:);
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
gam = 81.6492    ;  
sig2 =53.5081;
[yc,codebook,old_codebook] = code(y1,'code_MOC'); 
model = initlssvm(X1,yc,'c',gam,sig2,'RBF_kernel');
model = trainlssvm(model);

%% 测试集准确率
Y = simlssvm(model,Xt);
predict_label = code(Y,old_codebook,[],codebook);
fprintf(1,'Accuracy: %2.2f\n',100*sum(predict_label==yt)/length(yt));
figure 
stem(yt)
hold on
plot(predict_label,'*')
xlabel('测试集样本编号')
ylabel('输出标签')
title('测试集分类输出')

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]张兆坤,杨国华,张佳豪,杨晓伟,张云飞.基于VNWOA-LSSVM变压器故障诊断方法研究[J].电工电气,2022(12):32-36+62.

[2]杨亚红,王海瑞.基于AsyLnCPSO-SVM的滚动轴承故障诊断研究[J].农业装备与车辆工程,2022,60(10):163-166.

[3]左晗玥. 基于参数优化VMD的滚动轴承故障诊断方法研究[D].内蒙古科技大学,2022.DOI:10.27724/d.cnki.gnmgk.2022.000782.

🌈4 Matlab代码实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值