일반적인 제약 조건 실수

Python으로 배우는 공급망 분석

Aaren Stubberfield

Supply Chain Analytics Mgr.

종속 수요 제약 조건

상황

  • 생산 계획
  • 2개 제품 (A, B) 계획
  • 3개월 (1–3월) 계획
  • 제품 B 생산에 A가 투입됨

제약 문제

  • B 1단위마다 A 최소 3단위 필요
Python으로 배우는 공급망 분석

종속 수요 제약 조건

B 1단위마다 A 최소 3단위 필요

  • 3B ≤ A
  • 3(2) ≤ A
  • 6 ≤ A

자주 하는 실수:

  • B ≤ 3A
  • 3B = A
Python으로 배우는 공급망 분석

코드 예시

from pulp import *
demand = {'A':[0,0,0],'B':[8,7,6]}
costs = {'A':[20,17,18],'B':[15,16,15]}

# Initialize Model
model = LpProblem("Aggregate Production Planning",
                   LpMinimize)

# Define Variables
time = [0, 1, 2]
prod = ['A', 'B']
X = LpVariable.dicts(
     "prod", [(p, t) for p in prod for t in time], 
      lowBound=0, cat="Integer")
# Define Objective
model += lpSum([costs[p][t] * X[(p, t)] 
                for p in prod for t in time])

# Define Constraint So Production is >= Demand
for p in prod:
    for t in time:
        model += X[(p, t)] >= demand[p][t]

Python으로 배우는 공급망 분석

코드 예시 (계속)

for t in time:
    model += 3*X[('B',t)] <= X[('A',t)]
Python으로 배우는 공급망 분석

확장된 제약 조건

B 1단위마다 A가 최소 3단위 있어야 하며, A의 소비자 직판을 반영해야 합니다.

  • 3B + Demand$_{\text{A}}$ ≤ A
Python으로 배우는 공급망 분석

조합 제약 조건

상황

  • 창고 배송 계획
  • 2개 창고 (WH1, WH2)
  • 각 창고에서 2개 제품 (A, B) 배송
  • WH1은 소형으로 주당 A 12개 또는 B 15개만 배송 가능

제약 문제

  • 4주에 A와 B의 조합은 무엇이 가능한가?
Python으로 배우는 공급망 분석
  • 1주 기준: (1/12)A + (1/15)B ≤ 1

정답 형식

  • (1/12)A + (1/15)B ≤ ≤
  • (1/12)(32) + (1/15)(20) ≤ 4
  • (32/12) + (20/15) ≤ 4
  • 4 ≤ 4

자주 하는 실수

  • 12A + 15B ≤ 4
  • (1/12)A + (1/15)B = 4
Python으로 배우는 공급망 분석
from pulp import *
import pandas as pd
demand = pd.read_csv("Warehouse_Constraint_Demand.csv", index_col=['Product'])
costs = pd.read_csv("Warehouse_Constraint_Cost.csv", index_col=['WH','Product'])

# Initialize Model
model = LpProblem("Distribution Planning", LpMinimize)

# Define Variables
wh = ['W1','W2']
prod = ['A', 'B']
cust = ['C1', 'C2', 'C3', 'C4']
X = LpVariable.dicts("ship", [(w, p, c) for c in cust for p in prod for w in wh],
                      lowBound=0, cat="Integer")
Python으로 배우는 공급망 분석

코드 예시 (계속)

# Define Objective
model += lpSum([X[(w, p, c)]*costs.loc[(w, p), c]  
               for c in cust for p in prod for w in wh])

# Define Constraint So Demand Equals Total Shipments
for c in cust:
    for p in prod:
        model += lpSum([X[(w, p, c)] for w in wh]) == demand.loc[p, c]
Python으로 배우는 공급망 분석

코드 예시 (계속)

제약

model += ((1/12) * lpSum([X['W1', 'A', c] for c in cust]) 
          + (1/15) * lpSum([X['W1', 'B', c] for c in cust])) <= 4
Python으로 배우는 공급망 분석

제약 확장

WH1은 소형으로 주당 A 12개, B 15개, 또는 C 5개만 배송 가능. 4주에 A, B, C의 조합은 무엇이 가능한가?

  • (1/12)A + (1/15)B + (1/5)C ≤ 4
Python으로 배우는 공급망 분석

요약

  • 자주 하는 실수
    • 종속 제약
    • 조합 선택 제약
  • 제약 확장 방법
  • 값 대입으로 제약 검증
Python으로 배우는 공급망 분석

Let's practice

Python으로 배우는 공급망 분석

Preparing Video For Download...