exponenta event banner

Синтаксис функции вывода и функции печати

Что такое функции вывода и функции графика?

Примеры функций вывода и функций графика см. в разделах Функции вывода для Toolbox™ оптимизации и Функции графика.

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

Аналогично, PlotFcn указывает одну или несколько функций, которые функция оптимизации вызывает в каждой итерации, и может остановить решатель. Разница между функцией графика и функцией вывода является двоякой:

  • Для большинства решателей существуют предопределенные функции графика, позволяющие легко получить типовые графики.

  • Функция графика отправляет выходные данные в окно с кнопками Пауза (Pause) и Стоп (Stop), позволяя остановить решатель на ранней стадии без потери информации.

Внимание

intlinprog функции вывода и функции графика отличаются от функций других решателей. См. разделы «Функция вывода intlinprog» и «Синтаксис функции печати».

Чтобы настроить функцию вывода или функцию печати, выполните следующие действия.

  1. Запишите функцию как файл функции или локальную функцию.

  2. Использовать optimoptions для установки значения OutputFcn или PlotFcn быть дескриптором функции, то есть именем функции, которой предшествует знак @. Например, если функция вывода outfun.m, команда

     options = optimoptions(@solvername,'OutputFcn',@outfun);

    определяет OutputFcn быть дескриптором для outfun. Чтобы задать несколько выходных функций или функций печати, используйте синтаксис

     options = optimoptions('solvername','OutputFcn',{@outfun, @outfun2});

    Чтобы воспользоваться заполнением табуляции для выбора имени встроенной функции печати, используйте кавычки, а не дескриптор функции.

    Tab-completion list

  3. Вызовите функцию оптимизации с помощью options в качестве входного аргумента.

В разделе Передача дополнительных параметров (Passing Extra Parameters) объясняется, как передать параметры или данные функции вывода или функции графика, если это необходимо.

Структура функции вывода или функции графика

Строка определения функции вывода или функции графика имеет следующий вид:

stop = outfun(x,optimValues,state)

где

  • x - точка, вычисленная алгоритмом в текущей итерации.

  • optimValues - структура, содержащая данные текущей итерации. Поля в optimValues подробно описывают структуру.

  • state - текущее состояние алгоритма. Состояния алгоритма перечисляют возможные значения.

  • stop является флагом, который true или false в зависимости от того, должна ли программа оптимизации прекратиться (true) или продолжить (false). Дополнительные сведения см. в разделе Флаг остановки.

Функция оптимизации передает значения входных аргументов outfun на каждой итерации.

Поля в optimValues

В следующей таблице перечислены поля 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)ОписаниеВозвращено функциямиОтображение командной строки

attainfactor

Коэффициент достижения для многообъективной задачи. Дополнительные сведения см. в разделе Метод достижения цели.

fgoalattain

Ничего

cgiterations

Число итераций сопряженного градиента при текущей итерации оптимизации.

fmincon (IP, TRR), fminunc (TR), fsolve (TRR), lsqcurvefit (TRR), lsqnonlin (TRR)

CG-iterations

См. раздел Итеративное отображение.

constrviolation

Максимальное нарушение ограничения.

fgoalattain, fmincon, fminimax, fseminf

fminunc TR и fsolve TRR укажите значения пустых полей.

Max constraint или Feasibility

См. раздел Итеративное отображение.

degenerate

Мера вырождения. Точка вырождается, если:

  • Частная производная относительно одной из переменных равна 0 в точке, и

  • Ограничение границы активно для этой переменной в точке.

Смотри «Вырождение

fmincon (TRR), lsqcurvefit (TRR), lsqnonlin (TRR)

Ничего

directionalderivative

Производная направления в направлении поиска.

fgoalattain, fmincon (AS), fminimax, fminunc (Q), fseminf, fsolve (LM), lsqcurvefit (LM), lsqnonlin (LM)

Directional derivative

См. раздел Итеративное отображение.

firstorderopt

Оптимальность первого порядка (зависит от алгоритма). Конечное значение равно выходу функции оптимизации output.firstorderopt.

fgoalattain, fmincon, fminimax, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

First-order optimality

См. раздел Итеративное отображение.

funccount

