Main Content

비선형 함수 최적화하기

일변수 함수 최소화하기

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

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

Figure contains an axes object. The axes object with xlabel x, ylabel humps(x) contains an object of type line.

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

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

optimset를 사용하여 Display 옵션을 'iter'로 설정하면 풀이 과정을 자세하게 확인할 수 있습니다. 결과 옵션을 fminbnd로 전달하십시오.

options = optimset('Display','iter');
x = fminbnd(@humps,0.3,1,options)
 
 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회 반복하는 것과 같습니다. 마지막 열은 fminbnd가 황금분할 탐색과 포물선 보간 중 각 반복에서 어떤 절차를 사용했는지 보여줍니다. 자세한 내용은 최적화 솔버 반복 표시 항목을 참조하십시오.

참고: 최적화 솔버는 실수 값 함수에 적용됩니다. 복소수 값은 최적화할 수 없습니다. 단, 노름과 같은 복소수 값의 실수 값 함수는 예외입니다.

다변수 함수 최소화하기

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),(1)

    여기서

    m = Σx(i)/n이고, i = 1...n(2)
    입니다.

    그런 다음 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)),(3)

    그런 다음 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(4)

      그런 다음 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(5)

      그런 다음 f(cc)를 계산합니다. f(cc) < f(x(n + 1))이면 cc를 받고 반복을 중지합니다. 내부로 수축(Contract inside)

      그렇지 않으면 7단계(축소(Shrink))를 계속 진행합니다.

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

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

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

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

Graphical representation of fminsearch algorithm showing reflection, expansion, contraction, and shrinking points.

참고 문헌

[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.

관련 항목