용량 제약 공장 입지 - 사례 연구 P3

Python으로 배우는 공급망 분석

Aaren Stubberfield

Supply Chain Analytics Mgr.

용량 제약 공장 입지 모형

모형화

  • 지역 시설에서의 생산
    • 공장 두 규모(저/고)
  • 타 지역으로 생산분 배송
  • 생산 시설 개소/폐쇄

지역 생산이 표시된 지구본 이미지

Python으로 배우는 공급망 분석

예상 범위

의사결정변수 값은 어떻게 예상할 수 있을까요?

생산량:

  • 단위 생산·배송 변수가격이 낮은 지역에서 생산량이 큼
  • 고정비도 상대적으로 낮은 지역은 생산을 최대화

공장 개소/폐쇄:

  • 수요가 높은 지역에는 고용량 공장
  • 고정비가 상대적으로 낮은 지역에도 고용량 공장
Python으로 배우는 공급망 분석

제약의 민감도 분석

총생산 = 총수요:

  • shadow prices = 지역 수요 1단위 증가 시 총비용 변화
  • slack = 0이어야 함

총생산 ≤ 총생산능력:

  • shadow prices = 생산능력 1단위 증가 시 총비용 변화
  • slack = 잔여 생산능력이 있는 지역
Python으로 배우는 공급망 분석
from pulp import *
import pandas as pd

# Initialize Class
model = 
    LpProblem("Capacitated Plant Location Model",
               LpMinimize)

# Define Decision Variables
loc = ['A', 'B', 'C', 'D', 'E']
size = ['Low_Cap','High_Cap']
x = LpVariable.dicts(
                "production_", 
                [(i,j) for i in loc for j in loc],
                 lowBound=0, upBound=None, 
                 cat='Continuous')

y = LpVariable.dicts(
               "plant_", 
               [(i,s) for s in size for i in loc], 
                cat='Binary')
# Define Objective Function
model += 
  (lpSum([fix_cost.loc[i,s]*y[(i,s)] 
          for s in size for i in loc])
 + lpSum([var_cost.loc[i,j]*x[(i,j)] 
          for i in loc for j in loc]))

# Define the Constraints
for j in loc: model += 
  lpSum([x[(i, j)] 
        for i in loc]) == demand.loc[j,'Dmd']
for i in loc: model += 
  lpSum([x[(i, j)] for j in loc]) <= lpSum(
             [cap.loc[i,s]*y[(i,s)]for s in size])
Python으로 배우는 공급망 분석
# Solve
model.solve()

# Print Decision Variables and Objective Value print(LpStatus[model.status]) o = [{'prod':"{} to {}".format(i,j), 'quant':x[(i,j)].varValue} for i in loc for j in loc] print(pd.DataFrame(o)) o = [{'loc':i, 'lc':y[(i,size[0])].varValue, 'hc':y[(i,size[1])].varValue} for i in loc] print(pd.DataFrame(o)) print("Objective = ", value(model.objective))
# Print Shadow Price and Slack o = [{'name':name, 'shadow price':c.pi, 'slack': c.slack} for name, c in model.constraints.items()] print(pd.DataFrame(o))
Python으로 배우는 공급망 분석

비즈니스 질문

가능한 질문:

  • 이 공급망 네트워크 모델의 예상 비용은 얼마입니까?

  • 한 지역의 수요가 증가하면 그 지역의 생산·배송 비용을 충당하려면 얼마의 이익이 필요합니까?

  • 어떤 지역이 향후 수요 증가에 대비한 잔여 생산능력을 보유합니까?

Python으로 배우는 공급망 분석

요약

검토 내용:

  • 의사결정변수의 예상 범위
  • 민감도 분석 출력 해석 (shadow prices, slack)
  • 풀이 및 결과 출력 코드
  • 가능한 비즈니스 질문
Python으로 배우는 공급망 분석

잘하셨습니다! 이제 실습할 차례입니다

Python으로 배우는 공급망 분석

Preparing Video For Download...