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

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

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

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

Чтобы создать функцию построения графика для этого примера, скопируйте и вставьте следующий код в новый файл в 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.

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

Чтобы использовать пользовательскую функцию построения графика, включите ее в опции.

rng(100) % For reproducibility
options = optimoptions('ga','PlotFcn',{@gaplotbestf,@gaplotchange});
[x,fval] = ga(@rastriginsfcn,2,[],[],[],[],[],[],[],options)

Optimization terminated: maximum number of generations exceeded.

x =

   -0.0003    0.0014


fval =

   4.2189e-04

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

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

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

  • options - Текущие параметры настройки

  • state - Информация о текущем поколении

  • flag - Текущее состояние алгоритма

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

  • 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, функция, которая создает лучший график соответствия.

Похожие темы