資源簡介
一個遺傳算法的實例,用matlab寫的,包含畫圖,求解一元函數的最大值。
代碼片段和文件信息
%%??題目:?求f(x)?=??x+?10sin(5x)?+7cos(4x)的最大值?,x是[010]
%%??初始化參數
clc?;
clear?all;
NP=50;?%種群數量
L=20?;??%基因位數
Pc=0.8;
Pm=0.1;
G?=?100;?%?迭代次數
Xs=10;?%上限
Xx=0;??%下限??
f=randi([01]NPL);??%隨機獲得初始種群矩陣
%%?遺傳算法循環
for?k?=1?:?G??%迭代次數
???%%?將二進制解碼為定義域范圍內十進制
???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]內的實數
?????Fit(i)?=?func1(x(i));??%每個個體的適應度,即每個x對應的函數值
???end
??%%?最優和最劣質個體
???maxFit?=?max(Fit);??%求Fit矩陣中的最大值
???minFit?=?min(Fit);???%求Fit矩陣中的最小值
???rr=find(Fit==maxFit);???%找出Fit數組中==maxFit的那個值的下標,給rr
???%?disp(rr);
???fBest?=?f(rr(11)??:);?%歷代最優個體
???%?disp(rr(11));
???xBest=x(rr(11));?%歷代最優個體所對應的x值
???Fit?=(Fit-minFit)?/?(maxFit?-?minFit)?;?%歸一化適應度值,是一個權重,即:各個適應度值與最大適應度值得差距,用概率表現出來
???%%?輪盤賭選擇復制??????
???sum_Fit?=?sum(Fit)?;
???fitvalue?=?Fit?./sum_Fit?;???%選擇概率,將Fit的每個元素除以sum_Fit
???fitvalue?=?cumsum(fitvalue)?;?%累積概率
???ms?=?sort?(rand(NP1))?;???%產生NP個0~1之間的隨機數,并且升序排序
???fiti?=1;
???newi=1;
???while?newi<=NP??%輪盤開始轉,一共轉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);%隨機選取需要變異的基因數
???????????%g=rand;
???????????nf(hg)?=?~?nf(hg);
???????end
???????i=i+1;
???end
???f?=?nf?;?????????????????%把新的種群賦值給f?,以方便下一輪循環
???f?(1:)?=fBest?;??????%?保留最優個體在新種群中
???trace(k)=maxFit?;%歷代最優適應度
end
xBest?;%最優個體
%%?畫圖
figure?
plot(trace)
xlabel(‘迭代次數‘)
ylabel(‘目標函數值‘)
title(‘適應度進化曲線‘)
- 上一篇:A*算法航跡規劃
- 下一篇:基本魚群算法 MATLAB函數
評論
共有 條評論