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

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

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

    Tab-completion list

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

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

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

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

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 поля применяются только к определенным алгоритмам:

  • КАК — 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

'none'

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)

'none'

directionalderivative

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

fgoalattain, fmincon (КАК), 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.

Для fsolvefval значение вектор-функции и итеративное отображение f(x) норма в квадрате этого вектора.

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

f(x)

Смотрите итеративное отображение.

gradient

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

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

'none'

iteration

Номер итерации — запускается в 0. Окончательное значение равняется оптимизационной функции выход output.iterations.

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

Iteration

Смотрите итеративное отображение.

lambda

Параметр Levenberg-Marquardt, lambda, в текущей итерации. См. Метод Levenberg-Marquardt.

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

Lambda

lssteplength

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

fmincon (КАК, SQP), fminunc Q

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

Смотрите итеративное отображение.

maxfval

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

fminimax

'none'

positivedefinite

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

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

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

'none'

procedure

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

fgoalattain, fminbnd, fmincon (КАК), fminimax, fminsearch, fseminf, fzero

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

Procedure

Смотрите итеративное отображение.

ratio

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

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

'none'

residual

Вектор невязок.

lsqcurvefit, lsqnonlin,

Residual

Смотрите итеративное отображение.

resnorm

2-норма невязки, в квадрате.

lsqcurvefit, lsqnonlin

Resnorm

Смотрите итеративное отображение.

searchdirection

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

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

'none'

stepaccept

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

fsolve D

'none'

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 th значения нижних и верхних границ, lb и ub. Таким образом,

r = min(abs(ub-x, x-lb))

Затем значение degenerate минимальная запись векторного   r + abs(grad), где grad градиент целевой функции. Значение degenerate 0, если существует индекс i для которого оба из следующего верны:

  • grad(i) = 0

  • x(i) равняется i th запись или нижней или верхней границы.

Состояния алгоритма

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

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

Похожие темы