スケジューリング問題の例

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_ に勤務するドライバー数
目的関数 最小化 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_ に勤務するドライバー数
目的関数 最小化 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で学ぶサプライチェーン分析

Practice time!

Pythonで学ぶサプライチェーン分析

Preparing Video For Download...