# 네 개 변수의 초깃값을 리스트로 지정한다
x0 = [ 1, 5, 5, 1 ]
# 변수의 범위는 1~5로 튜플 형태다
b = ( 1, 5 )
# 범위를 나타내는 b를 원소로 갖는 bnds 변수 역시 튜플 형태이며 앞서 살펴본 한 개 변수 범위를 반복한다
bnds = ( b, b, b, b )
# 제약식 두 개를 입력한다. 제약식 #1(위의 constraint1 함수)은 네 개 변수의 곱이 25보다 크거나 같으므로 타입을 'ineq'로 정하고, 제약식 #2(위의 constraint2 함수)는 네 개 변수의 제곱이 40과 같으므로 타입을 'eq'로 정한다. 이어서 딕셔너리 형태로 만든 두 제약조건을 리스트로 묶는다
con1 = { 'type':'ineq', 'fun':constraint1 }
con2 = { 'type':'eq', 'fun':constraint2 }
cons = [ con1, con2 ]
# 목적함수, 제약조건, 범위, 초깃값을 만들어 minimize 함수로 전달한다
sol = minimize( objective, x0, method='SLSQP', bounds=bnds, constraints=cons )
print( sol )
결과
fun: 17.01401724556073 jac: array([14.57227039, 1.37940764, 2.37940764, 9.56415081]) message: 'Optimization terminated successfully.' nfev: 30 nit: 5 njev: 5 status: 0 success: True x: array([1. , 4.74299607, 3.82115466, 1.37940764])