1 簡介
自Farmer在1986年提出免疫機(jī)理可以在機(jī)器學(xué)習(xí)等工程問題中得到應(yīng)用之后,相關(guān)人員就一直在探索免疫機(jī)理在工程實(shí)際中的應(yīng)用技術(shù)须肆。而De Castro等完善了算法結(jié)構(gòu)和算法模型后内舟,更為人工免疫算法的應(yīng)用研究提供了有力的支撐合敦。ENDOH等將人工免疫算法應(yīng)用于旅行商問題(TSP),驗(yàn)證了算法的有效性验游。Watkins利用人工免疫算法實(shí)現(xiàn)了一個(gè)資源受限的分類器充岛,得到令人滿意的結(jié)果。Sasaki等提出了一種基于免疫系統(tǒng)反饋機(jī)理的自適應(yīng)學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)控制器]批狱,避免了神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)在最小值附近的擺動(dòng)裸准,提高了收斂速度。蔣加伏等提出一種人工免疫算法和蟻群算法綜合應(yīng)用的混合優(yōu)化算法赔硫,并應(yīng)用提出的算法成功地應(yīng)用于Qos路由選擇問題炒俱。梁勤歐等應(yīng)用人工免疫算法進(jìn)行布局分配問題的研究,并與其他優(yōu)化算法應(yīng)用于此問題的結(jié)果進(jìn)行對比,證明人工免疫算法具有更好的優(yōu)化質(zhì)量权悟。劉英等利用人工免疫算法設(shè)計(jì)分類器砸王,將分類器的性能與基于遺傳算法等其他方法的分類器性能進(jìn)行了對比,結(jié)果表明基于人工免疫算法的分類算法具有更高的平均預(yù)測精度峦阁,并且可以產(chǎn)生更小的規(guī)則集合谦铃,是一種有效的機(jī)器學(xué)習(xí)方法.
2 部分代碼
```
clc,clear,close all;
warning off
global popsize length min max N code;
N=12;? ? ? ? ? ? ? ? % 每個(gè)染色體段數(shù)(十進(jìn)制編碼位數(shù))
M=100;? ? ? ? ? ? ? ?% 進(jìn)化代數(shù)
popsize=30;? ? ? ? ? % 設(shè)置初始參數(shù),群體大小
length=10;? ? ? ? ? ?% length為每段基因的二進(jìn)制編碼位數(shù)
chromlength=N*length;? % 字符串長度(個(gè)體長度)榔昔,染色體的二進(jìn)制編碼長度
pc=0.7;? ? ? ? ? ? ? ? % 設(shè)置交叉概率驹闰,本例中交叉概率是定值,若想設(shè)置變化的交叉概率可用表達(dá)式表示撒会,或從寫一個(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;? ?% 適應(yīng)度值初始化
ysw_x = zeros(3,12);
%電容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];
for i=1:3? ?% 3種故障模式,每種模式應(yīng)該產(chǎn)生 popsize 種監(jiān)測器(抗體)乙埃,每種監(jiān)測器的長度和故障編碼的長度相同
? ?pop=initpop(popsize,chromlength);? ? ? ? ? ? ? ? ? ? ?%運(yùn)行初始化函數(shù)蝴猪,隨機(jī)產(chǎn)生初始群體
? ?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); %變異
? ? ? [bestindividual,bestfit]=best(newpop,fitvalue);%求出群體中適應(yīng)值最小的個(gè)體及其適應(yīng)值
? ? ? if bestfit<ymax
? ? ? ? ?ymax=bestfit;
? ? ? ? ? for j=1:N %譯碼!
? ? ? ? ? ? ? temp(:,j)=decodechrom(bestindividual,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
? ? ? ? ysw_x(i,:) = x;? %譯碼膊爪!
? ? ? end
? ? ? y(i,k)=ymax;
? ? ? if ymax<10? ? ?% 如果最大值小于設(shè)定閥值自阱,停止進(jìn)化
? ? ? ? ? break
? ? ? end
? ? ? pop=newpop;
? end??
end
ysw_x? ?% 結(jié)果為(i*popsie)個(gè)監(jiān)測器(抗體)
plot(1:M,favg)
```
3 仿真結(jié)果
4 參考文獻(xiàn)
[1]鄭濤, 潘玉美, 郭昆亞, 王增平, & 孫潔. (2014). 基于免疫算法的配電網(wǎng)故障定位方法研究. 電力系統(tǒng)保護(hù)與控制, 000(001), 77-83.
博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測米酬、信號處理沛豌、元胞自動(dòng)機(jī)、圖像處理赃额、路徑規(guī)劃加派、無人機(jī)等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流跳芳。
部分理論引用網(wǎng)絡(luò)文獻(xiàn)芍锦,若有侵權(quán)聯(lián)系博主刪除。
**完整代碼獲取關(guān)注微信公眾號天天matlab**