見出し画像

週末なにしてますか? 競プロで忙しいですか? 弊社で現実のスケジューリング問題を解いてもらっていいですか?

競プロerのみなさん、終末なにしてますか? 忙しいですか? 救ってもらっていいですか?は素晴らしい作品ですよね。アニメの2期をやる可能性はやはりないんでしょうか?

いや、違うんです。競プロerな全国のみなさん自身の今後の可能性について考えてみましょう。

DP, Union-Find, 最小全域木, 線形計画法, 焼きなまし法など……。みなさんが日々磨いているアルゴリズムへの理解と実装能力は、それだけでとても尊いものです。一方で実社会に少し目を向けてみると、最適化問題に関連した課題がある現場は日本中にたくさんあります。

株式会社クロスビットの「らくしふ」では労働人口の低下をはじめとした社会の変化を踏まえ、より最適化なスケジューリング機能を開発して行きたいと考えています。

ご自身の力で、多様な制約を満たし、限られた時間内に「真に最適な解」を求めるアルゴリズムを開発してみませんか?

大げさな物言いではなくそのままの意味で、あなたの出す解はきっとあなたが想像している何倍もリアルな現場を変える力があります。

Imagine all the people using the practical auto-shift scheduler

身近な現実の問題として、飲食店の店長さんをイメージしてみましょう。接客・仕込み・調理・ドリンク・会計など店舗営業の全体を見ながら、営業時間の合間のわずかな時間でノートPCを開き、全スタッフの人員配置を行っていかなければなりません。

作成する際には、働いているスタッフの希望、相性、スキル、各雇用契約ごとに異なる労務上の制約、見込みの売上・客数、ピークの時間帯に必要なスタッフ数など、あらゆる制約を考慮しスタッフ側の希望やお店の事業上の目的を達成するシフトを組み上げる必要があります。

... 制約? ... 目的? そう、あなたの得意な最適化問題です!それも多種多様な変数を伴う複雑な最適化問題です。
人間がこの問題を手で解くにはかなりの時間を要しますし、考慮もれの頻発が日常茶飯事でしょう。もしも良くないシフトの組み方をしてしまうと、スタッフに負担がかかってしまったり、店舗側は営業活動を縮小する必要が出てきてしまいます。シフト自体は単なるデータであっても、そのシフトで実際に人が働き、社会が回っているのです。

この問題を解決するために、人員配置の最適解を導くアルゴリズムが必要です!

スタッフスケジューリング問題自体は、何年も前から論文に掲載されています。自動シフト作成機能の開発を行ったソフトウェアベンダーはあります。でも身近な飲食店、薬局、介護施設で実際に自動スケジューリングシステムが使われているでしょうか?
残念ながらほとんどの事業所で使われていないのが現状です。
この記事の後半でもっと詳しく説明したいと思いますが「らくしふ」では
“実際の現場で使える自動シフトスケジューラー”
を開発し、自動スケジューリングシステムが世の中の多くの現場で当然のように使われる未来をめざしています。

株式会社クロスビットって?「らくしふ」って?

株式会社クロスビットは、2020年にシリーズAでSalesforce等から資金調達を行い、現在業務委託の方を含めて30名弱の組織規模の会社です。

「らくしふ」は2017年後半からサービスを開始し、飲食店、アミューズメント、介護など、さまざまな企業にご利用頂いている「シフト管理・人員配置の最適化サービス」です。「らくしふ」を使っている企業にはみなさんがご存じのお店もたくさんあります。

以前はエクセル / 紙 / 口頭で希望シフトの回収、シフトの作成、労務管理を行っていた多くの現場で「らくしふ」導入が進み、スマホによる希望シフトの提出、最終的な確定版シフトの共有、労務管理などの機能にで業務改善が実現、スタッフにも事業者側にもたくさんのメリットを感じていただけました。

ただし、ここまでの「らくしふ」の機能は我々クロスビットにとっては序盤とも言えます。当初から「らくしふ」は「スケジュール管理ツール・連絡ツール」を目指しておりません。
誰でもかんたんに最適な人員配置を導き出せるプロダクト、いや、最適な人員配置を行うための当然の社会インフラとして存在したいと考えています。

「らくしふ」のアルゴリズム開発者の担当内容

「らくしふ」を導入した企業は、シフトのサイクルの最初から最後までのフローをシステム上で共有・管理することに成功しました。つまりシフト回収から決定稿までのデータは揃っています。
データの基盤が整ってきたので、ここからがあなたの出番です!

さて「あたえられた多種多様な制約条件のもと、目的関数を最小化しなさい」みたいな問題が与えられると想像していましたか?
残念、あなたにも問題設定自体に携わっていただきます。

現場のスケジューリング問題の制約や目的関数についてほんの少しピックアップしてご紹介します。

- スケジューリング対象期間: $${d_1, d_2, ... d_{31}}$$
- スタッフ集合:$${u_1, u_2, ... u_{100}}$$
- ある日のあるシフトの時間パターン:$${p_1, p_2, ... p_{1000}}$$

を対象としたとき、以下の制約や目的関数(各種ペナルティ量の総和)の最小化を行う必要があります。

勤務するスタッフ視点
- 休み希望の日にはシフトを割り当てない

事業者側視点
- ある日 $${d}$$ の時間帯 $${t}$$ における理想人数 $${n}$$ と実際のシフトの差異を最小化したい

労務管理の視点
- 連続勤務日数は最大N日以内まで
- あるスタッフ$${u_i}$$の月次、週次の勤務時間の最大値制約を守る
- あるスタッフ$${u_i}$$の月次、週次の勤務時間の理想勤務時間からの差異を最小化する

また、
- 冒頭でふれたように「らくしふ」の利用者は、限られた営業時間の合間でシフトを組む必要がある。Webページの処理を待つ程度の時間、つまり長くとも数十秒程度の時間内に最良の解を提供したい
- ご利用者からのさまざまなご要望を考えると、目的関数に非線形な計算が含まれる可能性が高い

という点から、Gurobi, CPLEXといった汎用ソルバーではなく、タブーサーチ、焼きなまし法などヒューリスティックな組合せ最適化手法をもとに実装していく必要があるかと考えています。つまり定式化の際の数学的アプローチだけではなく、コンピュータ上でどう実装するかという点が重要です。競技プログラミングの中でも、特にヒューリスティック系コンテストの経験・実力を発揮していただきたいと思います。

これからの「らくしふ」が立ち向かう課題

“実際の現場で使える自動シフトスケジューラー” となりうるためには、アルゴリズム実装部分だけでなく、サービス全体として以下の課題に立ち向かう必要があります。

1. 業種、企業、店舗ごとに異なる要件
例えば介護事業の労働者に関する法律など、業種により必ず守らなければならない制約が存在します。また飲食店のシフトの (勤務開始時刻, 勤務終了) の時間の組のパターンはかなり柔軟で大量の候補解が存在するため、早番/遅番/夜勤... 程度の業種とは違うアプローチが必要でしょう。

さらに同じ会社の中でも、夜間営業を行っている店舗と日中だけの店舗が存在したり、店舗の規模(事業所面積や平均出勤人数)が大きく異なるケースもあります。

また、そもそもの入力データとして、派遣業や訪問介護などは、出勤先や訪問先といった概念が存在します。

2. 目的関数自体の設計の難しさ
現場の方からは具体で貴重なコメントを頂けるものの、そこから定式化された目的関数を考えるのは、かなり試行錯誤が必要です。

良くないパターンとしては、ペナルティとして表現できる各種要望/観点が $${P_1, P_2, ... \; P_{n}}$$ として存在した際に

$$
Minimize. \quad w_{1} P_1 + w_{2}P_2 + ... + w_{n}P_{n}
$$

という目的関数を設定し「あとはお客様の方で重み $${w_1, w_2, ... \; w_{n}}$$ を設定していただければ解を出せます」という手法です。

これは何も問題を解決できません。重み変数に責任を丸投げしています。一体だれがこの重みを調整できるというのでしょうか。これは到底 “実際の現場で使える自動シフトスケジューラー” とはいえません。

分析をする上で一度各要望/観点ごとのペナルティの重みについて考えるべきですが、一般的な利用者が理解しがたい設定を設けず、「らくしふをふつうにつかっていると、ふつうにいいシフトがでてきて、仕事がまわる」状態を目指したいです。

3. 過去データの収集、分析、労働需要予測に基づいた最適化
実はシフト作成者側の理想人数や想定予算も重要です。いくら最適化ソルバー部分が優秀でも、予算設定が誤っていると「やけに人件費が高い、人手がたりなくて忙しすぎる」といった事態が起きてしまいます。

すでにクロスビット開発チーム内では、決定木ベースの機械学習モデルを作成。らくしふ内にある過去の確定シフトデータから、理想人数配置データを自動出力しています。

今後は業種、ロケーション、天候、POS・レセコンなどの「らくしふ」外のシステムとの連動により得られるデータをもとに、売上や細かいポジション・業務ごとの理想人数を予測。この結果を目的関数、つまりスタッフスケジューリングの目的関数として用いるつもりです。

これは「いつかやりたい」願望ではなく、いま、取り組んでいる課題です。だれにとっても無理のない、自動化されたシフト最適配置システムを一緒にめざしましょう。

開発メンバーについて

「らくしふ」の開発チームでは業務委託メンバーを含め約10名ほどがフルリモートで働いています。多くはクラウドシステムやWebアプリケーションのバックエンド・フロントエンドの開発者です。既存の開発メンバーが得意な事はまかせてください。

現在の開発メンバーで暫定的なスケジューリングアルゴリズムを実装済みです。自動で組まれたシフトで勤務されているスタッフさんもいらっしゃいます。

ただ、どうしてもより良いアルゴリズムを考えて実装する力のある開発者の存在が不可欠だと感じました。

現在足りていないピースはあなたです。活きの良い解が出せるコードをお待ちしております。

画像1

求めているスキルセットなど

- 競プロerとしての基礎能力
- Rust または C++ ヒューリスティックアルゴリズムの実装経験
- 良いアルゴリズムを考えるのが好きな方、または考え出すと熱中しちゃう方。
- 数ヶ月〜数年のマラソン(?)に耐えうるコードが書ける方。
- フルタイムでの採用を考えていますが、雇用形態はお気軽にご相談ください

歓迎要件
- Git
- RDBデータベースの設計
- Webアプリケーション開発に関する知識
- 2020年初頭から全員フルリモート環境で働いているため、Slack, GitHub等でのテキストコミュニケーションや、Huddle, Google Meetでの音声・ビデオコミュニケーションを通した開発に慣れている方

株式会社クロスビットでは、ここまで読んでくれたあなたからのご連絡をお待ちしております。

ぜひ一緒によいシステムを作りましょう。

AtCoder Jobs

Herp

または採用担当のTwitterまでDMを送っていただいてもかまいません
Twitter

この記事が気に入ったらサポートをしてみませんか?