在Matlab中使用遗传算法求出“y = x * x”的最小值

时间:2012-01-21 20:43:29

标签: matlab genetic-algorithm genetic-programming genetic

有人会在这个问题上帮助我。我是Matlab的新手......对于我来说,理解如何在Matlab中创建和使用遗传算法有点困难。  如果有人可以帮助编写一些非常简单的代码来搜索指定函数的最小值/最大值。  我读到gatool应该用于那个......但是我无法理解Matlab帮助网络的例子。我正在做下一步:

  1. 在文本编辑器中,我正在键入下一个:

    function y= parabola(x)
        y=x*x;
    end
    
  2. 然后我启动GATOOL并指定此功能,如@parabola

  3. 设置变量数(等于2)
  4. Initial range = [-10;10]
  5. 其他参数设置为默认

    当我按下Start按钮时,我看到了一个结果:

      

    fitnessfcn出错:输入参数“x”未定义。

1 个答案:

答案 0 :(得分:3)

主要问题是您不了解工具箱的工作原理。你应该参考the documentation来了解整个想法。

因此,适应度函数应该是function handle并且应该返回标量。

  

fitnessfcn

     

处理到健身功能。健身功能应该接受   长度为nvars的行向量返回标量值

首先,您的功能定义不明确。如果你想定义一个匿名函数,你应该

% A function handle to an anonymous function that returns an scalar.
% You should change this function accordingly to your expectations.
% Also, note that this handle could be of a function defined in a file too.
parabola = @(x) prod(x);
% Parameters for the GA
optGA = gaoptimset('PlotFcns', @gaplotbestfun, 'PlotInterval', 10, 'PopInitRange', [-10 ; 10]);
[Xga,Fga] = ga(parabola,2,optGA)

使用GA的GUI可以实现同样的目的。如果你想在m文件中定义你的函数,你应该有:

<强> parabola.m

function [y] = parabola(x)
% This should return a scalar
y = prod(x);

您可以像fh = @parabola一样定义句柄。在上面的代码中,为新句柄parabola替换fh

我希望这有助于你开始。