Find the minimum of "y=x*x" using genetic algorithm in Matlab

16.1k views Asked by At

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.

1

There are 1 answers

1
adn On BEST ANSWER

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.