ข้อผิดพลาดที่พบบ่อยเกี่ยวกับข้อจำกัด

Supply Chain Analytics ด้วย Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

ข้อจำกัดความต้องการแบบพึ่งพา

บริบท

  • แผนการผลิต
  • วางแผนสำหรับ 2 ผลิตภัณฑ์ (A และ B)
  • วางแผนการผลิตใน 3 เดือน (ม.ค. - มี.ค.)
  • ผลิตภัณฑ์ A ใช้เป็นวัตถุดิบในการผลิตผลิตภัณฑ์ B

โจทย์ข้อจำกัด

  • สำหรับ B ทุก 1 หน่วย ต้องมี A อย่างน้อย 3 หน่วย
Supply Chain Analytics ด้วย Python

ข้อจำกัดความต้องการแบบพึ่งพา

สำหรับ B ทุก 1 หน่วย ต้องมี A อย่างน้อย 3 หน่วย

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

ข้อผิดพลาดที่พบบ่อย:

  • B ≤ 3A
  • 3B = A
Supply Chain Analytics ด้วย 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]

Supply Chain Analytics ด้วย Python

ตัวอย่างโค้ด (ต่อ)

for t in time:
    model += 3*X[('B',t)] <= X[('A',t)]
Supply Chain Analytics ด้วย Python

ข้อจำกัดแบบขยาย

สำหรับ B ทุก 1 หน่วย ต้องมี A อย่างน้อย 3 หน่วย และคำนึงถึงการขายตรงให้ลูกค้าของ A

  • 3B + Demand$_{\text{A}}$ ≤ A
Supply Chain Analytics ด้วย Python

ข้อจำกัดการผสมผสาน

บริบท

  • แผนการกระจายสินค้าจากคลังสินค้า
  • 2 คลังสินค้า (WH1 และ WH2)
  • จัดส่ง 2 ผลิตภัณฑ์ (A และ B) จากแต่ละคลัง
  • คลัง WH1 มีขนาดเล็ก จัดส่งได้สูงสุด 12 หน่วยของ A ต่อสัปดาห์ หรือ 15 หน่วยของ B ต่อสัปดาห์

โจทย์ข้อจำกัด

  • จัดส่ง A หรือ B ได้ในรูปแบบใดบ้างภายใน 4 สัปดาห์?
Supply Chain Analytics ด้วย 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
Supply Chain Analytics ด้วย 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")
Supply Chain Analytics ด้วย 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]
Supply Chain Analytics ด้วย 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
Supply Chain Analytics ด้วย Python

ข้อจำกัดแบบขยาย

คลัง WH1 มีขนาดเล็ก จัดส่งได้ 12 หน่วยของ A ต่อสัปดาห์ 15 หน่วยของ B ต่อสัปดาห์ หรือ 5 หน่วยของ C ต่อสัปดาห์ จะจัดส่ง A, B หรือ C ในรูปแบบใดบ้างได้ภายใน 4 สัปดาห์?

  • (1/12)A + (1/15)B + (1/5)C ≤ 4
Supply Chain Analytics ด้วย Python

สรุป

  • ข้อผิดพลาดที่พบบ่อย
    • ข้อจำกัดแบบพึ่งพา
    • ข้อจำกัดการเลือกผสมผสาน
  • วิธีขยายข้อจำกัด
  • ตรวจสอบข้อจำกัดโดยแทนค่าตัวเลข
Supply Chain Analytics ด้วย Python

มาฝึกกันเถอะ!

Supply Chain Analytics ด้วย Python

Preparing Video For Download...