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
1.8k
遺伝的アルゴリズムでシフト組みを自動化した話
BitValley2018 AfterPartyのLTでお話しました.
当番のシフトを組むのに時間がかかりすぎるという問題を,遺伝的アルゴリズムを使ってLINE BOTに実装することで解決しました.
ShibaNyan
September 10, 2018
Tweet
Share
More Decks by ShibaNyan
See All by ShibaNyan
証明写真を30円で作る
shiba6v
0
860
IPythonマジックコマンドを作る
shiba6v
1
1.5k
畳み込みニューラルネットワーク(CNN)の判断根拠の可視化手法 (20分トーク用)
shiba6v
1
990
Other Decks in Programming
See All in Programming
いまあるチームにフィットさせる Serverless そして Platform Engineeringへの挑戦 / Serverless Fits the Team You Have and Platform Engineering
seike460
PRO
2
1.2k
型付きで行うVSCode拡張機能開発 / VSCode Meetup #31
mazrean
0
220
Applied NLP in the Age of Generative AI
inesmontani
PRO
3
1.1k
XP2024 っていう国際会議に行ってきたよの記 / XP2024 Conference Report
bonotake
4
150
上手に付き合うコンポーネントテスト
quramy
3
1.2k
Frontend Magic mit CSS Houdini
joergneumann
0
420
Cloud Adoption Frameworkにみる組織とクラウド導入戦略(縮小版)
tomokusaba
1
160
Micro Frontends for Java Microservices - dev2next 2024
mraible
PRO
0
190
◯◯エンジニアになった理由
gessy0129
PRO
0
590
Infrastructure as Code でセキュリティを楽にしよう!
konokenj
5
1.4k
dbt-ga4パッケージを実業務に導入してみた話
t_tokumaru_feedcorp
0
110
グローバルなソフトウェアテスト組織における課題と戦略 / Challenges and Strategies in a Global Software Testing Organization #mf_techday
imtnd
0
230
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
114
6.9k
GraphQLとの向き合い方2022年版
quramy
43
13k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
45
4.9k
The Invisible Customer
myddelton
119
13k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2k
Gamification - CAS2011
davidbonilla
80
5k
Infographics Made Easy
chrislema
239
18k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
228
52k
Building a Modern Day E-commerce SEO Strategy
aleyda
37
6.8k
Into the Great Unknown - MozCon
thekraken
30
1.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
105
48k
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にすると非エンジニアも使えて便利