Для примеров выходных функций и функций построения графика, см. Выходные функции для Optimization Toolbox™ и Функции построения графика.
The OutputFcn опция задает одну или несколько функций, которые вызываются оптимизационными функциями при каждой итерации. Обычно можно использовать выходную функцию для построения графика точек при каждой итерации или для отображения оптимизационных величин из алгоритма. Используя выходную функцию, можно просмотреть, но не задать, оптимизационные величины. Можно также остановить выполнение решателя в соответствии с установленными условиями; см. «Структура выходной функции» или «Функция построения графика».
Точно так же PlotFcn опция задает одну или несколько функций, которые вызываются оптимизационными функциями при каждой итерации, и может остановить решатель. Различие между функцией построения графика и выходной функцией двойной:
Предопределенные функции построения графика существуют для большинства решателей, что позволяет легко получить типичные графики.
Функция построения графика отправляет выход в окно, имеющее Pause и Stop кнопки, что позволяет вам остановить решатель раньше, не теряя информации.
Внимание
intlinprog выходные функции и функции функций построения графика в других решателях. См. «Синтаксис выходной функции intlinprog и функции построения графика».
Чтобы настроить выходную функцию или функцию построения графика, выполните следующее:
Запишите функцию как файл функции или локальную функцию.
Использовать optimoptions задать значение OutputFcn или PlotFcn быть указателем на функцию, то есть именем функции, предшествующей знаку @. Для примера, если выходная функция outfun.m, команду
options = optimoptions(@solvername,'OutputFcn',@outfun);задает OutputFcn быть указателем на outfun. Чтобы задать более одной выходной функции или функции построения графика, используйте синтаксис
options = optimoptions('solvername','OutputFcn',{@outfun, @outfun2});
Чтобы использовать заполнение клавишей Tab, чтобы помочь выбрать встроенное имя функции построения графика, используйте кавычки, а не указатель на функцию.

