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

matlab例程

开发平台:

Matlab

  1. function [pops]=changes(cpop,bounds,len,p)
  2. %基因突变函数
  3. %function [pops]=changes(pop,bounds,len,p)
  4. %pop        种群数目
  5. %bounds     边界约束
  6. %len        每个变量的编码长度
  7. %           如len为[4 3 3];表示有三个变量,第一个变量的二进制编码长度为4,依次类推
  8. %p          突变概率
  9. %pops       返回突变后的基因
  10. %p1         基因突变数目
  11. %           作者:机自01-2班曾新海
  12. %           zxh21st@163.com
  13. if isempty(p)
  14.     p=0.01;
  15. end
  16. [n,m]=size(cpop);
  17. pop=cpop;
  18. p1=round(sum(len)*n*p);
  19. k=0;q=[];v=[];
  20. while(k<p1)
  21.     k=k+1;
  22.     q(k)=round(rand*(sum(len)*n-1))+1;
  23.     for i=1:k-1
  24.         if q(k)==q(i)
  25.             q(k)=[];
  26.             k=k-1;
  27.         end
  28.     end
  29. end
  30. for i=1:n
  31. [B(i,:),len]=B2F(pop(i,:),bounds);
  32. end
  33. v=reshape(B,1,n*sum(len));
  34. for i=1:p1
  35.     if v(q(i))==0
  36.         v(q(i))=1;
  37.     else
  38.         v(q(i))=0;
  39.     end
  40. end
  41. v=reshape(v,n,sum(len));
  42. for i=1:n
  43.    pop(i,:)=F2B(v(i,:),bounds,len);
  44. end
  45. pops=pop
  46. cpop