排班問題範例

Python 的供應鏈分析

Aaren Stubberfield

Supply Chain Analytics Mgr.

預期需求

星期 需用駕駛人數
0 = 週一 11
1 = 週二 14
2 = 週三 23
3 = 週四 21
4 = 週五 20
5 = 週六 15
6 = 週日 8

問題:

  • 總共需要雇用多少位駕駛?

限制:

  • 每位駕駛連續上班 5 天,接著休 2 天,每週重複
Python 的供應鏈分析
步驟 定義
決策變數 X$_{\text{i}}$ = 第 _i_ 天上班的駕駛人數
目標 minimize z = X$_{\text{0}}$ + X$_{\text{1}}$ + X$_{\text{2}}$ + X$_{\text{3}}$ + X$_{\text{4}}$ + X$_{\text{5}}$ + X$_{\text{6}}$
約束 X$_{\text{0}}$ ≥ 11
X$_{\text{1}}$ ≥ 14
X$_{\text{2}}$ ≥ 23
X$_{\text{3}}$ ≥ 21
X$_{\text{4}}$ ≥ 20
X$_{\text{i}}$ ≥ 0(i = 0, ..., 6)
Python 的供應鏈分析
步驟 定義
決策變數 X$_{\text{i}}$ = 第 _i_ 天上班的駕駛人數
目標 minimize z = X$_{\text{0}}$ + X$_{\text{1}}$ + X$_{\text{2}}$ + X$_{\text{3}}$ + X$_{\text{4}}$ + X$_{\text{5}}$ + X$_{\text{6}}$
約束 X$_{\text{0}}$ + X$_{\text{3}}$ + X$_{\text{4}}$ + X$_{\text{5}}$ + X$_{\text{6}}$ ≥ 11
X$_{\text{0}}$ + X$_{\text{1}}$ + X$_{\text{4}}$ + X$_{\text{5}}$ + X$_{\text{6}}$ ≥ 14
X$_{\text{0}}$ + X$_{\text{1}}$ + X$_{\text{2}}$ + X$_{\text{3}}$ + X$_{\text{6}}$ ≥ 23
X$_{\text{0}}$ + X$_{\text{1}}$ + X$_{\text{2}}$ + X$_{\text{3}}$ + X$_{\text{4}}$ ≥ 21
X$_{\text{1}}$ + X$_{\text{2}}$ + X$_{\text{3}}$ + X$_{\text{4}}$ + X$_{\text{5}}$ ≥ 15
X$_{\text{i}}$ ≥ 0(i = 0, ..., 6)
Python 的供應鏈分析

程式範例

# Initialize Class
model = LpProblem("Minimize Staffing", 
                   LpMinimize)
days = list(range(7))

# Define Decision Variables
x = LpVariable.dicts('staff_', days,
                      lowBound=0, cat='Integer')

# Define Objective
model += lpSum([x[i] for i in days])
# Define Constraints
model += x[0] + x[3] + x[4] + x[5] + x[6] >= 11
model += x[0] + x[1] + x[4] + x[5] + x[6] >= 14
model += x[0] + x[1] + x[2] + x[5] + x[6] >= 23
model += x[0] + x[1] + x[2] + x[3] + x[6] >= 21
model += x[0] + x[1] + x[2] + x[3] + x[4] >= 20
model += x[1] + x[2] + x[3] + x[4] + x[5] >= 15
model += x[2] + x[3] + x[4] + x[5] + x[6] >= 8

# Solve Model
model.solve()
Python 的供應鏈分析

重點總結

  • 原始變數設計不可行
  • 需用決策變數來涵蓋部分約束
Python 的供應鏈分析

一起來練習吧!

Python 的供應鏈分析

Preparing Video For Download...