Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
希望休勤務を考慮したシフト作成
Search
NearMeの技術発表資料です
PRO
June 22, 2025
0
39
希望休勤務を考慮したシフト作成
NearMeの技術発表資料です
PRO
June 22, 2025
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
今だからこそ入門する Server-Sent Events (SSE)
nearme_tech
PRO
2
140
ReactNative のアップグレード作業が (意外に)楽しかった話
nearme_tech
PRO
2
76
強化学習アルゴリズムPPOの改善案を考えてみた
nearme_tech
PRO
0
6
Apple Containerについて調べて触ってみた
nearme_tech
PRO
0
120
Rust 並列強化学習
nearme_tech
PRO
0
23
並列で⽣成AIにコーディングをやらせる
nearme_tech
PRO
1
150
Hub Labeling による高速経路探索
nearme_tech
PRO
0
100
Build an AI agent with Mastra
nearme_tech
PRO
0
82
Rustで強化学習アルゴリズムを実装する vol3
nearme_tech
PRO
0
47
Featured
See All Featured
Building Adaptive Systems
keathley
43
2.7k
Fireside Chat
paigeccino
39
3.6k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
Become a Pro
speakerdeck
PRO
29
5.5k
It's Worth the Effort
3n
187
28k
The Cult of Friendly URLs
andyhume
79
6.6k
Gamification - CAS2011
davidbonilla
81
5.4k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
The Invisible Side of Design
smashingmag
301
51k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Visualization
eitanlees
148
16k
Transcript
0 希望休勤務を考慮したシフト作成 2025-06-20 第124回NearMe技術勉強会 Ryota Matsumoto
1 ⽬次 • ⾃⼰紹介 • シフトスケジューリングと数理最適化 • 定式化 • ハード制約とソフト制約
• 具体例 • まとめ 1/28
2 ⾃⼰紹介 松本 遼⼤ (まつもと りょうた) 所属:東京理科⼤学 理学研究科 応⽤数学専攻 修⼠1年 学部時代 :数理統計、機械学習 研究分野:組合せ最適化
(なかでもパッキング問題) 趣味:体を動かすこと(野球‧バドミントン‧ランニング) 最近ハマっていること:家でYouTubeの10分間筋トレ 2/28
3 シフトスケジューリング • シフトスケジューリング問題とは ◦ 従業員の希望をもとに「どの従業員が‧いつ‧どのシフトに⼊るか」 を決定する問題のこと • シフトの作成を⼿作業でやると⼿間がかかり、⾯倒.... →数理最適化を⽤いることで、シフトをコンピュータが作成する
3/28
4 最適化問題 • ある与えられた条件下で、 ⽬的関数を最⼤化または最⼩化するような解を求める問題 4/28
5 数理最適化のアプローチ 現実問題 最適化問題 最適化結果 問題解決 定式化 ソルバーによる求解 採用 修正
5/28
6 数理最適化の定式化 コンピュータが計算できるよう、現実問題を数式に変換 現実問題 最適化問題 定式化 6/28
7 シフトスケジューリングと数理最適化 • 数理最適化では、 ◦ 「どの従業員が‧いつ‧どのシフトに⼊るか」→ 決定変数 ◦ 考慮しなければいけない条件 →
制約条件 ◦ どんなスケジュールを作成したいか→⽬的関数 → 制約条件を満たしながら、⽬的関数を最⼤化もしくは最⼩化する 7/28
8 制約条件 • 考慮しなければいけない条件 ◦ 労働基準法 ◦ 従業員の休みたい⽇ 8/28
9 1ヶ⽉間のシフトスケジュール定式化 ⽬的関数 minimize Σ( あるd⽇の必要な⼈員と実際の⼈員の誤差 ) ←⼩さくしたい (d=1,2,...,31) 制約条件
‧労働基準法 ‧各従業員の休みたい⽇ 9/28
10 問題点 • 従業員の休みたい⽇を全て採⽤すると、シフトが全然埋まらないことも.... → 制約条件を考え直す必要がある 10/28
11 希望休勤務 • 休みたい⽇の希望出したけど勤務しないといけない ◦ 例:前⽥さんは17⽇と20⽇の休みの希望を出したけど、17⽇は勤務することに なっている → 希望休勤務も場合によっては必要 11/28
12 ハード制約 と ソフト制約 • 制約 ◦ ハード制約:必ず守らないといけない条件 ▪ 労働基準法
◦ ソフト制約:なるべく守るべき条件 ▪ 各従業員の休みたい⽇ • 例 前⽥さんは今⽉の17⽇と20⽇休みたい 12/28
13 1ヶ⽉間のシフトスケジュール定式化 ⽬的関数 minimize Σ( あるd⽇の必要な⼈員と実際の⼈員の誤差 ) (d=1,2,...,31) 制約条件 ‧労働基準法
‧各従業員の休みたい⽇ 13/28
14 1ヶ⽉間のシフトスケジュール定式化 ⽬的関数 minimize Σ( あるd⽇の必要な⼈員と実際の⼈員の誤差 ) (d=1,2,...,31) 制約条件 (ハード)労働基準法
(ソフト)各従業員の休みたい⽇ 14/28
15 1ヶ⽉間のシフトスケジュール定式化 ⽬的関数 minimize Σ( あるd⽇の必要な⼈員と実際の⼈員の誤差 ) + α ×(希望休勤務回数)
(d=1,2,...,31) 制約条件 (ハード)労働基準法 ソフト制約をペナルティ項として⽬的関数に⼊れる 15/28
16 1ヶ⽉間のシフトスケジュール定式化 ⽬的関数 minimize Σ( あるd⽇の必要な⼈員と実際の⼈員の誤差 ) + α ×(希望休勤務回数)
(d=1,2,...,31) 制約条件 (ハード)労働基準法 ソフト制約をペナルティ項として⽬的関数に⼊れる αの値によって希望休勤務させたいか操作できる 16/28
17 具体例 ある1⽇のシフトで3⼈必要 2⼈は勤務予定だが、残りの1⼈は休みの希望を出している この時、希望通り休ませるのか、勤務させるのか 希望通り休み 17/28
18 α = 2のとき ある1⽇のシフトで3⼈必要 (必要な⼈員と実際の⼈員の誤差 ) + α ×(希望休勤務回数)
=(3−2)+2×0 =1 希望通り休み 18/28
19 α = 2のとき ある1⽇のシフトで3⼈必要 (必要な⼈員と実際の⼈員の誤差 ) + α ×(希望休勤務回数)
=(3−3)+2×1 =2 休み希望出したけど 勤務 19/28
20 α = 2のとき(まとめ) ある1⽇のシフトで3⼈必要 (ⅰ)希望通り休ませる (誤差) + α (希望休勤務回数)
=(3−2)+2×0 =1 最⼩化なのでこっちが最適解 (ⅱ)休ませない (誤差) + α (希望休勤務回数) =(3−3)+2×1 =2 20/28
21 α = 0.5のとき ある1⽇のシフトで3⼈必要 (必要な⼈員と実際の⼈員の誤差 ) + α ×(希望休勤務回数)
=(3−2)+0.5×0 =1 希望通り休み 21/28
22 α = 0.5のとき ある1⽇のシフトで3⼈必要 (必要な⼈員と実際の⼈員の誤差 ) + α ×(希望休勤務回数)
=(3−3)+0.5×1 =0.5 休み希望出したけど 勤務 22/28
23 α = 0.5のとき(まとめ) ある1⽇のシフトで3⼈必要 (ⅰ)希望通り休ませる (誤差) + α (希望休勤務回数)
=(3−2)+0.5×0 =1 (ⅱ)休ませない (誤差) + α (希望休勤務回数) =(3−3)+0.5×1 =0.5 最⼩化なのでこっちが最適解 23/28
24 まとめ パラメータ α によってシフト作成者の意思が反映できる • 従業員の希望休を優先したい → α を⼤きくするべき (よりハードに)
• とにかくシフトの不⾜を無くしたい → α を⼩さくするべき (よりソフトに) ⚠注意 • α = 0 にすると希望休を無視したシフトになる • α < 0 にすると希望休勤務を優先したシフトになる 24/28
25 まとめ • α < 0 にすると希望休勤務を優先したシフトになる →別の⽬的で活かせる 例:ベテランの前⽥さんを12⽇(忙しい⽇)に勤務させたい ある希望⽇を
なるべく休ませたい→ α > 0 なるべく働かせたい→ α < 0 25/28
26 ソフト制約 の メリット‧デメリット メリット • 実⾏可能解が増える • ⼈間の意思が反映できる デメリット
• ソルバーの計算時間増加 • パラメータの調整が難しい 26/28
27 Thank you