遗传算法求函数极值的 matlab 代码
%Schaffer f6 函数求最大值
%Schaffer f6 函数是一个具有强烈震荡的多峰函数,
%具有一个全局极大点在 xi=(0,0,...)处,其函数值为 f(xi)=1
clear all;
clear all;
%确定种群数、代数、交叉概率和变异概率
Size=80;
G=1000;
CodeL=15; %染色体串长度为 36 位
%2^(15-1)<(10-(-10))*10^3<=2^15-1,精度为小数点后 3 位
pc=0.60;
pm=0.001;
umax=10;
umin=-10;
E=round(rand(Size,2*CodeL)); %生成随机 80 行 30 列的二进制数列
%Main Program
for k=1:1:G
time(k)=k; %迭代代数,最大为 G=1000 代
for s=1:1:Size
m=E(s,:); %m 为 E 的依次一整行二进制数,共 80 行
y1=0;y2=0; %中间变量赋初值
%解码
m1=m(1:1:CodeL); %前 15 位
for i=1:1:CodeL
y1=y1+m1(i)*2^(CodeL-i); %转为十进制数
end
x1=(umax-umin)*y1/1023+umin; %x1 解码
m2=m(CodeL+1:1:2*CodeL);
for i=1:1:CodeL
y2=y2+m2(i)*2^(CodeL-i);
评论0