%f(x)=11sin(6x)+7cons(5x),0<=x<=2*pi
%注意程序中num2gray函数和gray2num函数可以参照我上面的另外两个博文中有代码
%%初始化参数
L=16; %编码为16位二进制数
N=32; %初始种群规模
M=48; %M个中间体,运用算子选择出M/2对母体,进行交叉;对M个中间体进行变异
T=100; %进化代数
Pc=0.8; %交叉概率
Pm=0.03; %变异概率
%%将十进制编码成16位的二进制,再将16位的二进制转成格雷码
for i=1:1:N
x1(1,i)=rand()*2*pi;
x2(1,i)=uint16(x1(1,i)/(2*pi)*65535);
grayCode(i,:)=num2gray(x2(1,i),L);
end
%% 开始遗传算子操作
for t=1:1:T
y1=11*sin(6*x1)+7*cos(5*x1)
fori=1:1:M/2
[a,b]=min(y1) ;%找到y1中的最小值a,及其对应的编号b
grayCodeNew(i,:)=grayCode(b,:);%将找到的最小数放到grayCodeNew中
grayCodeNew(i+M/2,:)=grayCode(b,:);%与上面相同就可以有M/2对格雷码可以作为母体
y1(1,b)=inf;%用来排除已找到的最小值
end
fori=1:1:M/2
p=unidrnd(L);%生成一个大于零小于L的数,用于下面进行交叉
遗传算法 简单函数优化
最新推荐文章于 2025-05-27 09:43:21 发布