找回密码
 注册
Simdroid-非首页
查看: 118|回复: 2

新手编写遗传算法程序有误,求指导

[复制链接]
发表于 2013-6-26 17:06:48 | 显示全部楼层 |阅读模式 来自 江苏徐州
是利用遗传算法求解函数最大值的程序,运行时总出错,求指导
function result = sga(n,a,b,pc,pm,e)
%n—群体规模;a—搜索上限;b—搜索下限;
%pc—交叉概率;pm—变异概率;e—计算精度;
for i=1:50  %求出群体的码串最小长度m
   if (b-a)/e>2^(i)
       m=i+1;
   else  
       i=i+1;
   end   
end     
popusize=n;chromlength=m;j=1;
popu=round(rand(popusize,chromlength));  %随机产生n行m列的初始群体
while j<=30  %设置程序中止条件
      py=chromlength;
  for i=1:py  %进行二进制转换成十进制的解码操作
      popu1(:,i)=2.^(py-1).*popu(:,i);
      py=py-1;
  end
    popu2=sum(popu1,2);
    x=a+popu2*(b-a)/(2^l-1);
    yvalue=2*x.^2.*cos(3*x)+x.*sin(5*x)+8;  %计算群体中每个个体的适应度
  for i=1:popusize  %执行复制操作
      if yvalue(i)<0
          yvalue(i)=0;
      end
  end
  fitscore=yvalue/sum(yvalue);%个体被选中的概率
  fitscore=cumsum(fitscore);% 群体中个体的累积概率
  wh=sort(rand(popusize,1));% 从小到大排列
  wheel=1;fitone=1;
  while wheel<=popusize  %执行转盘式选择操作
        if  wh(wheel)<fitscore(fitone)
          newpopu(wheel,:)=popu(fitone,:);
            wheel=wheel+1;
        else
            fitone=fitone+1;
        end     
  end   
  popu=newpopu;
  for i=1:2:popusize-1  %执行交叉操作
      if rand<pc
          cpoint=round(rand*chromlength);
          newpopu(i,:)=[popu(i,1:cpoint) popu(i+1,cpoint+1:chromlength)];
          newpopu(i+1,:)=[popu(i+1,1:cpoint) popu(i,cpoint+1:chromlength)];
      else
          newpopu(i,:)=popu(i,:);
          newpopu(i+1,:)=popu(i+1,:);
      end     
  end  
  popu=newpopu;
  for i=1:popusize  %执行变异操作
      if  rand<pm
          mpoint=round(rand*chromlength);
          if mpoint<=0;
              mpoint=1;
          end
              newpopu(i,:)=popu(i,:);
          if  newpopu(i,mpoint)==0
              newpopu(i,mpoint)=1;
          else
             newpopu(i,mpoint)=0;
         end     
      else
          newpopu(i,:)=popu(i,:);
      end
  end   
  [y(j)index]=max(yvalue);  %求出群体中适应值最大的个体及其适应值
  bestindividual=newpopu(index,:);
   py=chromlength;
  for i=1:py %进行二进制转换成十进制的解码操作
bestindividual(1,i)=2.^(py-1).*bestindividual(:,i)
     py=py-1;
  end  
r(j)=a+sum(bestindividual,2)*(b-a)/(2^l-1);  
   popu=newpopu;j=j+1;% 重新赋值并返回
end  
fplot('2*x.^2.*cos(3*x)+x.*sin(5*x)+8',[a b]);
hold on;plot(r,y,'r*');hold off
xlabel('x');ylabel('y')
[y index]=max(y);  %计算最大值及其位置
result=[r(index) y];% 返回优化结果

 楼主| 发表于 2013-6-27 16:29:57 | 显示全部楼层 来自 江苏徐州
Simdroid开发平台
自己已解决

点评

用遗传算法解决资源调度问题怎么样编程,求指导啊,加我扣扣-1264756132  发表于 2016-5-13 14:53

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-11 11:03 , Processed in 0.033847 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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