1、遗传算法概论
遗传算法(GA)可能是最早开发出来的模拟生物遗传系统的算法模型。它首先由Fraser提出,后来有Bremermann和Reed等人
再次提出。最后,Holland对遗传算法做了大量工作并使之推广,因此被认为是遗传算法的奠基人。遗传算法模拟了基因进化,在这
个模型中,个体的性状通过基因型表达。选择算子(模拟适者生存)与交叉算子(模拟繁殖),是遗传算法的主要驱动算法。
2、遗传算法的基本运算过程如下:
使用的函数为f(x)=7*sin(6*x)+6*cos(5*x),x∈[0,2*pi]
遗传算法的MATLAB实现如下:
L=16; %编码长度,即用16位二进制表示
N=32; %种群数目
M=48; %M>=N,M个中间体,运用算子选择出M/2对母体,进行交叉;对M个中间体进行变异
T=100; %最大繁殖代数
Pc=0.8; %交叉概率
Pm=0.03; %变异概率
x1=zeros(1,N);
x2=zeros(1,N);
x4=zeros(1,N);
%grayCode=zeros(1,N)';
grayCode=cell(N,1);
grayCodeNew=cell(N,1);
for i=1:1:N %初始化种群N
x1(1,i)=rand()*2*pi;
x2(1,i)=uint16(x1(1,i)/(2*pi)*65535);
%grayCode(i,:)=num2gray(x2(1,i),L);
grayCode{i}=num2gray(x2(1,i),L);
end
%=========进化,开始进行遗传算子操作
for t=1:1:T
y1=7*sin(6*x1)+6*cos(5*x1);
for i=1:1:M/2
[~,b]=min(y1);
%grayCodeNew(i,:)=grayCode(b,:);
grayCodeNew{i}=grayCode{b};
%grayCodeNew(i+M/2,:)=grayCode(b,:);
grayCodeNew{i+M/2}=grayCode{b};
y1(1,b)=inf;
end
for i=1:1:M/2
p=unidrnd(L);
if rand()< Pc %rand()产生一个随机数
for j=p:1:L
temp=grayCodeNew{i}(j);
grayCodeNew{i}(j)=grayCodeNew{M-i+1}(j);
grayCodeNew{M-i+1}(j)=temp;
end
end
end
%将全部染色体按概率进行变异
for i=1:1:M
for j=1:1:L
if rand()< Pm
grayCodeNew{i}(j)=dec2bin(1-bin2dec(grayCodeNew{i}(j)));
end
end
end
for i=1:1:M
%x4(1,i)=gray2num(grayCodeNew(i,:));
x4(1,i)=gray2num(grayCodeNew{i});
end
x3=double(x4)*2*pi/65535;
y3=11*sin(6*x3)+7*cos(5*x3);
for i=1:1:N %更新种群
%[a,b]=min(y3);
[~,b]=min(y3);
x1(1,i)=x3(1,b);
%grayCode(i,:)=grayCodeNew(b,:);
grayCode{i}=grayCodeNew{b};
y3(1,b)=inf;
end
end
%经过第T代后,由x1计算出y1,找出最小者
%x1
y1=11*sin(6*x1)+7*cos(5*x1);
[a,b]=min(y1);
x0=x1(1,b);
y0=a;
disp(['x0=',num2str(x0)]);
disp(['y0=',num2str(y0)]);
运行结果如下: