【故障检测问题】基于matlab免疫算法之故障检测问题【含Matlab源码 196期】

323 阅读3分钟

一、简介

1 故障检测问题
免疫算法的基础就在于如何计算抗原与抗体、抗体与抗体之间的相似度,因此免疫算法在处理相似性方面有着独特的优势。
基于人工免疫的故障检測和诊断模型如图所示。
在这里插入图片描述
在此模型中,用一个N维特征向量表示系统工作状态的数据。为了减少时间的复杂度,对系统工作状态的检测分为如下两个层次:
(1)异常检测:负责报告系统的异常工作状态。
(2)故障诊断:确定故障类型和发生的位置。
描述系统正常工作的自体为第一类抗原,用于产生原始抗体;描述系统工作异常的非自体作为第二类抗原,用于刺激抗体进行变异和克隆进化,使其成熟。
下面采用免疫算法对诊断知识的获取技术进行举例讲解。
2 案例
随机设置一组故障编码和三种故障类型编码,通过免疫算法,求得故障
编码属于故障类型编码的概率

二、源代码

clear all;
clc
global popsize length min max N code;
N=11;                  % 每个染色体段数(十进制编码位数)
M=110;                 % 进化代数
popsize=20;            %设置初始参数,群体大小
length=10;             % length为每段基因的二进制编码位数
chromlength=N*length;  %字符串长度(个体长度),染色体的二进制编码长度
pc=0.7;                %设置交叉概率,本例中交叉概率是定值,若想设置变化的交叉概率可用表达式表示,或从写一个交叉概率函数,例如用神经网络训练得到的值作为交叉概率
pm=0.3;                %设置变异概率,同理也可设置为变化的
bound={-100*ones(popsize,1),zeros(popsize,1)};min=bound{1};max=bound{2};
pop=initpop(popsize,chromlength);                     %运行初始化函数,随机产生初始群体
ymax=500;
K=1;
P   % 结果为(i*popsie)个监测器(抗体)
plot(1:M,favg)
title('个体适应度变化趋势')
xlabel('迭代数')
ylabel('个体的适应度')
function [bestindividual,bestfit]=best(pop,fitvalue)
global popsize N length;
bestindividual=pop(1,:);
bestfit=fitvalue(1);
Cmin=0;
for i=1:popsize
  if objvalue(i)+Cmin>0     % objvalue 为一列向量
      temp=Cmin+objvalue(i);
   else
      temp=0;
   end
   fitvalue(i)=temp;         % 得一向量
end
end
function [newpop]=mutation(pop,pm)
global popsize N length;
for i=1:popsize
   if(rand<pm) %产生一随机数与变异概率比较
      mpoint=round(rand*N*length);  % 个体变异位置
     if mpoint<=0
        mpoint=1;
     end
     newpop(i,:)=pop(i,:);
     if newpop(i,mpoint)==0
        newpop(i,mpoint)=1;
     else
        newpop(i,mpoint)=0;
     end
     function newpop=crossover(pop,pc,k)
global N length M;
pc=pc-(M-k)/M*1/20;
A=1:N*length;
% A=randcross(A,N,length);  
for i=1:length
    n1=A(i);n2=i+10;  
    for j=1:N                     
              
           temp1=pop(n1,(j-1)*length+cpoint+1:j*length);temp2=pop(n2,(j-1)*length+cpoint+1:j*length);
           pop(n1,(j-1)*length+cpoint+1:j*length)=temp2;pop(n2,(j-1)*length+cpoint+1:j*length)=temp1;
    end      

三、运行结果

具体运行结果图见完整代码
设置的故障数据属于三种故障类型的概率P值如下:
P=
0.800000000000 0.050000000000 1.000000000000
这表示故障数据属于故障一概率为80%,属于故障二的概率为5%,属于故障三的概率为100%。

四、备注

版本:2014a