Question

Would somebody help me please in this question. I'm new in Matlab... And it's a bit hard for me to understand how to create and use genetic algorithm in Matlab. If anybody could help to write some very simple code for searching minimum/maximum of specified function. I read that the gatool should be used for that... but I can't understand the examples of Matlab help network. I'm doing the next steps:

  1. In text editor I'm typing the next:

    function y= parabola(x)
        y=x*x;
    end
    
  2. Then I'm launching the GATOOL and specifying this function like @parabola

  3. Setting the number of variables (equals 2)
  4. Initial range = [-10;10].
  5. The other parameters are set as Default

    When I press Start Button I see a result:

    Error in fitnessfcn: Input argument "x" is undefined.

Était-ce utile?

La solution

The main problem is that you don't understand how the toolbox works. You should refer to the documentation to get the whole idea.

So, the fitness function should be a function handle and should return a scalar.

fitnessfcn

Handle to the fitness function. The fitness function should accept a row vector of length nvars and return a scalar value.

First, your function is not well defined. If you want to define an anonymous function you should

% 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)

The same can be achieved with the GUI of GA. In case you want to define your function in an m file you should have something like:

parabola.m

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

And you define the handle like fh = @parabola. And in the code above you replace parabola for the new handle, fh.

I hope this help you get started.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top