《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 1276|回复: 0
收起左侧

[源码] 遗传算法程序,为什么第47行运行说是等号左侧的表达式不是用于赋值的有效目标?

[复制链接]
发表于 2016-9-21 20:53:00 | 显示全部楼层 |阅读模式
  1. N=80;              %种群规模
  2. T=100;             %迭代次数
  3. pm=0.05;
  4. pc=0.8;
  5. umax=2.048;           
  6. umin=-2.048;        %参数取值范围
  7. L=10;              %单个染色体长度
  8. popu=round(rand(N,2*L));
  9. gen=0;
  10. while gen<=T
  11.     for i=1:L
  12.         popu1(:,i)=2.^(L-1).*popu(:,i);
  13.         L=L-1;
  14.     end
  15.     popu2=sum(popu1,2);
  16.     y=umin+popu2*(umax-umin)/(2^L-1);
  17.     for i=L+1:1:2L
  18.         popu3(:,i)=2.^(i-L+1).*popu(:,i);
  19.         L=i-L+1;
  20.     end
  21.     popu4=sum(popu3,2);
  22.     x=umin+popu4*(umax-umin).*popu(:,i);
  23.     yvalue=100*(x^2-y)^2+(1-x)^2;
  24.     for i=1:N
  25.         if yvalue(i)<0
  26.             yvalue(i)=0;
  27.         end
  28.     end
  29.     fitscore=yvalue/sum(yvalue);
  30.     fitscore=cumsum(fitscore);
  31.     wh=sore(rand(N,1));
  32.     wheel=1;
  33.     fitone=1;
  34.     while wheel<=N
  35.         if wh(wheel)<fitscore(fitone)
  36.             newpopu(wheel,:)=popu(fitone,:);
  37.             wheel=wheel+1;
  38.         else
  39.             fitone=fitone+1;
  40.         end
  41.     end
  42.     popu=newpopu;
  43.     for i=1:2:(N-1)
  44.         if rand<pc
  45.             cpoint=round(rand*(2*L-1));
  46.             newpopu(i,:)=[popu(i,1:cpoint) popu(i+1,cpoint+1:2*L);
  47.             newpopu(i+1,:)=[popu(i+1,1:cpoint) popu(i,cpoint+1:2*L);
  48.         else
  49.         newpopu(i,:)=popu(i,:);
  50.         newpopu(i+1,:)=popu(i+1,:);
  51.         end
  52.     end
  53.     popu=newpopu;
  54.     for i=1:N
  55.         if rand<pm
  56.             mpoint=rand(rand*2*L);
  57.             if mpiont<=0
  58.                 mpoint=1;
  59.             end
  60.             newpopu(i,:)=popu(i,:);
  61.             if newpopu(i,point)==0
  62.                 newpopu(i,point)=1;
  63.             else
  64.                 newpopu(i,point)=0;
  65.             end
  66.         else
  67.         newpopu(i,:)=popu(i,:);
  68.         end
  69.     end
  70.     T=T+1;
  71.     [z(T) index]=max(yvalue);
  72.     z(T)
  73.         
  74.    
复制代码
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号-2 

GMT+8, 2022-8-9 15:08 , Processed in 0.050935 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表