注册 登录
编程论坛 Matlab

遗传算法不解之处

逆水寒刘 发布于 2015-11-15 22:57, 1976 次点击
【问题】在-5<=Xi<=5,i=1,2区间内,求解
       f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.^2+x2.^2)))-exp(0.5*(cos(2*pi*x1)+cos(2*pi*x2)))+22.71282的最小值。
【分析】种群大小10,最大代数1000,变异率0.1,交叉率0.3
【程序清单】
   %源函数的matlab代码
      function [eval]=f(sol)
        numv=size(sol,2);
        x=sol(1:numv);
        eval=-20*exp(-0.2*sqrt(sum(x.^2)/numv)))-exp(sum(cos(2*pi*x))/numv)+22.71282;
  %适应度函数的matlab代码
      function [sol,eval]=fitness(sol,options)
        numv=size(sol,2)-1;
        x=sol(1:numv);
        eval=f(x);
        eval=-eval;
  %遗传算法的matlab代码
      bounds=ones(2,1)*[-5 5];
      [p,endPop,bestSols,trace]=ga(bounds,'fitness')
问题:就实例2而言,能否解释下为什么源函数代码中numv=size(sol,2)没有减1,而适应度函数减1了?不太明白sol的具体含义?还有就是ga中如何体现的分析中10,1000,0.1,0.3要求?谢谢各位指教,膜拜
1 回复
#2
逆水寒刘2015-11-16 10:05
以下是引用逆水寒刘在2015-11-15 22:57:32的发言:

【问题】在-5<=Xi<=5,i=1,2区间内,求解
       f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.^2+x2.^2)))-exp(0.5*(cos(2*pi*x1)+cos(2*pi*x2)))+22.71282的最小值。
【分析】种群大小10,最大代数1000,变异率0.1,交叉率0.3
【程序清单】
   %源函数的matlab代码
      function [eval]=f(sol)
        numv=size(sol,2);
        x=sol(1:numv);
        eval=-20*exp(-0.2*sqrt(sum(x.^2)/numv)))-exp(sum(cos(2*pi*x))/numv)+22.71282;
  %适应度函数的matlab代码
      function [sol,eval]=fitness(sol,options)
        numv=size(sol,2)-1;
        x=sol(1:numv);
        eval=f(x);
        eval=-eval;
  %遗传算法的matlab代码
      bounds=ones(2,1)*[-5 5];
      [p,endPop,bestSols,trace]=ga(bounds,'fitness')
问题:就实例2而言,能否解释下为什么源函数代码中numv=size(sol,2)没有减1,而适应度函数减1了?不太明白sol的具体含义?还有就是ga中如何体现的分析中10,1000,0.1,0.3要求?谢谢各位指教,膜拜

上述例子是我在网上看到的经典范例,但是对于其中的变量实在难以理解,菜鸟一只。希望大神能答疑解惑不胜感激。
1