[已答复] 关于雷英杰《MATLAB遗传算法工具箱及应用》中例题的问题

[复制链接]
tingting8763 发表于 2010-5-10 21:43:38
最近在学遗传算法,看了雷英杰的《MATLAB遗传算法工具箱及应用》,照着其第七章第一个例子做了一下,可是结果却和书上不一样,所得的点大部分都不在函数曲线上,另外还提示:??? Index exceeds matrix dimensions.
我是完全照上面做的啊,怎么会这样呢?恳请大侠们赐教!不甚感激!

5 条回复


tingting8763 发表于 2010-5-10 21:44:32
原例题及代码如下:
%利用遗传算法计算下面函数的最大值: f(x)=xsin(10*pi*x)+2.0,x-[-1,2]
%选择二进制编码,种群中个体数目为40,每个种群的长度为20,使用代沟为0.9,最大遗传代数为25

figure(1);
fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]);   %画出函数曲线
%定义遗传算法参数
NIND=40;                      %个体数目(number of individuals)
MAXGEN=25;                    %最大遗传代数(maximum number.of generations)
PRECI=20;                     %变量的二进制位数(precision of variables)
GGAP=0.9;                     %代沟(generation gap)
trace=zeros(2,MAXGEN);                                       %寻优结果的初始值
FieldD=[20;-1;2;1;0;1;1];                                    %区域描述器(build field descriptor)
Chrom=crtbp(NIND,PRECI);                                      %初始种群
gen=0;                                                        %代计数器
variable=bs2rv(Chrom,FieldD);                                 %计算初始种群的十进制转换
ObjV=variable.*sin(10*pi*variable)+2.0;                       %计算目标函数值
while gen<MAXGEN,
      FitnV=ranking(-ObjV);                                    %分配适应度值(assign fitness valuess)
      SelCh=select('sus',Chrom,FitnV,GGAP);                    %选择
      SelCh=recombin('xovsp',SelCh,0.7);                       %重组
      SelCh=mut(SelCh);                                        %变异
      variable=bs2rv(SelCh,FieldD);                             %子代个体的十进制转换
      ObjVSel=variable.*sin(10*pi*variable)+2.0;                %计算子代的目标函数值
      [Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);         %重插入子代的新种群
      gen=gen+1;                                                %代计数器增加
      %输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群的序号
      [Y,I]=max(ObjV);hold on;                             
      plot(variable(I),Y,'bo');
      trace(1,gen)=max(ObjV);                               %遗传算法性能跟踪
      trace(2,gen)=sum(ObjV)/length(ObjV);
end
variable=bs2rv(Chrom,FieldD);                               %最优个体的十进制转换
hold on; grid;
plot(variable',ObjV','b*');
figure(2);
plot(trace(1,:)');
hold on;
plot(trace(2,:)','-.');grid;
legend('解的变化','种群均值的变化')

yuthreestone 发表于 2010-5-11 12:58:49
将这一行注释掉

  1. plot(variable(I),Y,'bo');
复制代码

tingting8763 发表于 2010-5-11 20:32:39

回复 3# yuthreestone 的帖子

恩,非常感谢,我试试看

zhangtz2008 发表于 2012-10-30 10:12:10
这书错误很多,妈的

小白来学习了 发表于 2020-11-6 09:20:20

试过了,将plot(variable(I),Y,'bo');换成%plot(variable(I),Y,'bo');就行,谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表