exponenta event banner

Флаги выхода и сообщения выхода

Флаги выхода

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

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

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

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

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

Флаги выхода решателем

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(...)

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

2x1 x2 = e x1 x1 + 2x2 = e − x2.

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

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

Во многих примерах этой документации показаны сообщения о выходе, такие как «Определить и решить проблему в командной строке». В примере предыдущего раздела «Флаги выхода» отображается следующее сообщение о выходе:

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 expander link выводит определение меры оптимальности первого порядка для 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);

выдает следующий экран:

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