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