?? main.m
字號:
clear all;
global popsize length min max N code;
N=12; % 每個染色體段數(shù)(十進制編碼位數(shù))
M=20; % 進化代數(shù)
popsize=20; %設(shè)置初始參數(shù),群體大小
length=10; % length為每段基因的二進制編碼位數(shù)
chromlength=N*length; %字符串長度(個體長度),染色體的二進制編碼長度
pc=0.7; %設(shè)置交叉概率,本例中交叉概率是定值,若想設(shè)置變化的交叉概率可用表達式表示,或從寫一個交叉概率函數(shù),例如用神經(jīng)網(wǎng)絡(luò)訓(xùn)練得到的值作為交叉概率
pm=0.3; %設(shè)置變異概率,同理也可設(shè)置為變化的
bound={-100*ones(popsize,1),zeros(popsize,1)};min=bound{1};max=bound{2};
pop=initpop(popsize,chromlength); %運行初始化函數(shù),隨機產(chǎn)生初始群體
ymax=500;K=1;
%電容C2:故障類型編碼,每一行為一種!code(1,:),正常;code(2,:),50%;code(3,:),150%
code =[-0.8180 -1.6201 -14.8590 -17.9706 -24.0737 -33.4498 -43.3949 -53.3849 -63.3451 -73.0295 -79.6806 -74.3230
-0.7791 -1.2697 -14.8682 -26.2274 -30.2779 -39.4852 -49.4172 -59.4058 -69.3676 -79.0657 -85.8789 -81.0905
-0.8571 -1.9871 -13.4385 -13.8463 -20.4918 -29.9230 -39.8724 -49.8629 -59.8215 -69.4926 -75.9868 -70.6706];
%實際故障測得數(shù)據(jù)編碼,這里Unnoralcode,188%
Unnoralcode=[-0.8864 -2.2743 -12.2676 -11.6813 -18.5298 -27.9828 -37.9340 -47.9246 -57.8820 -67.5433 -73.9248 -68.9759];
for i=1:3 % 3種故障模式,每種模式應(yīng)該產(chǎn)生 popsize 種監(jiān)測器(抗體),每種監(jiān)測器的長度和故障編碼的長度相同
for k=1:M
[objvalue]=calobjvalue(pop,i); %計算目標函數(shù)
fitvalue=calfitvalue(objvalue); favg(k)=sum(fitvalue)/popsize; %計算群體中每個個體的適應(yīng)度
newpop=selection(pop,fitvalue); objvalue=calobjvalue(newpop,i); %選擇
newpop=crossover(newpop,pc,k); objvalue=calobjvalue(newpop,i); %交叉
newpop=mutation(newpop,pm); objvalue=calobjvalue(newpop,i); %變異
for j=1:N %譯碼!
temp(:,j)=decodechrom(newpop,1+(j-1)*length,length); %將newpop每行(個體)每列(每段基因)轉(zhuǎn)化成十進制數(shù)
x(:,j)=temp(:,j)/(2^length-1)*(max(j)-min(j))+min(j); % popsize×N 將二值域中的數(shù)轉(zhuǎn)化為變量域的數(shù)
end
[bestindividual,bestfit]=best(newpop,fitvalue);%求出群體中適應(yīng)值最大的個體及其適應(yīng)值
if bestfit<ymax
ymax=bestfit;K=k;
end
% y(k)=bestfit;
if ymax<10 % 如果最大值小于設(shè)定閥值,停止進化
X{i}=x;
break
end
if k==1
fitvalue_for=fitvalue;x_for=x;
end
result=resultselect(fitvalue_for,fitvalue,x_for,x);
fitvalue_for=fitvalue;
x_for=x;
pop=newpop;
end
X{i}=result; % 第i類故障的popsize個監(jiān)測器
distance=0; % 下面開始計算 Unnoralcode 屬于每一類故障的概率:免疫應(yīng)答!
for j=1:N
distance=distance+(result(:,j)-Unnoralcode(j)).^2; % 將得popsize個不同的距離
end
distance=sqrt(distance);D=0;
for p=1:popsize
if distance(p)<80 % 預(yù)設(shè)閥值
D=D+1;
end
end
P(i)=D/popsize; %Unnoralcode隸屬每種故障類型的概率!(最終檢測結(jié)果)-->P!
end
X; % 結(jié)果為(i*popsie)個監(jiān)測器(抗體)
%plot(1:M,favg)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -