シフトスケジューリング
昔、学生さんがやったU社のシフトスケジューリングの最適化をscmoptに入れてみた。
バグだらけで苦労したが、なんとかExcel を入れると、画面を出すところまでできた。あとは、データベース(Webアプリ;Django+MOngoDBとか)から入れて、Dashなどで可視化するだけだ。
最適化の部分はGurobiかSCOPで切り替えできる。性能は同等だが、時間制限付きで大規模問題例(U社では80名ほどのスタッフがいる)を解くには、SCOPの方が安全だろう。
上の図は日べつのスタッフの作業一覧をガントチャートにしたものだ。モデルの新しい点は、休憩をルールにしたがって、最適な箇所に入れる部分だ。
何時間働いたら、何分の休憩を入れる必要があるというのは、現場ごとに色々なルールがあるが、これを効率的な定式化に押し込んだ部分が私のアイディアだ。
制約は時間帯ごとの作業別の必要人数下限を(なるべく)上回るスケジュールを作成することであるが、学生さんが作ったデタラメなデータでもなるべく遵守するようなスケジュールを求めることができる。
SCOPの特徴として制約逸脱のペナルティの合計を最小化することがあげられる。30日分くらいのスケジュールが最大10分程度で安定して近似最適化できる。シフトの最適化は数億のソフトさえある市場で、某テーマパークでは入れるたびに失敗していると聞いている。誰か、これを元にアプリでも作成してくれると嬉しい。
スタッフと管理者の間のやり取りや、UIの設計は、以前SPRINTをやってほぼできている。
某R社(一緒にSPRINTをした方の共同研究先)がこれをパクって、アプリを作って成功したらしいが、最適化は「さ」の字も入っていない。そのため、ほぼ無料で配布しているが、本当に重要な部分はUIではなく、最適化で、特に大規模な現場で重要になる。
この記事が気に入ったらサポートをしてみませんか?