資源簡介
使用matlab編程利用遺傳算法Max f (x1, x2) = 21.5 + x1·sin(4πx1) + x2·sin(20πx2)
s. t. -3.0 ≤ x1 ≤ 12.1
4.1 ≤ x2 ≤ 5.8
代碼片段和文件信息
%%%*****用遺傳算法求函數最大值(雙輸入單輸出)****%%%%%
clc;
clear;
x1min=-3.0;?%輸入變量1的變化范圍
x1max=12.1;???????
x2min=4.1;??%輸入變量2的變化范圍
x2max=5.8;??????????????????????????????????????
pb=0.001;??%變異概率
N=20;????%初始種群數目=20
s1=ceil(log2(1000*(x1max-x1min)));?%計算二進制串的長度
s2=ceil(log2(1000*(x2max-x2min)));?
s=s1+s2;????%%種群的位數
zq=randi(Ns);?%產生初始種群,庫函數和for循環均可
%?for?i=1:N
%?????for?j=1:s
%?????????r=rand(1);
%?????????if?r>0.5
%?????????zq(ij)=1;
%?????????else?zq(ij)=0;
%?????????end
%?????end
%?end
%%*****用于二進制轉化為十進制****
for?i=1:s1
????zhuanhuan(i1)?=?2^(s1-i);
end
for?i=s1+1:s
????zhuanhuan(i1)?=?2^(s-i);
end
for?k=1:500?%遺傳算法的次數
????%%********將二進制轉換成十進制
????for??i=1:N
????????j1(i)=zq(i1:s1)*zhuanhuan(1:s1);
????????j2(i)=zq(is1+1:s)*zhuanhuan(s1+1:s);
????end?
????%%****轉化為目標函數值
????x1=x1min+j1*(x1max-x1min)/(2^s1-1);
????x2=x2min+j2*(x2max-x2min)/(2^s2-1);
????%%****計算適配值?
????f=21.5+x1.*sin(4*pi*x1)+x2.*sin(20*pi*x2);
????%%%******依次得到最大值,平均值
????f_max(k)=max(f);
????f_sum=sum(f);
????f_avr(k)=sum(f)/N;
????%%******復制********?
????g=f/f_sum;??%計算選擇概率
??
- 上一篇:相空間重構程序
- 下一篇:三相電壓型逆變器電壓閉環控制simuli
nk仿真模型
評論
共有 條評論