이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

비선형 함수 최적화하기

일변수 함수 최소화하기

단일 변수의 수학 함수가 주어진 경우 fminbnd 함수를 사용하여, 지정된 구간에서 함수의 국소 최소점을 구할 수 있습니다. MATLAB®과 함께 제공되는 humps.m 함수를 예로 들어 보겠습니다. 다음 그림은 humps의 그래프를 보여줍니다.

x = -1:.01:2;
y = humps(x);
plot(x,y)
xlabel('x')
ylabel('humps(x)')
grid on

범위 (0.3,1)에서 humps 함수의 최솟값을 구하려면 다음을 사용하십시오.

x = fminbnd(@humps,0.3,1)
x = 0.6370

optimset 명령으로 생성된 4번째 인수를 fminbnd에 전달하여 출력값을 테이블 형식으로 표시하도록 요청할 수 있습니다.

opts = optimset('Display','iter');
x = fminbnd(@humps,0.3,1,opts)
 
 Func-count     x          f(x)         Procedure
    1       0.567376      12.9098        initial
    2       0.732624      13.7746        golden
    3       0.465248      25.1714        golden
    4       0.644416      11.2693        parabolic
    5         0.6413      11.2583        parabolic
    6       0.637618      11.2529        parabolic
    7       0.636985      11.2528        parabolic
    8       0.637019      11.2528        parabolic
    9       0.637052      11.2528        parabolic
 
Optimization terminated:
 the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04 
x = 0.6370

반복 표시는 함수가 실행될 때마다 x의 현재 값과 f(x)의 함수 값을 표시합니다. fminbnd의 경우 함수를 한 번 실행하는 것은 알고리즘을 1회 반복하는 것과 같습니다. 마지막 열은 황금분할 탐색과 포물선 보간 중 각 반복에서 어떤 절차가 사용되었는지 보여줍니다. 자세한 내용은 반복 표시 항목을 참조하십시오.

다변수 함수 최소화하기

fminsearch 함수는 다변수의 함수를 처리한다는 점을 제외하고 fminbnd와 유사합니다. 시작 구간이 아닌 시작 벡터 x0을 지정하십시오. fminsearch는 이 시작 벡터 근처에 있는, 수학적 함수의 국소 최소점인 벡터 x를 반환하려고 시도합니다.

fminsearch를 사용해 보기 위해, 먼저 세 개의 변수 x, y, z를 갖는 함수 three_var를 만들어 보겠습니다.

function b = three_var(v)
x = v(1);
y = v(2);
z = v(3);
b = x.^2 + 2.5*sin(y) - z^2*x^2*y^2;

이제, x = -0.6, y = -1.2, z = 0.135를 시작 값으로 사용하여 이 함수의 최솟값을 구합니다.

v = [-0.6,-1.2,0.135];
a = fminsearch(@three_var,v)

a =
    0.0000   -1.5708    0.1803

함수 최대화하기

fminbnd 솔버와 fminsearch 솔버는 목적 함수를 최소화하려고 시도합니다. 최대화 문제, 즉 다음과 같은 형식의 문제가 있으면

maxxf(x),

g(x) = –f(x)를 정의하고 g를 최소화하여 문제를 풀 수 있습니다.

예를 들어, x = 5 근처에서 tan(cos(x))의 최댓값을 구하려면 다음을 실행할 수 있습니다.

[x fval] = fminbnd(@(x)-tan(cos(x)),3,8)

x =
    6.2832

fval =
   -1.5574

최댓값은 1.5574(보고된 fval의 음수 값)이고 x = 6.2832에 나타납니다. 이 답은, 최댓값이 tan(1) = 1.5574(5자리까지)이고 x = 2π = 6.2832에 나타나므로 맞습니다.

fminsearch 알고리즘

