[파이썬][Scipy] scipy.optimize 예제

scipy.optimize 모듈은 최적화 문제를 해결하는데 사용되며, 다양한 최적화 알고리즘과 도구를 제공합니다. 이 모듈을 사용하여 간단한 예제를 살펴보겠습니다. 아래 예제는 1차원 함수의 최솟값을 찾는 과정을 보여줍니다.

먼저, 필요한 모듈을 가져오겠습니다:

mport numpy as np
from scipy.optimize import minimize
import matplotlib.pyplot as plt

이제 최적화할 함수를 정의합니다. 여기서는 간단한 1차원 함수를 사용합니다:

# 최적화할 함수 정의
def objective_function(x):
    return x**2 + 5*np.sin(x)

그런 다음, 최적화 알고리즘을 사용하여 이 함수의 최솟값을 찾겠습니다. minimize 함수를 사용할 것입니다. 이 예제에서는 BFGS 알고리즘을 사용하겠습니다:

# 초기 추측값 설정
initial_guess = 0.0

# 최적화 실행
result = minimize(objective_function, initial_guess, method='BFGS')

이제 결과를 확인하겠습니다:

# 최적화 결과 출력
if result.success:
    print("최적화 성공!")
    print("최솟값 위치:", result.x)
    print("최솟값:", result.fun)
else:
    print("최적화 실패:", result.message)

위 코드는 주어진 함수의 최솟값을 찾아 result.x에 최솟값의 위치를, result.fun에 최솟값을 저장합니다. result.success는 최적화가 성공적으로 수행되었는지 여부를 나타냅니다.

또한 최적화 과정을 시각화하여 최적화 경로를 확인할 수 있습니다. 이를 위해 다음 코드를 사용합니다:

# 함수 시각화를 위한 x 값 범위 설정
x_range = np.linspace(-10, 10, 100)
y_values = objective_function(x_range)

# 최적화 경로 시각화
plt.plot(x_range, y_values, label='Objective Function')
plt.scatter(result.x, result.fun, color='red', marker='o', label='Optimal Point')
plt.legend()
plt.title('Optimization Example')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.show()

이 코드는 최적화된 결과와 함께 최적화 과정을 시각화합니다.

이 예제에서는 간단한 1차원 함수를 사용하였지만, scipy.optimize를 사용하면 복잡한 다차원 함수의 최적화도 수행할 수 있습니다. 최적화 알고리즘 및 초기 추측값을 조정하여 원하는 결과를 얻을 수 있습니다.