Nelder-Mead Method 간단 소개

    목차
반응형

Nelder-Mead Method 한 줄 요약

Downhill Simplex라고도 불리며 다면체(Simplex)를 이용하여 함수의 최대/최소를 찾아가는 기법

 

https://github.com/feynmanliang/optala

 

 

주요 용어

- 함수의 최솟값을 찾는 경우

- 중심점: 최댓값을 갖는 점을 제외한 나머지 점들의 평균

- Reflection: 최솟값에서 가장 먼 점에서의 반대방향은 최솟값에 더 가까울 것이라는 가정을 하여 중심점 기준으로 Reflect(반사)

- Expansion: 반사되어 간 좌표가 새로운 최솟값인 경우, 그 방향으로 조금 더 가면 최솟값이 있을 것이라는 가정을 하여 반사되었던 방향으로 Expanse(확장)

- Contraction: 반사되어 간 좌표가 값이 큰 경우, 그 방향으로 덜 가면 더 작은 함수값을 찾을 수 있을 것이라는 가정을 하여 Contract(축소)

- α, β, γ: Reflection, Expansion, Contraction 계수

 

 

Pseudo Code

 

 

모식도

 

 

 

Python 코드

import numpy as np
from scipy.optimize import fmin

def f1(x): # 일반 함수
    return (x - 2) ** 2 + 2
    
fmin(f1, 0) # 0 = initial guess
"""
Optimization terminated successfully.
         Current function value: 2.000000
         Iterations: 27
         Function evaluations: 54
array([2.])
"""


def f2(x): # 다변수 함수
    return (1 - x[0])**2 + 100.0 * (x[1] - x[0]**2)**2
    
fmin(f2, (-1, -1))
"""
Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 67
         Function evaluations: 125
array([0.99999886, 0.99999542])
"""

 

 

 

자세한 수식 설명과 코드 구현 → github

728x90
반응형