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
8
希望休勤務を考慮したシフト作成
NearMeの技術発表資料です
PRO
June 22, 2025
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
Hub Labeling による高速経路探索
nearme_tech
PRO
0
49
Build an AI agent with Mastra
nearme_tech
PRO
0
50
Rustで強化学習アルゴリズムを実装する vol3
nearme_tech
PRO
0
25
Webアプリケーションにおけるクラスの設計再入門
nearme_tech
PRO
1
67
AIエージェント for 予約フォーム
nearme_tech
PRO
2
140
ULID生成速度を40倍にしたった
nearme_tech
PRO
2
48
Amazon AuroraとMongoDBの アーキテクチャを比較してみたら 結構違った件について
nearme_tech
PRO
0
21
GitHub Custom Actionのレシピ
nearme_tech
PRO
0
15
RustでDeepQNetworkを実装する
nearme_tech
PRO
1
23
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
43
2.4k
The Invisible Side of Design
smashingmag
299
51k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Done Done
chrislema
184
16k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
16
920
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
BBQ
matthewcrist
89
9.7k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Balancing Empowerment & Direction
lara
1
300
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
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