matalb遗传算法学习笔记
%《智能算法及应用》P218遗传算法
%**********初始参数***************
Size=80; %种群大小为80
G=100; %迭代次数100
CodeL=10; %染色体长度10
umax=2.048; %变量上限
umin=-2.048; %变量下限
E=round(rand(Size,2*CodeL));%初始随机种群
%**********主程序********************
for k=1:1:G
time(k)=k; %迭代循环
for s=1:1:Size
m=E(s,:); %每次取出矩阵一行
y1=0;y2=0;
%解码方法
%*****x1******
m1=m(1:1:CodeL);
for i=1:1:CodeL
y1=y1+m1(i)*2^(i-1);
end
x1=(umax-umin)*y1/1023+umin;
%*****x2*******
m2=m(CodeL+1:1:2*CodeL);
for i=1:1:CodeL
y2=y2+m2(i)*2^(i-1);
end
x2=(umax-umin)*y2/1023+umin;
%******目标函数值,个体适应度*****
F(s)=100 * (x1^2 - x2)^2 + (1 - x1)^2;
end
%***********1:选择最佳个体***********
BestJ(k)=max(F);
fi=F; %适应度函数
[Orderfi,Indexfi]=sort(fi); %排序
Bestfi=Orderfi(Size); %最后一个即为最大值
BestS=E(Indexfi(Size),:); %Index(x)从小到大排第x位的值在fi中对应位置,记录每一代中最优个体0.1编码
bfi(k)=Bestfi; %记录每一代中最优个体适应度,此算法中等于每一代最大函数值
%************2:选择与复制操作I***********
fi_sum=sum(fi);
fi_Size=(Orderfi/fi_sum)*Size;%计算个体相对适应度
fi_S=floor(fi_Size); %floor向负无穷四舍五入,依据相对适应度给个体分级
kk=1;
for i=1:1:Size
for j=1:1:fi_S(i) %分级为0的个体剔除,分级为2的被选择两次。
TempE(kk,:)=E(Indexfi(i),:); %选择进入下一代个体的个数,显然不足80。
kk=kk+1;
end
end
%********3:interlace operation***********
pc=0.9;
n=ceil(20*rand);
for i=1:2:(Size-1)
temp=rand;
if pc>temp %交叉条件
TempE(i,n:end)=E(i+1,n:end); %染色体交叉
TempE(i+1,n:end)=E(i,n:end);
end
end
TempE(Size,:)=BestS; %记录最优个体
E=TempE;
%***************4:mutation operation***********
%pm=0.001---------------------------------------低变异率
%pm=0.001-p[1:1:Size]*(0.001)/Size-------------自适应变异率
%pm=0.0;----------------------------------------无变异
pm=0.1;
for i=1:1:Size
for j=1:1:2*CodeL
temp=rand;
if pm>temp %变异条件
if TempE(i,j)==0 %变异实现,0.1反转
TempE(i,j)=1;
else
TempE(i,j)=0;
end
end
end
end
TempE(Size,:)=BestS; %最优个体保留
E=TempE; %种群替换
end
%********************result output******************
Max_Value=Bestfi
BestS
x1
x2
plot(time,BestJ);
xlabel('Time');
ylabel('Best J');
figure
plot(time,bfi);
xlabel('times');
ylabel('Best F');
hold off
********************************************************************************************************************************************
sort用法
floor:向负无穷四舍五入
ceil:向正无穷四舍五入