二进制遗传算法与MATLAB

古城微笑少年丶 2023-07-13 03:11 133阅读 0赞

二进制遗传算法与MATLAB

(一)简单示例:
在这里插入图片描述
程序:x=-1:0.001:2; y=x.*sin(10*pi*x)+2; plot(x,y)
在这里插入图片描述
(二)MATLAB的实现
1)主函数

  1. dim=22;%维度
  2. N=50;%50
  3. Pc=0.75;
  4. pm=0.03;
  5. Po=round(rand(N,dim));%随机产生Ndim
  6. for it=1:100
  7. %%解码
  8. for i=1:N;
  9. x(i)=Gjz(Po(i,:),dim);%%解码
  10. y(i)=Gmb(x(i))%%适应函数的计算
  11. end
  12. %%目标函数图像
  13. xx=-1:0.001:2;
  14. yy=xx.*sin(10*pi*xx)+2;
  15. figure(1)
  16. set(gca,'nextplot','replace');
  17. plot(xx,yy)
  18. hold on
  19. plot(x,y,'r*')
  20. %%选择操作
  21. p=y/sum(y);%%比例概率
  22. Lp(1)=p(1);
  23. for i=2:N
  24. Lp(i)=Lp(i-1)+p(i)%%%计算累计概率
  25. end
  26. for i=1:N
  27. ind=find((Lp-rand)>0);%%%找出轮盘指标
  28. Co(i)=ind(1);%%%%%%%%计数器
  29. nPo(i,:)=Po(ind(1),:);%%将对应指标的染色体取出来,并赋值给新的种群
  30. end
  31. %%%%%交叉选择
  32. for i=1:2:N
  33. [a,b]=Gjc(nPo(i,:),nPo(i+1,:),dim,Pc)
  34. Npo(i,:)=a;
  35. Npo(i+1,:)=b;
  36. end
  37. %%%%%%-Npo(行,列)
  38. %%%%%%变异操作
  39. for i=1:N
  40. NNPo(i,:)=Gby(Npo(i,:),dim,pm);
  41. end
  42. Po=NNPo;
  43. end

2)Gjz函数(二进制转换过程)

  1. function [sum1]=Gjz(a,dim)
  2. sum1=0;
  3. for i=1:dim
  4. sum1=sum1+a(i)*2^(dim-i);
  5. end
  6. sum1=-1+sum1*(2-(-1))/(2^dim-1);
  7. end

3)Gmb函数(目标函数)

  1. function y=Gmb(x)
  2. y=x*sin(10*pi*x)+2;
  3. end

4)Gjc函数(交叉选择)

  1. function [a,b]=Gjc(a,b,dim,Pc)%%%交叉函数
  2. if rand<Pc
  3. m=round(rand*(dim-1))+1;
  4. temp=a(m:dim);
  5. a(m:dim)=b(m:dim);
  6. b(m:dim)=temp;
  7. end

5)Gby函数(变异)

  1. function [a]=Gby(a,dim,pm)
  2. if rand<pm
  3. m=round(rand*(dim-1))+1;
  4. a(m)=abs(a(m)-1);
  5. end

6)结果图例

在这里插入图片描述
这里参数因子没选取好,第一次得到的结果不是很理想

发表评论

表情:
评论列表 (有 0 条评论,133人围观)

还没有评论,来说两句吧...

相关阅读

    相关 遗传算法MATLAB

    遗传算法与MATLAB (一)遗传算法:遗传算法是模拟达尔文生物进化论的自然选择和遗传机理的生物进化过程的计算模型,是一种模拟自然进化过程搜索最优解的方法。 (二)应