-2

有人可以帮我解决这个问题吗?我是 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”未定义。

4

1 回答 1

3

主要问题是您不了解工具箱的工作原理。您应该参考文档以了解整个想法。

因此,适应度函数应该是一个函数句柄并且应该返回一个标量。

健身fcn

处理适应度函数。适应度函数应该接受长度为 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文件中定义你的函数,你应该有类似的东西:

抛物线

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

你定义句柄就像fh = @parabola. 在上面的代码中,您替换parabola为新句柄,fh.

我希望这可以帮助您入门。

于 2012-01-22T15:06:26.217 回答