2012-01-21 2 views
-2

Помогло бы мне помочь в этом вопросе. Я новичок в Matlab ... И мне немного сложно понять, как создавать и использовать генетический алгоритм в Matlab. Если кто-нибудь может помочь написать очень простой код для поиска минимума/максимума указанной функции. Я читал, что для этого должен использоваться gatool ... но я не могу понять примеры сети помощи Matlab. Я делаю следующие шаги:Найти минимальное значение «y = x * x» с использованием генетического алгоритма в Matlab

  1. В текстовом редакторе я печатаю следующее:

    function y= parabola(x) 
        y=x*x; 
    end 
    
  2. Тогда я запускать GATOOL и указав эту функцию как @parabola

  3. Установка числа переменных (равно 2)
  4. Initial range = [-10;10].
  5. Остальные параметры устанавливаются по умолчанию

    При нажатии кнопки Start я вижу результат:

    Ошибка в fitnessfcn: Входной аргумент «х» не определен.

+1

Это не «написать мою программу для меня». –

+1

Я просто прошу о помощи ...Как вы можете видеть, я прочитал возможные решения этой задачи. И они не сработали ... Поэтому я решил задать здесь – user1162770

ответ

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) 

То же самое можно сделать с помощью GUI GA. В случае, если вы хотите, чтобы определить свою функцию в m файле вы должны иметь что-то вроде:

parabola.m

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

И вы определяете ручку, как fh = @parabola. И в приведенном выше коде вы замените parabola на новый дескриптор, fh.

Надеюсь, это поможет вам начать работу.

+0

Спасибо вам большое! Это было очень полезно для меня! – user1162770