回 帖 发 新 帖 刷新版面

主题:关于遗传算法的实例(菜鸟)

ga()函数到底如何应用。我按照网上的一些实例运行,一直提示错误。
   在应用前 是否还需要做其他工作?譬如以下例子

【问题】在-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') 



运行后提示 ??? Error using ==> ga
Number of variables (NVARS) must be a positive integer.



回复列表 (共2个回复)

沙发

在帮助里有相关例子:     
        %%Minimize 'rastriginsfcn' fitness function of numberOfVariables = 2
  x = ga(@rastriginsfcn,2)
 options = gaoptimset('PlotFcns',...{@gaplotbestf,@gaplotbestindiv,@gaplotexpectation,@gaplotstopping});
 [x,fval,reason,output] = ga(@rastriginsfcn,2,options)

对于你给出的例子用不着这么麻烦

%fitness function:
function y=f(x)
y=-20*exp(-0.2*sqrt(0.5*(x(1).^2+x(2).^2)))-exp(0.5*(cos(2*pi*x(1))+cos(2*pi*x(2))))+22.71282;

%main 
 options = gaoptimset('PopulationSize',10,'Generation',...        1000,'MigrationFraction',0.1,'CrossoverFraction',0.3)

[p,endPop,bestSols,trace]=ga(@f,2,options)


得出的结果是:
p =

    0.0185   -0.0682


endPop =

    0.3226


bestSols =

Optimization terminated: stall generations limit exceeded.


trace = 

      randstate: [35x1 double]
     randnstate: [2x1 double]
    generations: 59
      funccount: 590
        message: 'Optimization terminated: stall generations limit exceeded.'

板凳

其实你这道题用遗传算法工具箱提供的gui界面解更方便快捷
直接打gatool
然后在相关的文本栏里填上fitness function,number of design variables,和在交叉函数栏里和变异函数栏里填上概率

我来回复

您尚未登录,请登录后再回复。点此登录或注册