Search

Google OR Tools 소개

물류 최적화를 공부하면서 가장 흥미롭게 느꼈던 주제는 선형 계획법(Linear Programming)입니다.
기존에 알고 있던 휴리스틱(Heuristic) 및 메타휴리스틱(Meta-heuristic) 방법들과는 다르면서도
뭔가 있어 보이는(?) 수식들이 재미 있었습니다.
선형 계획법은 다음의 세 가지 요소로 구성됩니다.
의사 결정 변수 (Decision Variable)
제품의 생산량이나 투자 금액 등 기업의 활동을 나타내는 변수를 의미합니다.
목적 함수 (Objective Function)
이익 또는 비용의 최소화와 같이 의사 결정의 목표를 나타내는 함수를 의미합니다.
제약 조건 (Constraints)
생산 능력이나 자본 등 의사 결정 변수에 대한 제한을 나타내는 조건을 의미합니다.
만약 선형 계획법의 의사 결정 변수가 두 개라면, 2차원 그래프를 그려서 해결책을 찾을 수 있습니다.
각 제약식에 해당하는 함수를 그리고, 이 함수들이 만나는 점 중에서 목적 함수를 최대화하는 좌표의 값이 최적화 문제의 정답이 됩니다.
Decision Variable
x,y,x,y실수x, y \,\,\, 단, x,y는 \,\,\,실수
Objective Function
maximizeZ=100x+40ymaximize Z = 100x + 40y
Constraints
100x+50y<=30007x<=100\begin{align}100x + 50y <= 3000 \\ 7x <= 100\end{align}
from ortools.linear_solver import pywraplp def solve(): solver = pywraplp.Solver.CreateSolver('GLOP') #Decision Valables x = solver.NumVar(0, solver.infinity(), 'x') y = solver.NumVar(0, solver.infinity(), 'y') #Constraints solver.Add(100*x + 50*y <= 3000) solver.Add(7 * x <= 100) #Objective function solver.Maximize(100 * x + 40 * y) #Solve status = solver.Solve() if status == pywraplp.Solver.OPTIMAL: print('Objective value =', solver.Objective().Value()) print('x =', x.solution_value()) print('y =', y.solution_value()) solve()
Python
복사
결과는 아래와 같습니다.
Objective value = 2685.714285714286 x = 14.285714285714286 y = 31.428571428571427
Python
복사
Keyword: Logistics Optimization, 물류 최적화, 파이썬, Python, 선형계획법, Linear Programming, Google OR Tools
Reference