Для примеров выходных функций и функций построения графика, см. Выходные функции для 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');