Совокупное количество оценок функций. Конечное значение равно выходу функции оптимизации output.funcCount.

fgoalattain, fminbnd, fmincon, fminimax, fminsearch, fminunc, fsolve, fzero, fseminf, lsqcurvefit, lsqnonlin

F-count или Func-count

См. раздел Итеративное отображение.

fval

Значение функции в текущей точке. Конечное значение равно выходу функции оптимизации fval.

Для fsolve, fval является значением векторной функции и итеративным отображением f(x) является квадратной нормой этого вектора.

fgoalattain, fminbnd, fmincon, fminimax, fminsearch, fminunc, fseminf, fsolve, fzero

f(x)

См. раздел Итеративное отображение.

gradient

Текущий градиент целевой функции - либо аналитический градиент, если его предоставить, либо конечноразностное приближение. Конечное значение равно выходу функции оптимизации grad.

fgoalattain, fmincon, fminimax, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

Ничего

iteration

Номер итерации - начинается с 0. Конечное значение равно выходу функции оптимизации output.iterations.

fgoalattain, fminbnd, fmincon, fminimax, fminsearch, fminunc, fsolve, fseminf, fzero, lsqcurvefit, lsqnonlin

Iteration

См. раздел Итеративное отображение.

lambda

Параметр Левенберга-Марквардта, lambda, при текущей итерации. См. Метод Левенберга-Марквардта.

fsolve (LM), lsqcurvefit (LM), lsqnonlin (LM)

Lambda

lssteplength

Фактическая длина шага, деленная на первоначально спрогнозированную длину шага

fmincon (AS, SQP), fminunc (Q)

Steplength или Line search steplength или Step-size

См. раздел Итеративное отображение.

maxfval

Максимальное значение функции

fminimax

Ничего

positivedefinite

0 если алгоритм обнаруживает отрицательную кривизну при вычислении шага Ньютона.

1 в противном случае.

fmincon (TRR), fminunc (TR), fsolve (TRR), lsqcurvefit (TRR), lsqnonlin (TRR)

Ничего

procedure

Сообщения процедуры.

fgoalattain, fminbnd, fmincon (AS), fminimax, fminsearch, fseminf, fzero

fmincon TRR и SQP, и fminunc укажите значения пустых полей.

Procedure

См. раздел Итеративное отображение.

ratio

Отношение изменения целевой функции к изменению квадратичной аппроксимации.

fmincon (TRR), fminunc (TR), fsolve (TRR), lsqcurvefit (TRR), lsqnonlin (TRR)

Ничего

residual

Остаточный вектор.

lsqcurvefit, lsqnonlin,

Residual

См. раздел Итеративное отображение.

resnorm

2-норма остаточного квадрата.

lsqcurvefit, lsqnonlin

Resnorm

См. раздел Итеративное отображение.

searchdirection

Направление поиска.

fgoalattain, fmincon (AS, SQP), fminimax, fminunc (Q), fseminf, fsolve (LM), lsqcurvefit (LM), lsqnonlin (LM)

Ничего

stepaccept

Состояние текущего шага доверительного региона. Возвращает значение true, если текущий шаг области доверия был успешным, и значение false, если шаг области доверия был неудачным.

fsolve (D)

Ничего

stepsize

Текущий размер шага (смещение в x). Конечное значение равно выходу функции оптимизации output.stepsize.

fgoalattain, fmincon, fminimax, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

Step-size или Norm of Step

См. раздел Итеративное отображение.

trustregionradius

Радиус области доверия.

fmincon (IP, TRR), fminunc (TR), fsolve (D, TRR), lsqcurvefit (TRR), lsqnonlin (TRR)

Trust-region radius

См. раздел Итеративное отображение.

Вырождение

Значение поля 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:

ГосударствоОписание

'init'

Алгоритм находится в начальном состоянии перед первой итерацией.

'interrupt'

Алгоритм находится в некоторой вычислительно дорогой части итерации. В этом состоянии функция вывода может прервать текущую итерацию оптимизации. В это время значения x и optimValues те же, что и при последнем вызове функции вывода, в которой state=='iter'.

'iter'

Алгоритм находится в конце итерации.

'done'

Алгоритм находится в конечном состоянии после последней итерации.

'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');

Связанные темы