最適化一口話

仕事として数理最適化を実践している立場から、その中身や可能性について概説しております。

居酒屋シフトモデル化いろいろ (3. 「対応付け」タイプの適用)

前回は働き方(シフト)のパターンを列挙して、重ね合わせのモデルを解くことで 必要な人数を手当するために各シフトパターンを割り当てるべき人数を次のように明らかにしました。

f:id:optimizationTanabe:20160615162937p:plain

あとは、12人のスタッフ A ~ L にどれを割り振るかで、このモデルは 少し前の記事 で紹介した「対応付け」タイプそのものになります。 この記事で紹介している人に仕事を割り合てるケースと全く同じ構造で、 あるパターンに対して対応付けられる人数を重ね合わせモデルが教えてくれた数(パターン1 には 4人、パターン3 には 2人 ...)に制約すればよいのです。 対応付けられる人数 0 と出たパターン2は省いて描いています。

f:id:optimizationTanabe:20160615163014p:plain

モデルの骨組みができたらあとは個別の制約です。 お客さんからは

  1. A さんは午後の勤務ができない(結局Aさんはパターン1しかできない)
  2. 昼の繁忙期をカバーするシフト(パターン3)には新人(I,J,K,L)を割りあてない
  3. 仕込み時期の朝のシフト(パターン1)は教育のため、新人2人と旧人2人で担当する

といった制約が与えられました。 そもそも 3 番目の制約については、マス目タイプの場合にはどうやって表現してよいのやら見当すら付きにくいのですが、人とシフトの「対応付け」タイプならば大丈夫です(数式での表現が気になる方へ:パターン1と新人達(I,J,K,L)を結んでいる線のうち、正確に 2 本が 1になる(活きる)と制約する)。結果は以下です。

f:id:optimizationTanabe:20160615163043p:plain

どうでしょう、確かに満たす答になっていますね。 ではスケジューリングはすべて「マス目」ではなく 「重ね合わせ」 + 「対応付け」 すると万事大丈夫かというと、さにあらず。 一時は満足してくれていたお客さんが

「12:00 の繁忙期の時間帯に新人が 2人も交じっているのはちょっと。。。」

とか言いだすと、話はあっという間に荒れ模様に。 朝のシフトパターンを新人2人で担当させる、というのはお客さんの要望として与えられたもので、 4 時間勤務であることの帰結としてそうなるんですよ、とまずは落ち着いてお伝えします。 ここでお客さんの要請が矛盾していて困るとか文句など言っていては数理最適化のプロとしての経験を疑われます。 そもそも答を見ないで何個も制約を言って互いに矛盾しない方が珍しいことで、 要請の矛盾に気付くことができるのが数理最適化の意義とも言えるのです。 まあそれはさておき、しばらく黙って考えていたお客さんがこう切り出したのには我々も不意を突かれます。

「そもそも新人についてはまずは 3時間勤務にするのがよいかもしれないと思うんですが。。。」

うう、これって足りない人を補うために 5 時間勤務も追加されるっていうことかな、するとシフトパターンが増えるのでパターン列挙まで戻らねばならないなあ、これならいっそ「マス目」タイプの方が簡単かもしれない。。。などと逡巡しつつ我々の仕事は続きます。

このように数理最適化では、同じ問題に対するモデル化の方法が複数あって、 それぞれの得手不得手が分かれています。 このケースのようにマス目が結果だから「マス目」タイプが最善、とは限りません。 ぱっと見、手に負えないような問題が別の見方をすると、すきっと解けるということはままあって、 これがモデル化という作業の醍醐味の一つです。一方でお客さんにとっては大したことには見えない要請が一つ増えた途端に精緻に組み立てたモデルが形無しになってしまう、ということもままあります。まあ実務は数理最適化モデルのタイプなど気にせず移ろってゆくものですからそれもやむなし。 我々ができる最善は複数のモデル化の方法に通じて対応力を身につけること、 そしてモデル化の限界といった不都合な話を含めてお客さまときちんとコミュニケーションと取ることでしょうか。そのコミュニケーションのツールとして、この数理最適化モデルのタイプ分けと「絵」が使えればよいな、と手前味噌ながら考えております。