Чтобы использовать функцию построения графика кроме включенных с программным обеспечением, можно записать собственную функцию построения графика, которую вызывают на каждой итерации поиска шаблона, чтобы создать график. В этом примере показано, как создать функцию построения графика, которая отображает логарифмическое изменение в лучшем значении целевой функции от предыдущей итерации до текущей итерации. Больше деталей функции построения графика доступно в Опциях Графика.
Чтобы создать функцию построения графика для этого примера, скопируйте и вставьте следующий код в новый файл функции в Редакторе 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.
Проблема совпадает с Линейно Ограниченной проблемой. Настраивать проблему:
Введите следующее в командной строке 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];
Введите optimtool
открыть приложение Оптимизации.
Выберите patternsearch
решатель.
Настройте проблему соответствовать следующему рисунку.
Поскольку это - линейно ограниченная проблема, установите 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
— Текущее состояние решателя, структуры
flag
— Текущий статус алгоритма, вектора символов
Самые важные операторы пользовательской функции построения графика, psplotchange.m
, получены в итоге в следующей таблице.
Пользовательские операторы функции построения графика
Оператор | Описание |
---|---|
persistent last_best | Создает персистентную переменную |
set(gca,'Yscale','log') | Настраивает график, прежде чем алгоритм запустится. |
best = min(optimvalues.fval) | Наборы |
change = last_best - best | Устанавливает переменную |
plot(optimvalues.iteration, change, '.r') | Строит переменную |