m基于GA遗传优化BP神经网络的传感器故障诊断matlab仿真

简介: m基于GA遗传优化BP神经网络的传感器故障诊断matlab仿真

1.算法描述

  遗传算法GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法之前,给出一群“染色体”,也即是假设解。然后,把这些假设解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉,变异过程产生更适应环境的新一代“染色体”群。这样,一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解。

   其主要步骤如下:

1.初始化

   选择一个群体,即选择一个串或个体的集合bi,i=1,2,...n。这个初始的群体也就是问题假设解的集合。一般取n=30-160。

   通常以随机方法产生串或个体的集合bi,i=1,2,...n。问题的最优解将通过这些初始假设解进化而求出。

2.选择

  根据适者生存原则选择下一代的个体。在选择时,以适应度为选择原则。适应度准则体现了适者生存,不适应者淘汰的自然法则。

给出目标函数f,则f(bi)称为个体bi的适应度。以

为选中bi为下一代个体的次数。

显然.从式(3—86)可知:

(1)适应度较高的个体,繁殖下一代的数目较多。

(2)适应度较小的个体,繁殖下一代的数目较少;甚至被淘汰。

这样,就产生了对环境适应能力较强的后代。对于问题求解角度来讲,就是选择出和最优解较接近的中间解。

3.交叉

   对于选中用于繁殖下一代的个体,随机地选择两个个体的相同位置,按交叉概率P。在选中的位置实行交换。这个过程反映了随机信息交换;目的在于产生新的基因组合,也即产生新的个体。交叉时,可实行单点交叉或多点交叉。

f64784012fe0054d44633c7571c2ee6e_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

在BP神经网络中,隐含层数量对神经网络的性能有着至关重要的影响,如果隐含层数量过多,会大大增加BP神经网络的内部结构的复杂度,从而降低学习效率,增加训练时间;如果隐含层数量过少,则无法精确获得训练输入数据和输出结果之间的内在规律,增加预测误差。因此,选择合适的隐含层个数具有十分重要的意义。由于隐含层个数的设置没有明确的理论可以计算,通常情况下,采用逐次分析的方法获得,即通过对不同隐含层所对应的神经网络进行预测误差的仿真分析,选择误差最小情况下所对应的隐含层个数。

    学习率,即网络权值得更新速度,当学习率较大的时候,网络权值的更新速度快,当网络稳定性会下降;当学习率较小的时候,网络权值的更新速度慢,网络较为稳定。这里选择BP神经网络的学习率方式参考上一章节隐含层的选择方式,即通过对比不同学习率的网络训练误差,选择性能较优的学习率。

   BP神经网络的初始网络权值对网络训练的效率以及预测性能有着较大的影响,通常情况下,采用随机生成[-1,1]之间的随机数作为BP神经网络的初始权值。     

   利用遗传算法来优化 BP 神经网络,利用它来学习神经网络 的权值,并在自适应遗传算法的基础上改进遗传算 子,根据适应度变化调节交叉率和变异率,并利用遗 传算法的全局搜索能力对BP 神经网络的初始权重进 行自适应调整,最终得到一个优化的 BP 神经网络.

2.仿真效果预览
matlab2022a仿真结果如下:

ab3de4ec03b69dba5c29088d9c4e892d_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
7920df547ed4c795912a70b6248f2273_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
eef2bd5990161cf8442b61c26598de0c_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
8d1677ebe447e5d1de769c834d883733_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

3.MATLAB核心程序

fit_best  = [];                     
fit_chrom = [];                       
%最好染色体
[fit_best,ind_best] = min(gts.fitness);
fit_chrom           = gts.chrom(ind_best,:);  
fit_mean            = sum(gts.fitness)/Pop_Size; 
 
Fitness_line        = zeros(1,Max_G);
 
for i=1:Max_G
    i
    if i == 1
       P1s = P1*ones(1,Pop_Size);
       P2s = P2*ones(1,Pop_Size);;
    else
       fmax = max(gts.fitness);
       f_   = mean(gts.fitness);
       f    = gts.fitness;
       for j = 1:Pop_Size;
           if f(j) >= f_
              P1s(j) = 0.5*(fmax-f(j))/(fmax-f_);  
           else
              P1s(j) = 0.5;   
           end
       end
       for j = 1:Pop_Size;
           P2s(j) = 1-P1s(j);  
       end 
    end
    
    
    %遗传选择
    gts       = func_select(gts,Pop_Size); 
    fit_mean  = sum(gts.fitness)/Pop_Size;
    %遗传交叉
    gts.chrom = func_cross(P1s,Lroms,gts.chrom,Pop_Size,bound);
    %变异
    gts.chrom = func_mutation(P2s,Lroms,gts.chrom,Pop_Size,i,Max_G,bound);
    %计算适应度 
    for j=1:Pop_Size
        Xx             = gts.chrom(j,:);
        gts.fitness(j) = func_fitness(Xx,Num_In,Num_Hidden,Num_Out,net,train_data,train_aim);   
    end
    [fit_best2,ind_best2] = min(gts.fitness);
    [fit_worst,ind_worst] = max(gts.fitness);
 
    if fit_best > fit_best2
       fit_best  = fit_best2;
       fit_chrom = gts.chrom(ind_best2,:);
    end
    gts.chrom(ind_worst,:) = fit_chrom;
    gts.fitness(ind_worst) = fit_best;
    fit_mean               = sum(gts.fitness)/Pop_Size;
    Fitness_line(i)        = fit_best;
