Slide 1

Slide 1 text

遺伝的アルゴリズムで シフト組みを自動化した話 BitValley 2018 AfterParty LT

Slide 2

Slide 2 text

自己紹介 •  シバニャン •  京都大学工学部4回生 •  Twitter: @_6v_ •  CAMPHOR-

Slide 3

Slide 3 text

当番のシフト •  30コマ,約30人のシフト組み •  1コマに1人割り当てる

Slide 4

Slide 4 text

シフト決定の流れ 調整サービス シフト組み シフト発表 •  調整サービスを利用してシフトを提出してもらう •  手動でシフト組み •  グループLINEで完成したシフトを発表

Slide 5

Slide 5 text

シフト組みの難しさ •  30コマ,約30人のシフト組み •  30^30 通り(≒2×10^44)

Slide 6

Slide 6 text

シフト組みの難しさ •  30コマ,約30人のシフト組み •  30^30 通り(≒2×10^44) 2時間かかる・・・ 自動化したい・・・

Slide 7

Slide 7 text

シフト組みの課題 •  同じ人が2回入らないといけない場合がある •  2回入る場合は日時が離れている方が良い •  △,×を考慮するべき など・・・

Slide 8

Slide 8 text

シフト組みの課題 •  同じ人が2回入らないといけない場合がある •  2回入る場合は日時が離れている方が良い •  △を考慮するべき など・・・

Slide 9

Slide 9 text

遺伝的アルゴリズムでやる シフトを遺伝子に見立てて,生物が交叉,突然 変異,自然淘汰によって進化するようにシフトを 改良していく [(枠1),(枠2),(枠3),…,(枠30)] 例) [(Gさん),(Eさん),(Nさん),…,(Eさん)] [(Aさん),(Lさん),(Gさん),…,(Oさん)]

Slide 10

Slide 10 text

遺伝的アルゴリズムの説明 •  シフト表をランダムに30パターン生成 ↓ •  シフト表の良さを評価 ↓ •  評価が良かったシフト6個残して後は消す ↓ •  交叉,突然変異させて30個に増やす 200ループ

Slide 11

Slide 11 text

遺伝的アルゴリズムの説明 •  シフト表をランダムに30パターン生成 200ループ [(Gさん),(Eさん),(Nさん),…,(Eさん)] [(Aさん),(Lさん),(Gさん),…,(Oさん)] … (30パターン) [(Rさん),(Aさん),(Nさん),…,(Dさん)]

Slide 12

Slide 12 text

遺伝的アルゴリズムの説明 •  シフト表をランダムに30パターン生成 •  シフト表の良さを評価 200ループ [(Gさん),(Eさん),(Nさん),…,(Eさん)] : 300点 [(Aさん),(Lさん),(Gさん),…,(Oさん)] : 100点 … (30パターン) [(Rさん),(Aさん),(Nさん),…,(Dさん)] : 50点

Slide 13

Slide 13 text

遺伝的アルゴリズムの説明 •  シフト表をランダムに30パターン生成 •  シフト表の良さを評価 •  評価が良かったシフト6個残して後は消す 200ループ [(Gさん),(Eさん),(Nさん),…,(Eさん)] : 300点 [(Aさん),(Lさん),(Gさん),…,(Oさん)] : 100点 … (6パターン)

Slide 14

Slide 14 text

遺伝的アルゴリズムの説明 •  シフト表をランダムに30パターン生成 •  シフト表の良さを評価 •  評価が良かったシフト6個残して後は消す •  交叉,突然変異させて30個に増やす 200ループ [(Gさん),(Eさん),(Nさん),…,(Eさん)] [(Aさん),(Lさん),(Gさん),…,(Oさん)] [(Aさん),(Eさん),(Nさん),…,(Oさん)] … (30パターン)

Slide 15

Slide 15 text

遺伝的アルゴリズムの説明 •  シフト表をランダムに30パターン生成 •  シフト表の良さを評価 •  評価が良かったシフト6個残して後は消す •  交叉,突然変異させて30個に増やす 200ループ [(Gさん),(Eさん),(Nさん),…,(Eさん)] [(Aさん),(Lさん),(Gさん),…,(Oさん)] [(Aさん),(Eさん),(Nさん),…,(Oさん)] [(Gさん),(Eさん),(Nさん),…,(Tさん)] … (30パターン)

Slide 16

Slide 16 text

遺伝的アルゴリズムの説明 •  シフト表をランダムに30パターン生成 ↓ •  シフト表の良さを評価 ↓ •  評価が良かったシフト6個残して後は消す ↓ •  交叉,突然変異させて30個に増やす 200ループ

Slide 17

Slide 17 text

遺伝的アルゴリズムの説明 •  シフト表をランダムに30パターン生成 ↓ •  シフト表の良さを評価 ↓ •  評価が良かったシフト6個残して後は消す ↓ •  交叉,突然変異させて30個に増やす 200ループ 大事なのはここ! 評価する式を立てる

Slide 18

Slide 18 text

シフト組みの課題 より •  同じ人が2回入らないといけない場合がある •  2回入る場合は日時が離れている方が良い •  △,×を考慮するべき

Slide 19

Slide 19 text

シフト組みの課題 より •  同じ人が2回入らないといけない場合がある →同じ人が2回入ったら 100点 を減らす •  2回入る場合は日時が離れている方が良い →(離れている日数)×1点 を加える •  △,×を考慮するべき →△一個につき10000点,×一個につき1000000 点 を減らす

Slide 20

Slide 20 text

シフト組みの課題 より •  同じ人が2回入らないといけない場合がある →同じ人が2回入ったら 100点 を減らす •  2回入る場合は日時が離れている方が良い →(離れている日数)×1点 を加える •  △,×を考慮するべき →△一個につき10000点,×一個につき1000000 点 を減らす 評価式を追加するだけで, 簡単にシフトの決め方を 変えられる!

Slide 21

Slide 21 text

BOTにして 使ってみる

Slide 22

Slide 22 text

まとめ •  遺伝的アルゴリズムを使うと,いい感じのシフ トが組める •  シフトの組み方の変更が簡単 •  BOTにすると非エンジニアも使えて便利