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

Вызовите функцию оптимизации с помощью options в качестве входного аргумента.
В разделе Передача дополнительных параметров (Passing Extra Parameters) объясняется, как передать параметры или данные функции вывода или функции графика, если это необходимо.
Строка определения функции вывода или функции графика имеет следующий вид:
stop = outfun(x,optimValues,state)
где
x - точка, вычисленная алгоритмом в текущей итерации.
optimValues - структура, содержащая данные текущей итерации. Поля в optimValues подробно описывают структуру.
state - текущее состояние алгоритма. Состояния алгоритма перечисляют возможные значения.
stop является флагом, который true или false в зависимости от того, должна ли программа оптимизации прекратиться (true) или продолжить (false). Дополнительные сведения см. в разделе Флаг остановки.
Функция оптимизации передает значения входных аргументов outfun на каждой итерации.
В следующей таблице перечислены поля optimValues структура. Определенная функция оптимизации возвращает значения только для некоторых из этих полей. Для каждого поля в столбце Возвращенные функциями таблицы перечислены функции, возвращающие поле.
Некоторые из областей 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:
| Государство | Описание |
|---|---|
| Алгоритм находится в начальном состоянии перед первой итерацией. |
| Алгоритм находится в некоторой вычислительно дорогой части итерации. В этом состоянии функция вывода может прервать текущую итерацию оптимизации. В это время значения |
| Алгоритм находится в конце итерации. |
| Алгоритм находится в конечном состоянии после последней итерации. |
'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');