fminsearch는 Lagarias et al. [1]에 설명된 넬더-미드 단체 알고리즘을 사용합니다. 이 알고리즘은 n차원 벡터 x에 대해 n + 1개의 점으로 구성된 단체를 사용합니다. 이 알고리즘은 먼저 초기 추측값 x0을 기준으로 단체를 만듭니다. 즉, x0에 각 성분 x0(i)의 5%를 더합니다. 그런 다음 이 알고리즘은 이러한 n개의 벡터를 x0과 함께 단체의 요소로 사용합니다. (x0(i) = 0이면 0.00025를 성분 i로 사용합니다.) 그런 다음, 이 알고리즘은 다음 절차에 따라 단체를 반복해서 수정합니다.

참고

각 단계의 설명 끝에는 fminsearch 반복 표시의 키워드가 굵게 표시되어 있습니다.

  1. x(i)가 현재 단체 i = 1,...,n+1의 점 목록을 표시하도록 합니다.

  2. 단체의 점을 가장 낮은 함수 값 f(x(1))에서 가장 높은 함수 값 f(x(n+1)) 순서로 정렬합니다. 반복의 각 단계에서, 알고리즘은 현재 가장 부적합한 점 x(n+1)을 버리고 다른 점을 단체에 포함시킵니다. 또는, 아래 7단계의 경우 이 알고리즘은 f(x(1))보다 큰 값을 갖는 n개의 점을 모두 바꿉니다.

  3. 반사된 점을 생성합니다.

    r = 2m – x(n+1)

    여기서

    m = Σx(i)/n이고, i = 1...n

    입니다.

    그런 다음 f(r)을 계산합니다.

  4. f(x(1)) ≤ f(r) < f(x(n))이면 r을 받고 이 반복을 중지합니다. 반사(Reflect)

  5. f(r) < f(x(1))이면 확장 점 s를 계산합니다.

    s = m + 2(m – x(n+1))

    그런 다음 f(s)를 계산합니다.

    1. f(s) < f(r)이면 s를 받고 반복을 중지합니다. 확장(Expand)

    2. 그렇지 않으면 r을 받고 반복을 중지합니다. 반사(Reflect)

  6. f(r) ≥ f(x(n))이면 m과, x(n+1)과 r 중 더 좋은 값 사이에서 수축(Contraction)을 수행합니다.

    1. f(r) < f(x(n+1))이면(즉, r이 x(n+1)보다 더 좋은 값이면) 다음을 계산합니다.

      c = m + (r – m)/2

      그런 다음 f(c)를 계산합니다. f(c) < f(r)이면 c를 받고 반복을 중지합니다. 외부로 수축(Contract outside) 그렇지 않으면 7단계를 계속 진행합니다(축소(Shrink)).

    2. f(r) ≥ f(x(n+1))이면 다음을 계산합니다.

      cc = m + (x(n+1) – m)/2

      그런 다음 f(cc)를 계산합니다. f(cc) < f(x(n+1))이면 cc를 받고 반복을 중지합니다. 내부로 수축(Contract inside) 그렇지 않으면 7단계를 계속 진행합니다(축소(Shrink)).

  7. n개의 점을 계산합니다.

    v(i) = x(1) + (x(i) – x(1))/2

    그런 다음 f(v(i))를 계산합니다(i = 2,...,n+1). 다음 반복 시 단체는 x(1), v(2),...,v(n+1)이 됩니다. 축소(Shrink)

다음 그림은 fminsearch가 단계에서 계산할 수 있는 점과, 각각의 가능한 새 단체를 보여줍니다. 원래 단체는 굵은 윤곽선으로 표시되어 있습니다. 중지 조건을 충족할 때까지 반복이 계속됩니다.

참고 문헌

[1] Lagarias, J. C., J. A. Reeds, M. H. Wright, and P. E. Wright. “Convergence Properties of the Nelder-Mead Simplex Method in Low Dimensions.” SIAM Journal of Optimization, Vol. 9, Number 1, 1998, pp. 112–147.

관련 항목