이번 예제는 앞서 살펴본 것보다 복잡한 목적함수와 두 개의 제약조건, 변수 네 개의 범위가 필요하므로 실제 문제를 푸는 데 좋은 예가 될 것이다. 여러 제약조건, 여러 변수의 범위와 초깃값을 어떻게 만들어 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
    
    
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.