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