Main Content

종료 플래그와 종료 메시지

종료 플래그

최적화 솔버는 작업 완료 시 종료 플래그를 설정합니다. 종료 플래그는 솔버가 반복을 중단한 이유를 나타내는 코드로서 정수입니다. 일반적으로 다음과 같습니다.

  • 종료 플래그가 양수면 결과가 성공적임을 의미합니다.

  • 종료 플래그가 음수면 결과가 성공적이지 않음을 의미합니다.

  • 종료 플래그가 0이면 반복 한도 또는 함수 실행 횟수에 대한 제한을 초과함으로써 솔버가 중단되었음을 의미합니다(반복 횟수와 함수 실행 횟수 항목과 허용오차와 중지 기준 항목 참조).

아래 표는 각 솔버의 종료 플래그 설명으로 연결됩니다.

솔버별 종료 플래그

coneprog exitflag

fgoalattain exitflag

fminbnd exitflag

fmincon exitflag

fminimax exitflag

fminsearch exitflag

fminunc exitflag

fseminf exitflag

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))];

초기점 [-5 -5]에서 exitflag 구문으로 fsolve를 호출합니다.

[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로 수렴되는 함수”를 의미함을 알 수 있습니다. 다시 말해, fsolvemyfcnx = [0.5671 0.5671]에서 0에 가깝다고 보고합니다.

종료 메시지

각 솔버는 반복 종료 시 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.

이 메시지는 종료 플래그보다 많은 정보를 제공합니다. 이 메시지는 기울기가 적절함을 나타냅니다. 또한 이 메시지는 fsolve가 해를 완료된 것으로 간주하려면 함수 값 벡터가 0에 얼마나 가까워야 하는지를 함수 허용오차가 제어한다는 사실을 명시하고 있습니다.

향상된 종료 메시지

일부 솔버는 자세한 내용을 제공하는 링크가 담긴 종료 메시지를 사용합니다. 다음 두 가지 유형의 링크가 있습니다.

  • 단어 또는 구에 연결된 링크. 이러한 링크를 클릭하면 용어의 정의를 표시하거나 기타 정보를 제공하는 창이 열립니다. 새 창에는 더 자세한 정보를 위해 도움말 브라우저 문서로 연결되는 링크가 포함되어 있을 수 있습니다.

  • <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에 대한 1차 최적성 측정값의 정의가 표시됩니다.

    확장 링크는 동일한 창에 자세한 정보를 가져오는 방법입니다. 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);

다음과 같은 표시가 생성됩니다.

관련 항목