Вызовите оптимизационную функцию с options как входной параметр.
Передача дополнительных параметров объясняет, как передать параметры или данные в вашу выходную функцию или функцию построения графика, если это необходимо.
Линия определения функции выходной функции или функции построения графика имеет следующую форму:
stop = outfun(x,optimValues,state)
где
x - точка, вычисленная алгоритмом при текущей итерации.
optimValues - структура, содержащая данные текущей итерации. Поля в optimValues подробно описывают структуру.
state - текущее состояние алгоритма. Состояния Алгоритма перечисляют возможные значения.
stop является флагом, который true или false в зависимости от того, должна ли остановиться подпрограмма оптимизации (true) или продолжить (false). Для получения дополнительной информации смотрите Stop Flag.
Оптимизационная функция передает значения входных параметров в outfun при каждой итерации.
В следующей таблице перечислены поля optimValues структура. Конкретная оптимизационная функция возвращает значения только для некоторых из этих полей. Для каждого поля в столбце Returned by Functions таблицы перечислены функции, возвращающие это поле.
Некоторые из полей optimValues соответствуют выходным аргументам оптимизационной функции. После окончательной итерации алгоритма оптимизации значение такого поля равняется соответствующему выходному аргументу. Для примера, optimValues.fval соответствует выходному аргументу fval. Так, если позвоните fmincon с выходной функцией и возврат fval, окончательное значение optimValues.fval равен fval. В столбце «Описание» следующей таблицы указаны поля с соответствующим выходным аргументом.
Значения некоторых полей optimValues отображаются в командной строке, когда вы вызываете оптимизационную функцию со Display область options установлено на 'iter', как описано в итерационном отображении. Для примера, optimValues.fval отображается в f(x) столбец. В столбце «Отображение командной строки» следующей таблицы указаны поля, которые можно отобразить в командной строке.
Некоторые optimValues поля применяются только к конкретным алгоритмам:
AS - active-set
D - trust-region-dogleg
IP - interior-point
LM - levenberg-marquardt
Q - quasi-newton
SQP - sqp
TR - trust-region
TRR - trust-region-reflective
Некоторые optimValues поля существуют в определенных решателях или алгоритмах, но всегда заполнены пустыми или нулевыми значениями, поэтому бессмысленны. Эти поля включают:
constrviolation для fminunc
TR и fsolve
TRR.
procedure для fmincon
TRR и SQP, и для fminunc.
Поля optimValues
| Поле OptimValues (optimValues.field) | Описание | Возвращается функциями | Отображение командной строки |
|---|---|---|---|
| Коэффициент достижения для мультиобъективной задачи. Для получения дополнительной информации смотрите Метод Достижения Цели. | Ничего | |
| Количество сопряженных итераций градиента при текущей итерации оптимизации. |
|
|
| Максимальное нарушение ограничений. |
|
|
| Мера вырождения. Точка вырождается, если:
См. Дегенерация. |
| Ничего |
| Производная по направлению в поисковом направлении. |
|
|
| Оптимальность первого порядка (зависит от алгоритма). Конечное значение равняется выходу оптимизационной функции |
|
|
| Совокупное количество вычислений функции. Конечное значение равняется выходу оптимизационной функции |
|
|
| Значение функции в текущей точке. Конечное значение равняется выходу оптимизационной функции Для |
|
|
| Текущий градиент целевой функции - или аналитический градиент, если вы обеспечиваете его, или конечно-разностную аппроксимацию. Конечное значение равняется выходу оптимизационной функции |
| Ничего |
| Число итерации - начинается с |
|
|
| Параметр Левенберга-Марквардта, |
|
|
| Фактическая длина шага, разделенная на первоначально предсказанную длину шага |
| |
| Максимальное значение функции | fminimax | Ничего |
|
|
| Ничего |
| Сообщения о процедуре. |
|
|
| Отношение изменения целевой функции к изменению квадратичного приближения. |
| Ничего |
| Вектор невязок. |
| |
| 2-норма остаточного квадрата. |
| |
| Направление поиска. |
| Ничего |
| Состояние текущего шага доверительной области. Возвращает true, если текущий шаг доверительной области был удачным, и false, если шаг доверительной области был неудачен. |
| Ничего |
| Размер текущего шага (перемещение в |
|
|
| Радиус доверительной области. |
|
|
Значение поля degenerate, который измеряет вырождение текущей точки оптимизации x, определяется следующим образом. Сначала задайте вектор r, того же размера, что и x, для чего r(i) - минимальное расстояние от x(i) на i-е значения нижних и верхних границ, lb и ub. То есть,
r = min(abs(ub-x, x-lb))
Затем значение degenerate является минимальным значением вектора r + abs(grad), где grad - градиент целевой функции. Значение degenerate 0, если существует индекс i для которых оба из следующих являются истинными:
grad(i) = 0
x(i) равен i-й записи нижней или верхней границы.
В следующей таблице перечислены возможные значения для state:
| Государство | Описание |
|---|---|
| Алгоритм находится в начальном состоянии перед первой итерацией. |
| Алгоритм находится в некоторой вычислительно дорогой части итерации. В этом состоянии выходная функция может прервать текущую итерацию оптимизации. В это время значения |
| Алгоритм находится в конце итерации. |
| Алгоритм находится в конечном состоянии после последней итерации. |
The 'interrupt' состояние происходит только в fmincon
'active-set' алгоритм и fgoalattain, fminimax, и fseminf решатели. Там состояние может возникнуть перед квадратичным решением подпроблема программирования или поиском по линии.
Следующий код иллюстрирует, как выходная функция может использовать значение state чтобы решить, какие задачи выполнять при текущей итерации:
switch state case 'iter' % Make updates to plot or guis as needed case 'interrupt' % Probably no action here. Check conditions to see % whether optimization should quit. case 'init' % Setup for plots or guis case 'done' % Cleanup of plots, guis, or final plot otherwise end
Выходной аргумент stop является флагом, который true или false. Флаг сообщает оптимизационные функции, должна ли оптимизация остановиться (true) или продолжить (false). В следующих примерах показаны типичные способы использования stop флаг.
Выходная функция или функция построения графика могут остановить оптимизацию при любой итерации, основанной на текущих данных в optimValues. Для примера следующий код устанавливает stop на true, остановка оптимизации, когда размер производной по направлению меньше .01:
function stop = outfun(x,optimValues,state) stop = false; % Check whether directional derivative norm is less than .01. if norm(optimValues.directionalderivative) < .01 stop = true; end
Если вы проектируете графический интерфейс пользователя для выполнения оптимизации, можно сделать так, чтобы выходная функция остановила оптимизацию, когда пользователь кликнет кнопку Stop на графический интерфейс пользователя. Следующий код показывает, как это сделать, принимая, что коллбэк кнопки Stop сохраняет значение true в optimstop поле handles структура, называемая hObject:
function stop = outfun(x,optimValues,state) stop = false; % Check if user has requested to stop the optimization. stop = getappdata(hObject,'optimstop');