end
Xx=fit_chrom;
 
 
 
%把最优初始阀值权值赋予网络预测
L1 = 1;
L2 = Num_In*Num_Hidden;
w1 = Xx(L1:L2);
 
L1 = Num_In*Num_Hidden+1;
L2 = Num_In*Num_Hidden+Num_Hidden;
B1 = Xx(L1:L2);
 
L1 = Num_In*Num_Hidden+Num_Hidden+1;
L2 = Num_In*Num_Hidden+Num_Hidden+Num_Hidden*Num_Out;
w2 = Xx(L1:L2);
 
L1 = Num_In*Num_Hidden+Num_Hidden+Num_Hidden*Num_Out+1;
L2 = Num_In*Num_Hidden+Num_Hidden+Num_Hidden*Num_Out+Num_Out;
B2 = Xx(L1:L2);
 
 
net.iw{1,1}=reshape(w1,Num_Hidden,Num_In);
net.lw{2,1}=reshape(w2,Num_Out,Num_Hidden);
net.b{1}=reshape(B1,Num_Hidden,1);
net.b{2}=B2;
clear;
close all;
warning off;
addpath(genpath(pwd));
rng('default')
 
 
load data.mat
Num_In     = size(Train_data,1);
Num_Hidden = 6;
Num_Out    = 1;
%构建BP网络
net        = newff(Train_data,Train_aim,Num_Hidden);
net        = func_newGA(net,Num_In,Num_Hidden,Num_Out,Train_data,Train_aim);
net        = train(net,Train_data,Train_aim);
outputs    = round(sim(net,awgn(Test_data,0,'measured')));%测试的时候,加入随机干扰
 
%计算整体识别率
disp('整体识别率:');
C0 = 100*length(find(outputs==Test_aim))/length(Test_aim)
disp('第1种故障识别率:');
C1 = 100*length(find(outputs(1:50)==1))/length(Test_aim)*3
disp('第2种故障识别率:');
C2 = 100*length(find(outputs(51:100)==2))/length(Test_aim)*3
disp('第3种故障识别率:');
C3 = 100*length(find(outputs(101:150)==3))/length(Test_aim)*3
 
 
%测试不同噪声大小下的识别率
SNR = -2:1:16;
for i = 1:length(SNR)
    i
    for j = 1:20
        rng(j);
        Test_data2 = awgn(Test_data,SNR(i),'measured');
        outputs    = round(sim(net,Test_data2));
        C20(i,j)     = 100*length(find(outputs==Test_aim))/length(Test_aim);
        C21(i,j)     = 100*length(find(outputs(1:50)==1))/length(Test_aim)*3;    
        C22(i,j)     = 100*length(find(outputs(51:100)==2))/length(Test_aim)*3;    
        C23(i,j)     = 100*length(find(outputs(101:150)==3))/length(Test_aim)*3; 
    end
end
相关文章
|
4天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
2天前
|
机器学习/深度学习 传感器 数据可视化
MATLAB用深度学习长短期记忆 (LSTM) 神经网络对智能手机传感器时间序列数据进行分类
MATLAB用深度学习长短期记忆 (LSTM) 神经网络对智能手机传感器时间序列数据进行分类
15 1
MATLAB用深度学习长短期记忆 (LSTM) 神经网络对智能手机传感器时间序列数据进行分类
|
3天前
|
机器学习/深度学习 算法 数据挖掘
基于PSO优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真
该文档介绍了使用MATLAB2022A中PSO优化算法提升时间序列预测模型性能的过程。PSO优化前后对比显示了优化效果。算法基于CNN、LSTM和Attention机制构建CNN-LSTM-Attention模型,利用PSO调整模型超参数。代码示例展示了PSO的迭代优化过程及训练、预测和误差分析环节。最终,模型的预测结果以图形形式展示,并保存了相关数据。
|
8天前
|
机器学习/深度学习 数据可视化 网络架构
matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类
matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类
12 0
|
11天前
|
机器学习/深度学习 算法
【MATLAB】GA_ELM神经网络时序预测算法
【MATLAB】GA_ELM神经网络时序预测算法
283 9
|
24天前
雷达模糊函数及MATLAB仿真(三)
雷达模糊函数及MATLAB仿真
15 0
|
24天前
雷达模糊函数及MATLAB仿真(一)
雷达模糊函数及MATLAB仿真
25 0
|
2月前
|
机器学习/深度学习 算法 PyTorch
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
46 0
|
6月前
|
机器学习/深度学习 监控 算法
【tensorflow】连续输入的神经网络模型训练代码
【tensorflow】连续输入的神经网络模型训练代码
|
6月前
|
机器学习/深度学习 存储 自然语言处理

热门文章

最新文章