Выйдите из флагов и выходных сообщений

Выйдите из флагов

Когда решатель оптимизации выполняет свою задачу, он устанавливает exit flag. Выходной флаг является целым числом, которое является кодом по причине, решатель остановил свои итерации. В целом:

  • Положительные выходные флаги соответствуют успешным результатам.

  • Отрицательные выходные флаги соответствуют неудачным результатам.

  • Нулевой выходной флаг соответствует решателю, останавливаемому путем превышения предела итерации или предела на количестве функциональных оценок (см. Итерации и Функциональные количества, и также смотрите Допуски и Критерий остановки).

Таблица решателя выходные параметры в разделе ссылки на функцию решателя приводит значение выходных флагов каждого решателя.

Примечание

Выйдите флаги являются весьма ненадежными руководствами по качеству решения. Много других факторов, таких как настройки допуска, могут влиять, является ли решение удовлетворительным для вас. Вы ответственны за решение, дает ли решатель удовлетворительный ответ. Иногда отрицательный выходной флаг не соответствует “плохому” решению. Точно так же иногда положительный выходной флаг не соответствует “хорошему” решению.

Вы получаете выходной флаг путем вызова решателя с синтаксисом exitflag. Этот синтаксис зависит от решателя. Для получения дополнительной информации смотрите страницы ссылки на функцию решателя. Например, для fsolve, синтаксис вызова, чтобы получить выходной флаг

[x,fval,exitflag] = fsolve(...)

Следующий пример использует этот синтаксис. Предположим, что вы хотите решить систему нелинейных уравнений

2x1x2=ex1x1+2x2=ex2.

Запишите эти уравнения как анонимную функцию, которая дает нулевой вектор в решении:

myfcn = @(x)[2*x(1) - x(2) - exp(-x(1));
      -x(1) + 2*x(2) - exp(-x(2))];

Вызовите fsolve с синтаксисом exitflag в начальной точке [-5 - 5]:

[xfinal fval exitflag] = fsolve(myfcn,[-5 -5])

Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.

xfinal =
    0.5671    0.5671

fval =
  1.0e-06 *
   -0.4059
   -0.4059

exitflag =
     1

В таблице для fsolve exitflag вы находите, что выходное флаговое значение средняя функция “1 сходилось к решению x”. Другими словами, fsolve сообщает, что myfcn является почти нулем в x =  [0.5671 0.5671].

Выходные сообщения

Каждый решатель выпускает сообщение к командному окну MATLAB® в конце его итераций. Это сообщение объясняет кратко почему остановленный решатель. Сообщение может предоставить больше подробную информацию, чем выходной флаг.

Много примеров в этой документации показывают выходные сообщения. Например, смотрите, Минимизируют Функцию Розенброка в Командной строке или Шаг 3: Вызовите fminunc использование опций.. Пример в предыдущем разделе, Выходных Флагах, показывает следующее выходное сообщение:

Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.

Это сообщение более информативно, чем выходной флаг. Сообщение указывает, что градиент релевантен. Сообщение также утверждает, что функциональный допуск управляет, как около 0 вектор значений функции должен быть для fsolve, чтобы расценить решение, как завершено.

Расширенные выходные сообщения

Некоторые решатели имеют выходные сообщения, которые содержат ссылки для получения дополнительной информации. Существует два типа ссылок:

  • Ссылки на слова или фразы. Если вы щелкаете по такой ссылке, окно открывается, который отображает определение слова или дает другую информацию. Новое окно может содержать ссылки на документацию Браузера документации для более подробной информации.

  • Ссылка как последняя строка отображения, говоря <stopping criteria details>. Если вы щелкаете по этой ссылке, MATLAB отображает больше детали о причине остановленный решатель.

Решатель fminunc улучшил выходные сообщения:

opts = optimoptions(@fminunc,'Algorithm','quasi-newton'); % 'trust-region' needs gradient
[xfinal fval exitflag] = fminunc(@sin,0,opts)

Это приводит к следующим результатам:

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

  • Ссылка <stopping criteria details> распечатывает следующее к командной строке MATLAB:

    Optimization completed: The first-order optimality measure, 0.000000e+00, is less 
    than options.OptimalityTolerance = 1.000000e-06.
  • Другие ссылки поднимают окно справки с определениями слова. Например, щелчок по ссылке Local minimum found открывает следующее окно:

    Щелчок по ссылке расширителя first-order optimality measure поднимает определение меры по оптимальности первого порядка для fminunc:

    Ссылка расширителя является способом получить больше информации в том же окне. Щелчок по ссылке расширителя first-order optimality measure снова закрывает определение.

  • Другие ссылки открывают Средство просмотра Справки.

Опции выходного сообщения

Установите опцию Display управлять внешним видом обоих выходных сообщений и итеративного отображения. Для получения дополнительной информации смотрите Итеративное Отображение. Следующая таблица показывает эффект различных настроек опции Display.

Значение параметра экранаВыведите к командному окну
Выходное сообщениеИтеративное отображение
'none' или синонимичный 'off''none''none'
'final' (значение по умолчанию для большинства решателей)Значение по умолчанию'none'
'final-detailed'Подробный'none'
'iter'Значение по умолчаниюДа
'iter-detailed'ПодробныйДа
'notify'Значение по умолчанию, только если exitflag ≤ 0'none'
'notify-detailed'Подробный, только если exitflag ≤ 0'none'

Например,

opts = optimoptions(@fminunc,'Display','iter-detailed','Algorithm','quasi-newton');
[xfinal fval] = fminunc(@cos,1,opts);

урожаи следующее отображение:

Похожие темы