遗传算法 简单函数优化

举报
格图洛书 发表于 2021/12/31 22:05:47 2021/12/31
【摘要】 %f(x)=11sin(6x)+7cons(5x),0<=x<=2*pi%注意程序中num2gray函数和gray2num函数可以参照我上面的另外两个博文中有代码 %%初始化参数L=16; %编码为16位二进制数N=32; %初始种群规模M=48; %M个中间体,运用算子选择出M/2对母体,进行交叉;对M个中间体进行变...

   
  1. %f(x)=11sin(6x)+7cons(5x),0<=x<=2*pi
  2. %注意程序中num2gray函数和gray2num函数可以参照我上面的另外两个博文中有代码
  3. %%初始化参数
  4. L=16; %编码为16位二进制数
  5. N=32; %初始种群规模
  6. M=48; %M个中间体,运用算子选择出M/2对母体,进行交叉;对M个中间体进行变异
  7. T=100; %进化代数
  8. Pc=0.8; %交叉概率
  9. Pm=0.03; %变异概率
  10. %%将十进制编码成16位的二进制,再将16位的二进制转成格雷码
  11. for i=1:1:N
  12. x1(1,i)=rand()*2*pi;
  13. x2(1,i)=uint16(x1(1,i)/(2*pi)*65535);
  14. grayCode(i,:)=num2gray(x2(1,i),L);
  15. end
  16. %% 开始遗传算子操作
  17. for t=1:1:T
  18. y1=11*sin(6*x1)+7*cos(5*x1)
  19. fori=1:1:M/2
  20. [a,b]=min(y1) ;%找到y1中的最小值a,及其对应的编号b
  21. grayCodeNew(i,:)=grayCode(b,:);%将找到的最小数放到grayCodeNew中
  22. grayCodeNew(i+M/2,:)=grayCode(b,:);%与上面相同就可以有M/2对格雷码可以作为母体
  23. y1(1,b)=inf;%用来排除已找到的最小值
  24. end
  25. fori=1:1:M/2
  26. p=unidrnd(L);%生成一个大于零小于L的数,用于下面进行交叉的位置
  27. if rand()<Pc % Pc是交叉概率
  28. %将选定的染色体的点

文章来源: wenyusuran.blog.csdn.net,作者:文宇肃然,版权归原作者所有,如需转载,请联系作者。

原文链接:wenyusuran.blog.csdn.net/article/details/43406007

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。