资源简介

遗传算法求解Rastrigin函数遗传算法求解Rastrigin函数遗传算法求解Rastrigin函数遗传算法求解Rastrigin函数

资源截图

代码片段和文件信息

function ga
%遗传算法极小值问题
clear
clc
bn=50;     %个体串长度
inn=50;    %初始种群大小
gnmax=600; %最大迭代次数
pc=0.8;   %交叉概率
pm=0.1;   %变异概率
%产生初始种群

fps=10.24*(rand(innbn)-0.5*ones(innbn));  %十进制编码,使初始解在[-5.12,5.12]范围内
select=fps;
gn=0;
%第一代解
n = 30;
fr = 4000;
while gn%分别将种群代入目标函数计算适应度
q = 0;
p = 0;
for i = 1:50
   for j = 1:50
       x(j)=select(ij:j);
       q = q+x(j)^2+10;
       p = p+10*cos(2*pi*x(j));
   end
       y(i)=q-p;
       q=0;
       p=0;    
end
[pmini]=min(y);%将当前种群中最优解保存在pmin
pmin1=pmin;
vari=mean(select(i:));%计算最优染色体的平均值并送给vari,变异自适应调节域值
l=i;%将最优染色体行坐标传送给l
[pmaxz]=max(y);%求取适应度最差的染色体
select(z:)=select(l:);%将最优染色体引入种群参与竞争
%进行交叉,进一步选择优秀的解
for i=1:2:50
    pcc=pro(pc);%根据交叉概率判断是否进行交叉
    if pcc==1
        if 0<=l-i<=1%判断是不是最优染色体,如果是不进行交叉
     cross(i:)=select(i:);
     cross(i+1:)=select(i+1:);
        else
    %将30个变量分为五个范围,相临两个染色体分别从五位进行交叉
    crb1=round(rand*(bn/5-1))+1;  %在[16]范围内随机产生一个交叉位
    cross(icrb1:crb1)=0.1*select(icrb1:crb1)+0.9*select(i+1crb1:crb1);
    for j=1:9
   cross(i+1j*crb1:j*crb1)=0.1*select(ij*crb1:j*crb1)+0.9*select(i+1j*crb1:j*crb1);
    cross(i(j+1)*crb1:(j+1)*crb1)=0.1*select(i(j+1)*crb1:(j+1)*crb1)+0.9*select(i+1(j+1)*crb1:(j+1)*crb1);
   
    end
      %  %%%%
   %  cross(i+1crb1:crb1)=0.1*select(icrb1:crb1)+0.9*select(i+1crb1:crb1);
     %cross(i2*crb1:2*crb1)=0.1*select(i2*crb1:2*crb1)+0.9*select(i+12*crb1:2*crb1);
     %cross(i+12*crb1:2*crb1)=0.1*select(i2*crb1:2*crb1)+0.9*select(i+12*crb1:2*crb1);
     %cross(i3*crb1:3*crb1)=0.1*select(i3*crb1:3*crb1)+0.9*select(i+13*crb1:3*crb1);
     %cross(i+13*crb1:3*crb1)=0.1*select(i3*crb1:3*crb1)+0.9*select(i+13*crb1:3*crb1);
     %cross(i4*crb1:4*crb1)=0.1*select(i4*crb1:4*crb1)+0.9*select(i+14*crb1:4*crb1);
     %cross(i+14*crb1:

评论

共有 条评论