더북(TheBook)
# 네 개 변수의 초깃값을 리스트로 지정한다
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])
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.