-
大小: 6KB文件類型: .tar金幣: 1下載: 0 次發(fā)布日期: 2021-06-10
- 語言: Matlab
- 標簽:
資源簡介
一個遺傳算法的實例,用matlab寫的,包含畫圖,求解一元函數(shù)的最大值。
代碼片段和文件信息
%%??題目:?求f(x)?=??x+?10sin(5x)?+7cos(4x)的最大值?,x是[010]
%%??初始化參數(shù)
clc?;
clear?all;
NP=50;?%種群數(shù)量
L=20?;??%基因位數(shù)
Pc=0.8;
Pm=0.1;
G?=?100;?%?迭代次數(shù)
Xs=10;?%上限
Xx=0;??%下限??
f=randi([01]NPL);??%隨機獲得初始種群矩陣
%%?遺傳算法循環(huán)
for?k?=1?:?G??%迭代次數(shù)
???%%?將二進制解碼為定義域范圍內(nèi)十進制
???for?i=1:NP
?????U?=f(i:);??
?????m=0;
?????for?j=1:L
?????????m=U(j)*2^(j-1)+m;
????????%disp(m);
?????end??
?????x(i)=Xx+m*(Xs-Xx)/(2^L-1);??%為[010]內(nèi)的實數(shù)
?????Fit(i)?=?func1(x(i));??%每個個體的適應度,即每個x對應的函數(shù)值
???end
??%%?最優(yōu)和最劣質(zhì)個體
???maxFit?=?max(Fit);??%求Fit矩陣中的最大值
???minFit?=?min(Fit);???%求Fit矩陣中的最小值
???rr=find(Fit==maxFit);???%找出Fit數(shù)組中==maxFit的那個值的下標,給rr
???%?disp(rr);
???fBest?=?f(rr(11)??:);?%歷代最優(yōu)個體
???%?disp(rr(11));
???xBest=x(rr(11));?%歷代最優(yōu)個體所對應的x值
???Fit?=(Fit-minFit)?/?(maxFit?-?minFit)?;?%歸一化適應度值,是一個權重,即:各個適應度值與最大適應度值得差距,用概率表現(xiàn)出來
???%%?輪盤賭選擇復制??????
???sum_Fit?=?sum(Fit)?;
???fitvalue?=?Fit?./sum_Fit?;???%選擇概率,將Fit的每個元素除以sum_Fit
???fitvalue?=?cumsum(fitvalue)?;?%累積概率
???ms?=?sort?(rand(NP1))?;???%產(chǎn)生NP個0~1之間的隨機數(shù),并且升序排序
???fiti?=1;
???newi=1;
???while?newi<=NP??%輪盤開始轉(zhuǎn),一共轉(zhuǎn)NP次
???????if(ms(newi) ???????????nf(newi:)?=?f(fiti??:)?;?%?把個體給新的種群
???????????newi?=?newi?+?1;
???????else
???????????fiti=fiti?+1;
???????end
???end
???%%??交叉_均勻交叉
???for?i?=?1:2:NP???%?從1到NP?,每隔兩個
???????p?=?rand?;???
???????if?p ???????????q=randi([01]1L);
???????????for?j?=1:L
???????????????if?q(j)?==?1;
???????????????????temp=nf(i+1j);
???????????????????nf(i+1j)?=?nf(ij);
???????????????????nf(ij)?=?temp;
???????????????end
???????????end
???????end
???end
???%%?變異
???i?=?1;
???while?i<=round(NP*Pc)???%?四舍五入
???????h=randi([1NP]11)?;?%隨機選取一個需要變異的染色體
???????for?j?=?1:round(L*Pc)
???????????g?=?randi([120]11);%隨機選取需要變異的基因數(shù)
???????????%g=rand;
???????????nf(hg)?=?~?nf(hg);
???????end
???????i=i+1;
???end
???f?=?nf?;?????????????????%把新的種群賦值給f?,以方便下一輪循環(huán)
???f?(1:)?=fBest?;??????%?保留最優(yōu)個體在新種群中
???trace(k)=maxFit?;%歷代最優(yōu)適應度
end
xBest?;%最優(yōu)個體
%%?畫圖
figure?
plot(trace)
xlabel(‘迭代次數(shù)‘)
ylabel(‘目標函數(shù)值‘)
title(‘適應度進化曲線‘)
- 上一篇:A*算法航跡規(guī)劃
- 下一篇:基本魚群算法 MATLAB函數(shù)
評論
共有 條評論