遗传算法 简单函数优化
【摘要】
%f(x)=11sin(6x)+7cons(5x),0<=x<=2*pi%注意程序中num2gray函数和gray2num函数可以参照我上面的另外两个博文中有代码 %%初始化参数L=16; %编码为16位二进制数N=32; %初始种群规模M=48; %M个中间体,运用算子选择出M/2对母体,进行交叉;对M个中间体进行变...
-
%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的数,用于下面进行交叉的位置
-
if rand()<Pc % Pc是交叉概率
-
%将选定的染色体的点
文章来源: wenyusuran.blog.csdn.net,作者:文宇肃然,版权归原作者所有,如需转载,请联系作者。
原文链接:wenyusuran.blog.csdn.net/article/details/43406007
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)