查看: 77|回复: 1|关注: 0

[已答复] 使用遗传算法工具箱报错

 关闭 [复制链接]

新手

5 麦片

财富积分


050


1

主题

1

帖子

0

最佳答案
发表于 前天 15:26 | 显示全部楼层 |阅读模式
MATLAB2016A
测试了一个例程,但是无法运行,代码如下:
  1. NVAR= 20;          %变量维数

  2. RANGE=[0; 200];     %变量范围

  3. GGAP=0.8;          %代沟(Generation gap)

  4. XOVR= 1;           %交叉率.

  5. MUTR= 1/NVAR;      %变异率

  6. MAXGEN= 500;       %最大遗传代数( Maximum number of generations)

  7. INSR=0.9;          %插人率

  8. SUBPOP =8;         %子种群数

  9. MIGR=0.2;          %迁移率

  10. MIGGEN= 20;        %在子种群与迁移之间20代

  11. NIND= 20;          %个体数目(Number of individuals)

  12. SEL_F=' sus' ;     %选择函数名

  13. XOV_F = ' recdis' ;    %重组函数名

  14. MUT__F = 'mutbga' ;     %变异函数名

  15. OBJ_F = ' objharv' ;    %目标函数名

  16. FieldDD= rep (RANGE,[1,NVAR]);   %译码矩阵

  17. gen=0;

  18. trace= zeros (MAXGEN,2);         %遗传算法性能跟踪

  19. Chrom= crtrp (NIND*SUBPOP,FieldDD);     %创建初始种群

  20. ObjV=objharv(Chrom);                   %计算目标函数值

  21. while gen < MAXGEN,                      %代循环

  22. FitnV = ranking (ObjV,[2,1],SUBPOP);     % 分配适应度值( Assign fitness values)

  23. SelCh= select (SEL_F, Chrom, FitnV, GGAP, SUBPOP);      %选择

  24. SelCh = recombin (XOV_F,SelCh, XOVR, SUBPOP);           %重组

  25. SelCh= mutate (MUT_F , SelCh, FieldDD,[MUTR],SUBPOP);    %变异

  26. ObjVOff= feval (OBJ_F,SelCh);                            %计算目标函数值

  27. [Chrom,ObjV]= reins (Chrom, SelCh, SUBPOP,[1 INSR], ObjV, ObjVOff);    %替代

  28. gen= gen+1;

  29. [trace(gen,1),I]= min (ObjV);

  30. trace (gen,2)= mean (ObjV);        %在子种群之间迁移个体

  31.      if (rem (gen, MIGGEN) == 0)

  32.          [Chrom,ObjV]= migrate (Chrom, SUBPOP, [MIGR, 1, 1], ObjV);

  33.      end

  34. end

  35. [Y,I]= min (ObjV);    %输出最优解及其序号,Y为最优解,I为种群的序号

  36. figure (1);plot (Chrom (I,:));

  37. hold on;grid;

  38. plot (Chrom (I,:),' bo')

  39. figure (2);plot (- trace (:,1));

  40. hold on;

  41. plot (-trace (:,2),'-.');     %遗传算法性能跟踪分布图

  42. legend ('解的变化');

  43. legend ('种群均值的变化');

  44. xlabel ('迭代次数')

复制代码

错误信息如下:
错误: 文件:objharv.m 行:30 列:33
非法使用保留关键字 "switch"。

出错 Untitled2 (line 20)
ObjV=objharv(Chrom);                   %计算目标函数值



objharv函数如下
  1. % OBJHARV.M      (OBJective function for HARVest problem)

  2. %

  3. % This function implements the HARVEST PROBLEM.

  4. %

  5. % Syntax:  ObjVal = objharv(Chrom,switch)

  6. %

  7. % Input parameters:

  8. %    Chrom     - Matrix containing the chromosomes of the current

  9. %                population. Each row corresponds to one individual's

  10. %                string representation.

  11. %                if Chrom == [], then special values will be returned

  12. %    switch    - if Chrom == [] and

  13. %                switch == 1 (or []) return boundaries

  14. %                switch == 2 return title

  15. %                switch == 3 return value of global minimum

  16. %

  17. % Output parameters:

  18. %    ObjVal    - Column vector containing the objective values of the

  19. %                individuals in the current population.

  20. %                if called with Chrom == [], then ObjVal contains

  21. %                switch == 1, matrix with the boundaries of the function

  22. %                switch == 2, text for the title of the graphic output

  23. %                switch == 3, value of global minimum

  24. %               



  25. % Author:     Hartmut Pohlheim

  26. % History:    18.02.94     file created (copy of vallinq.m)

  27. %             01.03.94     name changed in obj*



  28. function ObjVal = objharv(Chrom,switch);



  29. % global gen;



  30. % Dimension of objective function

  31.    Dim = 20;



  32. % values from MICHALEWICZ

  33.    a = 1.1;

  34.    x0 = 100;

  35.    xend = x0;

  36.    XENDWEIGHT = 0.4/(Dim^0.6);

  37.    

  38. % Compute population parameters

  39.    [Nind,Nvar] = size(Chrom);



  40. % Check size of Chrom and do the appropriate thing

  41.    % if Chrom is [], then define size of boundary-matrix and values

  42.    if Nind == 0

  43.       % return text of title for graphic output

  44.       if switch == 2

  45.          ObjVal = ['HARVEST PROBLEM-' int2str(Dim)];

  46.       % return value of global minimum

  47.       elseif switch == 3

  48.          ObjVal = -sqrt(x0*(a^Dim-1)^2/(a^(Dim-1)*(a-1)));

  49.       % define size of boundary-matrix and values

  50.       else   

  51.          % lower and upper bound, identical for all n variables        

  52.          ObjVal1 = [0; 10*Dim];

  53.          ObjVal = rep(ObjVal1,[1 Dim]);

  54.       end

  55.    % if Dim variables, compute values of function

  56.    elseif Nvar == Dim

  57.       ObjVal = zeros(Nind,1);

  58.       X = rep(x0,[Nind 1]);

  59.       for irun = 1:Nvar,

  60.          X = a*X - Chrom(:,irun);

  61.       end

  62.       X;

  63.       ObjVal = -(sum(sqrt(Chrom)')' - XENDWEIGHT * abs(X-x0));

  64.    % otherwise error, wrong format of Chrom

  65.    else

  66.       error('size of matrix Chrom is not correct for function evaluation');

  67.    end   

  68. % End of function
复制代码

论坛优秀回答者

18

主题

2237

帖子

453

最佳答案
  • 关注者: 89
发表于 昨天 09:20 | 显示全部楼层
emmm,你要知道switch是关键词,它不能被用作变量了。所以将switch换个变量名吧。。。。
多看帮助文档
说明你的matlab版本
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

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