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

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

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

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

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

function stop = psplotchange(optimvalues, flag)
% PSPLOTCHANGE Plots the change in the best objective function 
% value from the previous iteration.
  
% Best objective function value in the previous iteration
persistent last_best
 
stop = false;
if(strcmp(flag,'init')) 
        set(gca,'Yscale','log'); %Set up the plot
        hold on;
        xlabel('Iteration'); 
        ylabel('Log Change in Values');
        title(['Change in Best Function Value']);
end
 
% Best objective function value in the current iteration
best = min(optimvalues.fval);  
 
 % Set last_best to best
if optimvalues.iteration == 0
last_best = best;
        
else
        %Change in objective function value
			 change = last_best - best; 
        plot(optimvalues.iteration, change, '.r');
end

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

Подготовка проблемы

Проблема совпадает с Линейно Ограниченной проблемой. Настраивать проблему:

  1. Введите следующее в командной строке MATLAB:

    x0 = [2 1 0 9 1 0];
    Aineq = [-8 7 3 -4 9 0];
    bineq = 7;
    Aeq = [7 1 8 3 3 3; 5 0 -5 1 -5 8; -2 -6 7 1 1 9; 1 -1 2 -2 3 -3];
    beq = [84 62 65 1];
  2. Введите optimtool, чтобы открыть приложение Оптимизации.

  3. Выберите решатель patternsearch.

  4. Настройте проблему совпадать со следующей фигурой.

  5. Поскольку это - линейно ограниченная проблема, установите Poll method на GSS Positive basis 2N.

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

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

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

Обратите внимание на то, что, потому что шкала y - ось в более низком пользовательском графике является логарифмической, график показывает только изменения, которые больше, чем 0.

Запускать эту проблему с помощью функций командной строки:

x0 = [2 1 0 9 1 0];
Aineq = [-8 7 3 -4 9 0];
bineq = 7;
Aeq = [7 1 8 3 3 3; 5 0 -5 1 -5 8; -2 -6 7 1 1 9; 1 -1 2 -2 3 -3];
beq = [84 62 65 1];
options = optimoptions('patternsearch',...
    'PlotFcn',{@psplotbestf,@psplotchange},...
    'PollMethod','GSSPositiveBasis2N');
[x,fval] = patternsearch(@lincontest7,x0,...
    Aineq,bineq,Aeq,beq,[],[],[],options);

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

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

  • optimvalues — Текущее состояние решателя, структуры

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

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

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

ОператорОписание
persistent last_best

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

set(gca,'Yscale','log')

Настраивает график, прежде чем алгоритм запустится.

best = min(optimvalues.fval)

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

change = last_best - best

Устанавливает переменную change на лучшее значение целевой функции в предыдущей итерации минус лучшее значение целевой функции в текущей итерации.

plot(optimvalues.iteration, change, '.r')

Строит переменную change в текущем значении целевой функции, поскольку текущая итерация содержала inoptimvalues.iteration.

Похожие темы