이번 예제는 앞서 살펴본 것보다 복잡한 목적함수와 두 개의 제약조건, 변수 네 개의 범위가 필요하므로 실제 문제를 푸는 데 좋은 예가 될 것이다. 여러 제약조건, 여러 변수의 범위와 초깃값을 어떻게 만들어 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