实数编码的遗传算法与MATLAB

た 入场券 2023-07-13 03:14 132阅读 0赞

实数编码的遗传算法与MATLAB

(一)函数示例

  1. Z=x.^2-10*cos(2*pi*x)+10+y.^2-10*cos(2*pi*y)+10

(二)MATLAB的实现
1)GAss(主函数)

  1. clc
  2. clear
  3. x=-5.12:0.01:5.12;
  4. y=-5.12:0.01:5.12;
  5. [X,Y]=meshgrid(x,y);
  6. Z=X.^2-10*cos(2*pi*X)+10+Y.^2-10*cos(2*pi*Y)+10;
  7. mesh(X,Y,Z)
  8. %%%%%%%%%%%%%%%初始化种群%%%%%%%%%%%
  9. N=50;dim=2;B=5.12;Pc=0.75;pm=0.3
  10. Po=-B+rand(N,2)*2*B;
  11. %%%%%%%%%%%%函数评价%%%%%%%%%%%%%%%
  12. for it=1:10
  13. for i=1:N
  14. fit(i)=GAmb(Po(i,1),Po(i,2));
  15. end
  16. [ymax,ind1]=max(fit);
  17. figure(1)
  18. set(gca,'nextplot','replace');
  19. mesh(X,Y,Z)
  20. hold on
  21. plot3(Po(:,1),Po(:,2),fit,'b*')
  22. plot3(Po(ind1,1),Po(ind1,2),fit(ind1),'mo')
  23. %%%%%%%%%%%%%%选择%%%%%%%%%%%%%%%
  24. p=fit/sum(fit); %%计算比例概率
  25. Lp(1)=fit(1);
  26. for i=2:N
  27. Lp(i)=Lp(i-1)+fit(i); %%计算累积概率
  28. end
  29. for i=1:N
  30. ind=find((Lp-rand)>0); %%找出轮盘赌选择的指标
  31. Co(i)=ind(1);
  32. nPo(i,:)=Po(ind(1),:); %%将对应指标的染色体取出来赋值给新的种群
  33. end
  34. %%%%%%%%%%%%%%交叉%%%%%%%%%%%%%%%%%%
  35. for i=1:2:N
  36. [x1,y1]=GAjc(nPo(i,:),nPo(i+1,:),Pc);
  37. Nnpo(i,:)=x1;
  38. Nnpo(i+1,:)=y1;
  39. end
  40. %%%%%%%%%%%%%%变异%%%
  41. for i=1:N
  42. Npo(i,:)=GAby(Nnpo(i,:),pm);
  43. end
  44. %%%%%%%%%%%%%%%%%%%%%
  45. %保留最好的个体
  46. Npo(1,:)=Po(ind1,:);
  47. Npo(41:N,:)=-B+rand(10,2)*2*B;%%避免早熟
  48. %%新的种群要赋值给原来的变量
  49. Po=Npo;
  50. end

2)GAmb(目标函数)

  1. function z1=GAmb(x1,y1)
  2. z1=x1^2-10*cos(2*pi*x1)+10+y1^2-10*cos(2*pi*y1)+10;

3)GAjc(交叉函数)

  1. function [x1,y1]=GAjc(x,y,Pc)
  2. if rand<Pc
  3. lameda1=0.4;
  4. x1=lameda1*x+(1-lameda1)*y;
  5. y1=lameda1*y+(1-lameda1)*x;
  6. else
  7. x1=x;
  8. y1=y;
  9. end

4)GAby(变异函数)

  1. function x=GAby(x,pm)
  2. if rand<pm
  3. x=x+[(1-2*rand)*10e-3 (1-2*rand)*10e-3 ];
  4. end

5)结果图例
在这里插入图片描述

发表评论

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

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

相关阅读

    相关 遗传算法MATLAB

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