[python] SciPy를 사용하여 선형제약식 최적화하기

SciPy는 파이썬에서 과학 및 수학 연산을 쉽게 다룰 수 있게 해주는 유용한 라이브러리입니다. 이 라이브러리의 선형 프로그래밍 모듈인 linprog를 사용하여 선형제약식 최적화 문제를 풀 수 있습니다. 선형제약식 최적화는 주어진 선형 목적 함수를 최대화 또는 최소화하는 조건을 만족하는 변수 값을 찾는 문제입니다.

선형제약식 최적화 문제

선형제약식 최적화 문제는 다음과 같은 형태로 표현됩니다:

최적화 문제: 최소화 또는 최대화하려는 선형 목적 함수와 선형 등식 및 부등식 제약 조건을 가지고 있다.

목적 함수: 주어진 변수들에 대한 선형 조합으로 표현되는 함수입니다.

등식 제약 조건: 주어진 변수들에 대한 선형 조합이 일정한 값으로 제한됩니다.

부등식 제약 조건: 주어진 변수들에 대한 선형 조합이 주어진 부등호 관계를 따라야합니다.

SciPy의 linprog 함수는 선형 최적화 문제를 해결하기 위해 사용됩니다.

SciPy의 linprog 함수

linprog 함수는 다음과 같은 매개 변수를 취합니다:

linprog 함수는 최적화 결과를 반환합니다. 이 결과에는 최적 해, 최적 목적 함수 값, 부등식 및 등식 제약 조건의 만족 여부 등이 포함됩니다.

예제

다음은 SciPy의 linprog 함수를 사용하여 선형제약식 최적화 문제를 해결하는 예제 코드입니다. 이 예제에서는 다음의 문제를 해결합니다:

최소화 문제: 2x + y -2x + y >= -1 x + 2y >= -2 x >= 0 y >= 0

import numpy as np
from scipy.optimize import linprog

c = [-2, 1]
A = np.array([[-2, 1],
              [1, 2]])
b = [-1, -2]
bounds = [(0, None), (0, None)]

result = linprog(c, A_ub=A, b_ub=b, bounds=bounds)
print(result)

위의 예제 코드에서 등식 및 부등식 제약 조건은 NumPy의 배열로 표시됩니다.

결과는 다음과 같이 출력됩니다:

     con: array([], dtype=float64)
     fun: -1.000000000003534
 message: 'Optimization terminated successfully.'
     nit: 3
   slack: array([0.00000000e+00, 1.99237112e-13])
  status: 0
 success: True
       x: array([5.00000000e-01, 5.00000000e-01])

위의 결과에서 x는 선형제약식의 최적 해를 나타냅니다.

결론

SciPy의 linprog 함수를 사용하면 선형제약식 최적화 문제를 간단하게 해결할 수 있습니다. 이 함수를 사용하여 다양한 최적화 문제를 풀어보고, 결과를 분석하여 원하는 결과를 얻을 수 있습니다.

참고자료