Phân tích độ nhạy giá bóng

Phân tích Chuỗi Cung Ứng với Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

Định nghĩa giá bóng

Vấn đề khi mô hình hóa:

  • Đầu vào cho ràng buộc thường là ước lượng
  • Thay đổi đầu vào có đổi nghiệm không?

Giá bóng (Shadow Prices):

  • Mức thay đổi của giá trị mục tiêu khi tăng 1 đơn vị vế phải của một ràng buộc, giữ các yếu tố khác không đổi.
Phân tích Chuỗi Cung Ứng với Python

Ngữ cảnh - Công ty Thủy tinh - Hoạch định nguồn lực:

Tài nguyên SP A SP B SP C
Giờ sản xuất 6 5 8
Diện tích kho (ft²) 10.5 20 10
Lợi nhuận $US $500 $450 $600

Ràng buộc:

  • Giờ năng lực sản xuất ≤ 60
  • Sức chứa kho ≤ 150 ft²
  • Sản lượng tối đa của A ≤ 8
Phân tích Chuỗi Cung Ứng với Python

Ví dụ mã

# Initialize Class, Define Vars., and Objective
model = LpProblem("Max Glass Co. Profits", 
                   LpMaximize)
A = LpVariable('A', lowBound=0)
B = LpVariable('B', lowBound=0)
C = LpVariable('C', lowBound=0)
model += 500 * A + 450 * B + 600 * C

# Constraint 1
model += 6 * A + 5 * B + 8 * C <= 60

# Constraint 2
model += 10.5 * A + 20 * B + 10 * C <= 150
# Constraint 3
model += A  <= 8

# Solve Model
model.solve()
print("Model Status: 
        {}".format(LpStatus[model.status]))
print("Objective = ", value(model.objective))
for v in model.variables():
    print(v.name, "=", v.varValue)
Phân tích Chuỗi Cung Ứng với Python

Lời giải ví dụ

Lời giải:

Sản phẩm SP A SP B SP C
Số kiện sản xuất 6.667 4 0

Giá trị mục tiêu: $5133.33

Phân tích Chuỗi Cung Ứng với Python

Ôn lại ràng buộc

Biến quyết định:

  • A đến C = Số kiện của từng sản phẩm A đến C

Ràng buộc:

  • 6A + 5B + 8C ≤ 60 (năng lực sản xuất hạn chế)
  • 10A + 20B + 10C ≤ 150 (sức chứa kho hạn chế)
  • A ≤ 8 (sản lượng tối đa của A)
Phân tích Chuỗi Cung Ứng với Python

In giá bóng (shadow price)

Mã Python:

o = [{'name':name, 'shadow price':c.pi} 
     for name, c in model.constraints.items()]
print(pd.DataFrame(o))
Phân tích Chuỗi Cung Ứng với Python

Giải thích giá bóng

Kết quả:

  name  shadow price
   _C1     78.148148
   _C2      2.962963
   _C3     -0.000000

Nhớ các ràng buộc:

  1. năng lực sản xuất hạn chế
  2. sức chứa kho hạn chế
  3. sản lượng tối đa của A
Phân tích Chuỗi Cung Ứng với Python

Độ chùng (slack) của ràng buộc

slack:

  • Lượng tài nguyên chưa dùng.

Python:

o = [{'name':name, 'shadow price':c.pi, 'slack': c.slack} 
     for name, c in model.constraints.items()]
print(pd.DataFrame(o))
Phân tích Chuỗi Cung Ứng với Python

Giải thích độ chùng ràng buộc

Kết quả:

  name  shadow price     slack
   _C1     78.148148 -0.000000
   _C2      2.962963 -0.000000
   _C3     -0.000000  1.333333

Về ràng buộc ràng buộc (binding)

  • slack = 0 ⇒ binding
  • Thay đổi ràng buộc binding sẽ đổi nghiệm

Nhớ các ràng buộc:

  1. năng lực sản xuất hạn chế
  2. sức chứa kho hạn chế
  3. sản lượng tối đa của A
Phân tích Chuỗi Cung Ứng với Python

Tóm tắt

  • Cách tính:
    • shadow prices
    • slack của ràng buộc
  • Nhận diện ràng buộc binding
    • slack = 0 ⇒ binding
    • slack > 0 ⇒ không binding
Phân tích Chuỗi Cung Ứng với Python

Hãy thử!

Phân tích Chuỗi Cung Ứng với Python

Preparing Video For Download...