myga.m
上传用户:qzfzqd
上传日期:2013-04-17
资源大小:7k
文件大小:2k
源码类别:

matlab例程

开发平台:

Matlab

  1. function [f,x]=myga(num,bounds,N,CP,P)
  2. %[f,x]=ga(num,bounds,fun,N,CP,P) 
  3. %[f,x]=myga([],bounds,[],[],[])
  4. %该遗传算法适用于:
  5. %           目标函数为求最大值,且解非负整数解
  6. %bounds     边界约束
  7. %Myfun      为目标函数
  8. %num        初始种群数
  9. %N          最大迭代次数
  10. %CP         交叉概率
  11. %P          突变概率
  12. %f          目标最优解
  13. %x          最优解向量
  14. %           作者:机自01-2班曾新海
  15. %           zxh21st@163.com
  16. m=nargin;
  17. if m<5
  18. disp('-_-  错误!')
  19. disp('>> 输入变量太少')
  20. disp('>>  按回车键查看帮助')
  21.     pause
  22.     help ga
  23.     f='-_- ';
  24.     x='没有规矩不成方圆';
  25.     break;
  26. end
  27. if isempty(CP)
  28.     CP=0.25;
  29. end
  30. if isempty(P)
  31.     P=0.01;
  32. end
  33. if isempty(N)
  34.     N=1000;
  35. end
  36. if any(bounds(:,1))<0
  37.     disp('-_-  错误!')
  38. disp('>>  按回车键查看帮助')
  39.     pause
  40.     help ga
  41.     f='-_- ';
  42.     x='没有规矩不成方圆';
  43.     break;
  44. end
  45. if isempty(num)
  46.     num=100;
  47. end
  48. pop=INTinti(num,bounds);
  49. fmax=pop(:,end);
  50. endpop=pop;
  51. n=size(endpop,2);
  52. count=0;x=[];f=zeros(1,num);
  53. while(count<N)
  54.     pop=mutation(endpop);
  55.     [cpop ,len,v]=cross(pop,bounds,CP);
  56.     [pops]=changes(cpop,bounds,len,P);
  57.     for i=1:num
  58.         sol=pops(i,:);
  59.     [f(i)]=Myfun(sol);
  60.     %惩罚策略
  61. for jj=1:length(sol)
  62.     if sol(jj)<bounds(jj,1)
  63.         f(i)=-inf;
  64.     end
  65.     if sol(jj)>bounds(jj,2)
  66.         f(i)=-inf;
  67.     end
  68. end
  69.             if fmax(i)<f(i)
  70.             fmax(i)=f(i);
  71.             endpop(i,1:end-1)=pops(i,:);
  72.         end
  73. end
  74. endpop(:,end)=fmax(:);
  75. count=count+1;
  76. % [f,ii]=max(fmax);
  77. % x=endpop(ii,1:end-1);
  78. end
  79. [f,ii]=max(fmax);
  80. x=endpop(ii,1:end-1);