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