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

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

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

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

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

Похожие темы