?? main.m
字號(hào):
clear all;
global popsize length min max N code;
N=12; % 每個(gè)染色體段數(shù)(十進(jìn)制編碼位數(shù))
M=20; % 進(jìn)化代數(shù)
popsize=20; %設(shè)置初始參數(shù),群體大小
length=10; % length為每段基因的二進(jìn)制編碼位數(shù)
chromlength=N*length; %字符串長(zhǎng)度(個(gè)體長(zhǎng)度),染色體的二進(jìn)制編碼長(zhǎng)度
pc=0.7; %設(shè)置交叉概率,本例中交叉概率是定值,若想設(shè)置變化的交叉概率可用表達(dá)式表示,或從寫(xiě)一個(gè)交叉概率函數(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); %運(yùn)行初始化函數(shù),隨機(jī)產(chǎn)生初始群體
ymax=500;K=1;
%電容C2:故障類(lèi)型編碼,每一行為一種!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í)際故障測(cè)得數(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)測(cè)器(抗體),每種監(jiān)測(cè)器的長(zhǎng)度和故障編碼的長(zhǎng)度相同
for k=1:M
[objvalue]=calobjvalue(pop,i); %計(jì)算目標(biāo)函數(shù)
fitvalue=calfitvalue(objvalue); favg(k)=sum(fitvalue)/popsize; %計(jì)算群體中每個(gè)個(gè)體的適應(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每行(個(gè)體)每列(每段基因)轉(zhuǎn)化成十進(jì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)值最大的個(gè)體及其適應(yīng)值
if bestfit<ymax
ymax=bestfit;K=k;
end
% y(k)=bestfit;
if ymax<10 % 如果最大值小于設(shè)定閥值,停止進(jìn)化
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類(lèi)故障的popsize個(gè)監(jiān)測(cè)器
distance=0; % 下面開(kāi)始計(jì)算 Unnoralcode 屬于每一類(lèi)故障的概率:免疫應(yīng)答!
for j=1:N
distance=distance+(result(:,j)-Unnoralcode(j)).^2; % 將得popsize個(gè)不同的距離
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隸屬每種故障類(lèi)型的概率!(最終檢測(cè)結(jié)果)-->P!
end
X; % 結(jié)果為(i*popsie)個(gè)監(jiān)測(cè)器(抗體)
%plot(1:M,favg)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -