Синтаксис выходной функции и функции построения графика

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

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

The 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, чтобы помочь выбрать встроенное имя функции построения графика, используйте кавычки, а не указатель на функцию.

    Tab-completion list

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

Передача дополнительных параметров объясняет, как передать параметры или данные в вашу выходную функцию или функцию построения графика, если это необходимо.

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

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

stop = outfun(x,optimValues,state)

где

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

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

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

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

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

Поля в optimValues

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

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'

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

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

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

Похожие темы