Создайте пользовательскую функцию построения графика

О пользовательских функциях построения графика

Если ни одна из функций построения графика, которые идут с программным обеспечением, не подходит для вывода, вы хотите построить, можно записать собственную функцию построения графика, которая генетический алгоритм заходит в каждую генерацию, чтобы создать график. Этот пример показывает, как создать функцию построения графика, которая отображает изменение в лучшем значении фитнеса от предыдущего поколения до текущей генерации.

Создание пользовательской функции построения графика

Чтобы создать функцию построения графика для этого примера, скопируйте и вставьте следующий код в новый файл в Редакторе MATLAB®.

function state = gaplotchange(options, state, flag)
% GAPLOTCHANGE Plots the logarithmic change in the best score from the 
% previous generation.
%   
persistent last_best % Best score in the previous generation

if(strcmp(flag,'init')) % Set up the plot
    xlim([1,options.MaxGenerations]);
    axx = gca;
    axx.Yscale = 'log';
    hold on;
    xlabel Generation
    title('Log Absolute Change in Best Fitness Value')
end

best = min(state.Score); % Best score in the current generation
if state.Generation == 0 % Set last_best to best.
    last_best = best;
else
	change = last_best - best; % Change in best score 
	last_best = best;
    if change > 0 % Plot only when the fitness improves
        plot(state.Generation,change,'xr');
    end
end

Затем сохраните файл как gaplotchange.m в папке на пути MATLAB.

Используя функцию построения графика

Чтобы использовать пользовательскую функцию построения графика, выберите Custom в Plot functions, разделяют на области и вводят @gaplotchange в поле направо. Чтобы сравнить пользовательский график с лучшим графиком значения фитнеса, также выберите Best fitness.

Теперь, если вы запускаетесь, пример, описанный в, Минимизируют Функцию Рэстриджина, отображения инструмента строит подобный показанным в следующей фигуре.

График только показывает изменения, которые больше, чем 0, которые являются улучшениями лучшего фитнеса. Логарифмический масштаб позволяет вам видеть небольшие изменения в лучшей функции фитнеса, которую не показывает верхний график.

Как работы функции построения графика

Функция построения графика использует информацию, содержавшуюся в следующих структурах, которые генетический алгоритм передает функции как входные параметры:

  • опции Текущие настройки опций

  • state — Информация о текущей генерации

  • флаг Текущий статус алгоритма

Самые важные строки функции построения графика следующие:

  • persistent last_best

    Создает персистентную переменную last_best — лучший счет в предыдущем поколении. Персистентные переменные сохраняются по множественным вызовам функции построения графика.

  • xlim([1,options.MaxGenerations]);

    axx = gca;

    axx.Yscale = 'log';

    Настраивает график, прежде чем алгоритм запустится. options.MaxGenerations является максимальным количеством поколений.

  • best = min(state.Score)

    Поле state.Score содержит множество всех людей в текущей генеральной совокупности. Переменная best является минимальным счетом. Для полного описания полей состояния структуры смотрите Структуру Функций построения графика.

  • change = last_best - best

    Переменное изменение является лучшим счетом в предыдущем поколении минус лучший счет в текущей генерации.

  • if change > 0

    Постройте, только если существует изменение в лучшем фитнесе.

  • plot(state.Generation,change,'xr')

    Строит изменение при текущей генерации, номер которой содержится в state.Generation.

Код для gaplotchange содержит многие из тех же элементов как код для gaplotbestf, функция, которая создает лучший график фитнеса.

Похожие темы