一、简介
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