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
ShibaNyan
September 10, 2018
Programming
0
2.1k
遺伝的アルゴリズムでシフト組みを自動化した話
BitValley2018 AfterPartyのLTでお話しました.
当番のシフトを組むのに時間がかかりすぎるという問題を,遺伝的アルゴリズムを使ってLINE BOTに実装することで解決しました.
ShibaNyan
September 10, 2018
Tweet
Share
More Decks by ShibaNyan
See All by ShibaNyan
証明写真を30円で作る
shiba6v
0
980
IPythonマジックコマンドを作る
shiba6v
1
1.8k
畳み込みニューラルネットワーク(CNN)の判断根拠の可視化手法 (20分トーク用)
shiba6v
1
1.3k
Other Decks in Programming
See All in Programming
Grafana:建立系統全知視角的捷徑
blueswen
0
260
Deno Tunnel を使ってみた話
kamekyame
0
280
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
570
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
520
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
330
gunshi
kazupon
1
130
Go コードベースの構成と AI コンテキスト定義
andpad
0
150
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.1k
CSC307 Lecture 01
javiergs
PRO
0
630
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
200
これならできる!個人開発のすゝめ
tinykitten
PRO
0
140
ローカルLLMを⽤いてコード補完を⾏う VSCode拡張機能を作ってみた
nearme_tech
PRO
0
210
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
98
The Language of Interfaces
destraynor
162
26k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
140
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
A Tale of Four Properties
chriscoyier
162
23k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
530
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
120
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
37
YesSQL, Process and Tooling at Scale
rocio
174
15k
Transcript
遺伝的アルゴリズムで シフト組みを自動化した話 BitValley 2018 AfterParty LT
自己紹介 • シバニャン • 京都大学工学部4回生 • Twitter: @_6v_ • CAMPHOR-
当番のシフト • 30コマ,約30人のシフト組み • 1コマに1人割り当てる
シフト決定の流れ 調整サービス シフト組み シフト発表 • 調整サービスを利用してシフトを提出してもらう • 手動でシフト組み • グループLINEで完成したシフトを発表
シフト組みの難しさ • 30コマ,約30人のシフト組み • 30^30 通り(≒2×10^44)
シフト組みの難しさ • 30コマ,約30人のシフト組み • 30^30 通り(≒2×10^44) 2時間かかる・・・ 自動化したい・・・
シフト組みの課題 • 同じ人が2回入らないといけない場合がある • 2回入る場合は日時が離れている方が良い • △,×を考慮するべき など・・・
シフト組みの課題 • 同じ人が2回入らないといけない場合がある • 2回入る場合は日時が離れている方が良い • △を考慮するべき など・・・
遺伝的アルゴリズムでやる シフトを遺伝子に見立てて,生物が交叉,突然 変異,自然淘汰によって進化するようにシフトを 改良していく [(枠1),(枠2),(枠3),…,(枠30)] 例) [(Gさん),(Eさん),(Nさん),…,(Eさん)] [(Aさん),(Lさん),(Gさん),…,(Oさん)]
遺伝的アルゴリズムの説明 • シフト表をランダムに30パターン生成 ↓ • シフト表の良さを評価 ↓ • 評価が良かったシフト6個残して後は消す ↓
• 交叉,突然変異させて30個に増やす 200ループ
遺伝的アルゴリズムの説明 • シフト表をランダムに30パターン生成 200ループ [(Gさん),(Eさん),(Nさん),…,(Eさん)] [(Aさん),(Lさん),(Gさん),…,(Oさん)] … (30パターン) [(Rさん),(Aさん),(Nさん),…,(Dさん)]
遺伝的アルゴリズムの説明 • シフト表をランダムに30パターン生成 • シフト表の良さを評価 200ループ [(Gさん),(Eさん),(Nさん),…,(Eさん)] : 300点 [(Aさん),(Lさん),(Gさん),…,(Oさん)]
: 100点 … (30パターン) [(Rさん),(Aさん),(Nさん),…,(Dさん)] : 50点
遺伝的アルゴリズムの説明 • シフト表をランダムに30パターン生成 • シフト表の良さを評価 • 評価が良かったシフト6個残して後は消す 200ループ [(Gさん),(Eさん),(Nさん),…,(Eさん)] :
300点 [(Aさん),(Lさん),(Gさん),…,(Oさん)] : 100点 … (6パターン)
遺伝的アルゴリズムの説明 • シフト表をランダムに30パターン生成 • シフト表の良さを評価 • 評価が良かったシフト6個残して後は消す • 交叉,突然変異させて30個に増やす 200ループ
[(Gさん),(Eさん),(Nさん),…,(Eさん)] [(Aさん),(Lさん),(Gさん),…,(Oさん)] [(Aさん),(Eさん),(Nさん),…,(Oさん)] … (30パターン)
遺伝的アルゴリズムの説明 • シフト表をランダムに30パターン生成 • シフト表の良さを評価 • 評価が良かったシフト6個残して後は消す • 交叉,突然変異させて30個に増やす 200ループ
[(Gさん),(Eさん),(Nさん),…,(Eさん)] [(Aさん),(Lさん),(Gさん),…,(Oさん)] [(Aさん),(Eさん),(Nさん),…,(Oさん)] [(Gさん),(Eさん),(Nさん),…,(Tさん)] … (30パターン)
遺伝的アルゴリズムの説明 • シフト表をランダムに30パターン生成 ↓ • シフト表の良さを評価 ↓ • 評価が良かったシフト6個残して後は消す ↓
• 交叉,突然変異させて30個に増やす 200ループ
遺伝的アルゴリズムの説明 • シフト表をランダムに30パターン生成 ↓ • シフト表の良さを評価 ↓ • 評価が良かったシフト6個残して後は消す ↓
• 交叉,突然変異させて30個に増やす 200ループ 大事なのはここ! 評価する式を立てる
シフト組みの課題 より • 同じ人が2回入らないといけない場合がある • 2回入る場合は日時が離れている方が良い • △,×を考慮するべき
シフト組みの課題 より • 同じ人が2回入らないといけない場合がある →同じ人が2回入ったら 100点 を減らす • 2回入る場合は日時が離れている方が良い →(離れている日数)×1点
を加える • △,×を考慮するべき →△一個につき10000点,×一個につき1000000 点 を減らす
シフト組みの課題 より • 同じ人が2回入らないといけない場合がある →同じ人が2回入ったら 100点 を減らす • 2回入る場合は日時が離れている方が良い →(離れている日数)×1点
を加える • △,×を考慮するべき →△一個につき10000点,×一個につき1000000 点 を減らす 評価式を追加するだけで, 簡単にシフトの決め方を 変えられる!
BOTにして 使ってみる
まとめ • 遺伝的アルゴリズムを使うと,いい感じのシフ トが組める • シフトの組み方の変更が簡単 • BOTにすると非エンジニアも使えて便利