多变异位自适应遗传算法(MMAdapGA)的算法原理、算法步骤和matlab实现
生活随笔
收集整理的這篇文章主要介紹了
多变异位自适应遗传算法(MMAdapGA)的算法原理、算法步骤和matlab实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
算法原理
自適應遺傳算法是交叉概率和變異概率能夠隨使用度自動改變,以求得相對某個解的最佳交叉概率和變異概率。本算法是在自適應遺傳算法中引進多變異位,以增加種群的多樣性。
自適應遺傳算法中的交叉概率和變異概率的計算公式為:
Pc=K1(fmax?f)fmax?favg,若f>=fvag
Pc=k2,若f<fvag
Pm=K3(fmax?f′)fmax?f′,若f′=fvag
Pm=k4,若f′<fvag
fmax,群體中的最大適應值,favg,群體平均適應值,f,要交叉的兩個個體中較大的適應值,f′要變異個體的適應值,k1,k2,k3和k4是常數
多變異位是指變異位的二進制表示的編碼的多個位取反。
算法步驟
1、隨機產生種群,
2、用輪盤賭策略確定個體的適應度,判斷是否符合優化準則,若符合,輸出最佳個體及其最優解,結束,否則,進行下一步
3、依據適應度選擇再生個體,適應度高的個體被選中的概率高,適應度低的個體被淘汰
4、按照一定的交叉概率和交叉方法,生成新的個體
5、通過自適應方法產生變異概率,若最大適應率等于最小適應率,則只產生一個變異位,否則,隨機產生變異位的個數和位置,對選中的個體進行變異
6、由交叉和變異產生新一代種群,返回步驟2
算法的matlab實現
% 解決一維無約束優化問題:多變異位自適應遺傳算法 function [ xv,fv ] = MMAdapGA( fitness,a,b,NP,NG,Pc1,Pc2,Pm1,Pm2,eps ) % 待優化的目標函數:fitness % 自變量下界:a % 自變量上界:b % 種群個體數:NP % 最大進化代數:NG % 雜交常數1:Pc1 % 雜交常數2:Pc2 % 變異常數1:Pm1 % 變異常數2:Pm2 % 自變量離散精度:eps % 目標函數取最大值是的自變量值:xv % 目標函數的最小值:fvL=ceil(log2((b-a)/eps+1)); %碼長 x=zeros(NP,L); for i=1:NPx(i,:)=Initial(L);fx(i)=fitness(Dec(a,b,x(i,:),L)); end for k=1:NGsumfx=sun(fx);Px=fx/sumfx;PPx=0;PPx(1)=Px(1);for i=2:NP %根據輪盤賭確定父親PPx(i)=PPx(i-1)+PPx(i);endfor i=1:NPsita=rand();for n=1:NPif sita <=PPx(n)SelFather = n;break;endendSelmother=floor(rand()*(NP-1))+1; %隨機選擇母親posCut=floor(rand()*(L-2))+1; %隨機確定交叉點favg=sumfx/NP;fmin=min(fx);fmax=max(fx);Fitness_f=fx(SelFather);Fitness_m=fx(Selmother);Fm=max(Fitness_f,Fitness_m);if Fm>=favgPc=Pc1*(fmax-Fm)/(fmax-favg);elsePc=Pc2;endr1=rand();if ra<=Pcnx(i,1:posCut)=x(SelFather,1:posCut);nx(I,(posCut+1):L)=x(Selmother,(posCut+1):L);fmu=fitness(Dec(a,b,nx(i,:),L));if r1<=PcPm=Pm1*(fmax-fmu)/(fmax-favg);else Pm=Pm2;endr2=rand();if r2<=Pm %變異if fmax~=fminnumMut=round(L*(fmax-fmu)/(fmax-fmin)/3);else numMut=1;endintArr=1:L;posMut=zeros(1,numMut);for j=1:numMuttmp=round(rand()*(L-j)+1);posMut(j)=intArr(tmp);intArr=[intArr(1:tmp-1)) intArr((tmp+1):(L-j+1))];endfor j=1:numMutnx(i,posMut(j))=~nx(i,posMut(j));endendelsenx(i,:)=x(SelFather,:);endendx=nx;for i=1:NPfx(i)=fitness(Dec(a,b,x(i,:),L);end end fv=-inf; for i=1:NPfitx=fitness(Dec(a,b,x(i,:),L));if fitx > fvfv=fitx;xv=Dec(a,b,x(i,:),L);end end endfunction result=Initial(length) %初始化函數for i=1:lengthr=round();result(i)=round(r);end end function y=Dec(a,b,x,L) %二進制轉十進制base=2.^((L-1):-1:0);y=dot(base,x);y=a+y*(b-1)/(2^L-1)' end總結
以上是生活随笔為你收集整理的多变异位自适应遗传算法(MMAdapGA)的算法原理、算法步骤和matlab实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 标准粒子群算法(PSO)及其Matlab
- 下一篇: Matlab GUI 界面设计基础(1)