基于遗传算法的路径规划MATLAB实现

基于遗传算法的路径规划MATLAB实现 主程序:

  1.  clear all;   
  2. close all;   
  3. t=23;       %过程点个数=t-1   
  4. s=500;      %种群规模   
  5. pc=0.90;    %交叉概率   
  6. pm=0.20;    %变异概率   
  7. pop=zeros(s,t);   
  8. for i=1:s      
  9.   pop(i,1:t-1)=randperm(t-1);   
  10. end   
  11. for k=1:1:2000   %进化代次数k   
  12. if mod(k,10)==1      
  13. k   
  14. end  
  15.    pop=lujingdis(pop);   
  16. c=15;%选择淘汰个数  
  17.    pop=lujingselect(pop,c);   
  18. p=rand;   
  19. if p>=pc  
  20.    pop=lujingcross(pop);   
  21. end   
  22. if p>=pm  
  23.    pop=lujingmutate(pop);   
  24. End    
  25.   
  26. end   
  27. pop    
  28.   
  29. min(pop(:,t))   
  30. J=pop(:,t);   
  31. fi=1./J;   
  32.   
  33.   
  34. [Oderfi,Indexfi]=sort(fi);   %安排fi从小到大   
  35. BestS=pop(Indexfi(s),:);    %使BestS=E(m),m即是属于max(fi)的  
  36. Indexfi I=BestS;   
  37. x=[2 3 6 10 14 17 22 20 23 25 30 28 25 21 29 16 18 15 9 11 6 5 ];    
  38. y=[5 26 14 29 27 24 28 22 26 30 30 17 13 15 4 13 3 1 6 2 2 7];   
  39. %过程点坐标   
  40. % x=[1 2 3 4 6 9 11 10 8 9 6 4]; %12个过程点的坐标   
  41. % y=[1 2 3 4 8 10 11 9 5 2 1 2];   
  42. for i=1:1:t-1   
  43. x1(i)=x(I(i));   
  44. y1(i)=y(I(i));   
  45. end   
  46. x(t)=x(I(1));   
  47. y(t)=y(I(1));   
  48. a = [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1     
  49.      1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1     
  50.      1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1     
  51.      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1      
  52.      1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1   
  53.      1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1    
  54.      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1    
  55.      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1    
  56.      1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1     
  57.      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1      
  58.      0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1    
  59.      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1    
  60.      1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1     
  61.      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1    
  62.      1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1     
  63.      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1    
  64.      1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1    
  65.      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0    
  66.      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0    
  67.      1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0    
  68.      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0   
  69.   
  70.    
  71.      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1    
  72.      1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1    
  73.      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1    
  74.      1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1     
  75.      1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1    
  76.      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1    
  77.      1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1    
  78.      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1    
  79.      0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1];%31*31栅格   
  80. %a = [1 1 1 1 1 1 1 1 1 1     
  81.       1 1 1 0 0 1 1 1 0 0   
  82.       1 0 1 0 0 1 1 1 1 1    
  83.       0 0 1 1 1 1 0 1 1 0    
  84.       1 1 1 1 1 1 1 1 1 1    
  85.       1 1 1 1 1 1 1 1 1 1    
  86.       1 0 0 1 1 0 1 1 1 1    
  87.       1 1 1 1 1 1 1 1 1 0    
  88.       1 1 1 1 1 1 1 1 1 1    
  89.       0 1 1 1 1 1 0 0 1 1];%11*11栅格   
  90. b = a;   
  91. b(end+1,end+1) = 0;   
  92. colormap([0 0 0;1 1 1]),pcolor(b)   
  93. axis image xy;%绘制栅格图   
  94. hold on;   
  95. figure(1);   
  96. plot(x,y,’-or‘);    
  97. 适应度函数程序:lujingdis.m   
  98. function [pop]=qiujuli(pop)   
  99. [s,t]=size(pop);   
  100. for i=1:1:s   
  101. dd=0;   
  102.     for j=1:1:t-2   
  103. dd=dd+lujingcalculate(pop(i,j),pop(i,j+1));   
  104.     end   
  105.   
  106.    
  107.     pop(i,t)=dd;   
  108. End  

距离计算程序:lujingcalculate.m

  1. function [d]=juli(m,n)   
  2. x=[2 3 6 10 14 17 22 20 23 25 30 28 25 21 29 16 18 15 9 11 6 5 ];   
  3. y=[5 26 14 29 27 24 28 22 26 30 30 17 13 15 4 13 3 1 6 2 2 7];   
  4. %x=[1 2 3 4 6 9 11 10 8 9 6 4];    
  5. % y=[1 2 3 4 8 10 11 9 5 2 1 2];   
  6. d=sqrt((x(m)-x(n))^2+(y(m)-y(n))^2);  

选择算子程序:lujingselect.m

  1. function [pop]=select(pop,k)   
  2. [s,t]=size(pop);   
  3. m11=(pop(:,t));   
  4. m11=m11′;   
  5. mmax=zeros(1,k);   
  6. mmin=zeros(1,k);   
  7. num=1;   
  8. while num<k+1       
  9.      [a,mmax(num)]=max(m11);   
  10.      m11(mmax(num))=a;   
  11. num=num+1;   
  12. end   
  13. num=1;   
  14. while num<k+1  
  15.      [b,mmin(num)]=min(m11);  
  16.      m11(mmin(num))=a;   
  17. num=num+1;   
  18. end   
  19. for i=1:k  
  20.      pop(mmax(i),:)=pop(mmin(i),:);   
  21. End    

交叉算子程序:lujingcross.m

  1. function [pop]=cross(pop)   
  2. [s,t]=size(pop);   
  3. pop1=pop;   
  4. for i=1:2:s  
  5.      m=randperm(t-3)+1;   
  6. crosspoint(1)=min(m(1),m(2));   
  7. crosspoint(2)=max(m(1),m(2));  
  8.      for j=1:crosspoint(1)   
  9.         while find(pop(i,crosspoint(1)+1:crosspoint(2))==pop(i,j))   
  10. zhi=find(pop(i,crosspoint(1)+1:crosspoint(2))==pop(i,j));    
  11.            y=pop(i+1,crosspoint(1)+zhi);  
  12.            pop(i,j)=y;     
  13.       end    
  14.    end   
  15.    for j=crosspoint(2)+1:t-1   
  16.         while find(pop(i,crosspoint(1)+1:crosspoint(2))==pop(i,j))   
  17. zhi=find(pop(i,crosspoint(1)+1:crosspoint(2))==pop(i,j));   
  18.             y=pop(i+1,crosspoint(1)+zhi);  
  19.             pop(i,j)=y;   
  20.         end  
  21.      end  
  22.  end   
  23. [pop]=lujingdis(pop);   
  24. for i=1:s   
  25.     if pop1(i,t)<pop(i,t)   
  26. pop(i,:)=pop1(i,:);  
  27.      end   
  28. End    

变异算子程序:lujingmutate.m

  1. function [pop] = mutate(pop)   
  2. [s,t]=size(pop);   
  3. pop1=pop;   
  4. for i=1:2:s  
  5.      m=randperm(t-3)+1;   
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容