물류 최적화를 공부하면서 가장 흥미롭게 느꼈던 주제는 선형 계획법(Linear Programming)입니다.
기존에 알고 있던 휴리스틱(Heuristic) 및 메타휴리스틱(Meta-heuristic) 방법들과는 다르면서도
뭔가 있어 보이는(?) 수식들이 재미 있었습니다.
선형 계획법은 다음의 세 가지 요소로 구성됩니다.
의사 결정 변수 (Decision Variable)
제품의 생산량이나 투자 금액 등 기업의 활동을 나타내는 변수를 의미합니다.
목적 함수 (Objective Function)
이익 또는 비용의 최소화와 같이 의사 결정의 목표를 나타내는 함수를 의미합니다.
제약 조건 (Constraints)
생산 능력이나 자본 등 의사 결정 변수에 대한 제한을 나타내는 조건을 의미합니다.
만약 선형 계획법의 의사 결정 변수가 두 개라면, 2차원 그래프를 그려서 해결책을 찾을 수 있습니다.
각 제약식에 해당하는 함수를 그리고, 이 함수들이 만나는 점 중에서 목적 함수를 최대화하는 좌표의 값이 최적화 문제의 정답이 됩니다.
Decision Variable
Objective Function
Constraints
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