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

Выходные флаги

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

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

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

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

Эта таблица ссылается на описание выходного флага каждого решателя.

Выходные флаги решателем

coneprog exitflag

fgoalattain exitflag

fminbnd exitflag

fmincon exitflag

fminimax exitflag

fminsearch exitflag

fminunc exitflag

fseminf Output Arguments

fsolve exitflag

fzero exitflag

intlinprog exitflag

linprog exitflag

lsqcurvefit exitflag

lsqlin exitflag

lsqnonlin exitflag

lsqnonneg exitflag

quadprog exitflag

 

Примечание

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

Вы получаете выходной флаг, вызывая решатель со 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® командное окно в конце итераций. Это сообщение кратко объясняет, почему решатель остановился. Сообщение может дать больше подробностей, чем выходной флаг.

Многие примеры в этой документации показывают выходные сообщения, такие как Задать и Решить задачу в командной строке. Пример в предыдущем разделе Exit Flags показывает следующее выходное сообщение:

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)

Это дает следующие результаты:

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

  • The <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'НичегоНичего
'final' (по умолчанию для большинства решателей)ДефолтНичего
'final-detailed'ПодробныйНичего
'iter'ДефолтДа
'iter-detailed'ПодробныйДа
'notify'По умолчанию только, если exitflag  ≤ 0Ничего
'notify-detailed'Подробно, только если exitflag  ≤ 0Ничего

Для примера,

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

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

Похожие темы