Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

ShibaNyan
September 10, 2018

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

BitValley2018 AfterPartyのLTでお話しました.
当番のシフトを組むのに時間がかかりすぎるという問題を,遺伝的アルゴリズムを使ってLINE BOTに実装することで解決しました.

ShibaNyan

September 10, 2018
Tweet

More Decks by ShibaNyan

Other Decks in Programming

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  10. 遺伝的アルゴリズムの説明
    •  シフト表をランダムに30パターン生成

    •  シフト表の良さを評価

    •  評価が良かったシフト6個残して後は消す

    •  交叉,突然変異させて30個に増やす
    200ループ

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  16. 遺伝的アルゴリズムの説明
    •  シフト表をランダムに30パターン生成

    •  シフト表の良さを評価

    •  評価が良かったシフト6個残して後は消す

    •  交叉,突然変異させて30個に増やす
    200ループ

    View full-size slide

  17. 遺伝的アルゴリズムの説明
    •  シフト表をランダムに30パターン生成

    •  シフト表の良さを評価

    •  評価が良かったシフト6個残して後は消す

    •  交叉,突然変異させて30個に増やす
    200ループ
    大事なのはここ!
    評価する式を立てる

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  21. BOTにして
    使ってみる

    View full-size slide

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

    View full-size slide