더북(TheBook)

이번 예제는 앞서 살펴본 것보다 복잡한 목적함수와 두 개의 제약조건, 변수 네 개의 범위가 필요하므로 실제 문제를 푸는 데 좋은 예가 될 것이다. 여러 제약조건, 여러 변수의 범위와 초깃값을 어떻게 만들어 minimize 함수에 전달하는지를 알 수 있다.

목적함수는 minx1x4(x1 + x2 + x3) + x3, 제약조건 #1은 x1x2x3x4 ≥ 25, 제약조건 #2는 x12 + x22 + x32 + x42 = 40, 범위는 1 ≤ x1,x2,x3,x4 ≤ 5, 초깃값은 x1 = 1, x2 = 5, x3 = 5, x4 = 1이다.

# 최적화 라이브러리 scipy.optimize와 numpy를 임포트한다
from scipy.optimize import minimize
import numpy as np

# 목적함수를 다음과 같이 정의한다
def objective( x ):
    x1 = x[0]
    x2 = x[1]
    x3 = x[2]
    x4 = x[3]
    return x1*x4*( x1+x2+x3 )+x3

# constraint1 함수는 제약조건 #1 x_1 x_2 x_3 x_4≥25이다
def constraint1( x ):
    return x[0]*x[1]*x[2]*x[3]-25

# constraint2 함수는 제약조건 #2 x_1^2+x_2^2+x_3^2+x_4^2=40이다
def constraint2( x ):
    sum_sq = np.sum( np.square( x ) )
    return sum_sq-40


신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.