機械学習理論研究室
← AI体験の一覧
スーパーのレジは、お客さんをさばける速さのほうが来る速さより速ければ、行列はできないはずです。ところが実際には行列ができます。しかも混んでくると、待ち時間はある日とつぜん跳ね上がります。
買い物を終えてレジへ行くと、前に何人か並んでいます。あと何分待つことになるでしょうか。
このお店には 1時間あたり平均24人 のお客さんが来ます。レジは 1時間あたり平均30人 をさばける速さです。来る人より、さばける人のほうが多いのですから、行列などできないように思えます。まずは見てみてください。
来る人(24人/時)より、さばける人(30人/時)のほうが多いのに、行列はできます。理由はばらつきです。お客さんは時計のように等間隔では来ません。2人続けて来ることもあれば、5分誰も来ないこともあります。会計にかかる時間も同じで、財布を探して手間取る人もいれば、一瞬で終わる人もいます。
誰も来なかった時間はあとから取り返せません。レジが空いて待っていた時間は、そのまま捨てられます。ところが混んだ瞬間の行列は、次の人へ、その次の人へと持ち越されます。この非対称のせいで、平均が足りていても待ち時間はゼロになりません。
お店がどれくらい忙しいかは 混雑率(利用率ともいいます)で表します。ここでは 24 ÷ 30 = 0.8、つまりレジは営業時間の8割ふさがっている、ということです。この数字を上げていくと何が起きるかを、STEP 2 で確かめます。
横軸が混雑率、縦軸が平均待ち時間です。太い線がいまのレジ台数、うすい線がほかの台数です。右端(混雑率1)に近づくほど、線は上へ突き抜けていきます。
| 混雑率 | レジが空いている時間 | 平均待ち時間 | 混雑率0.5のときの何倍か |
|---|
平均待ち時間 ∝ 1 / (1 − 混雑率)
レジ1台の場合、平均待ち時間はこの形の式になります。分母の 1 − 混雑率 が「レジの余っている割合」です。余りが半分(混雑率0.5)から1割(0.9)に減ると、分母は5分の1になり、待ち時間は9倍にふくらみます。さらに 0.9 から 0.95 へ、たった5%詰めるだけで、待ち時間はまた2倍です。
混雑率が高いほど、あと1%詰めたときに増える待ち時間は大きくなります。余裕をなくした行列では、ほんの少し混むだけで待ち時間が一気に伸びます。
行列が長いとき、店長には2つの手があります。レジをもう1台開けるか、店員の作業を速くするか。どちらがどれだけ効くかを比べてみましょう。
レジが2台あるとき、並び方には2通りあります。レジごとに列を作るか、1本の列を作って空いたレジへ順に進む(フォーク並び)かです。同じ2台なのに、待ち時間は同じにはなりません。
待ち時間を短くしたければ、レジを増やして混雑率を下げればよい。しかしレジ1台には人件費がかかり、空いているレジはお金を生みません。逆に混雑率を1.0に近づけると、レジは休みなく働きます。むだはなくなりますが、こんどは行列が伸びる一方になります。閉店時間になっても列が残り、待ちきれないお客さんは買わずに帰ってしまいます。
多すぎる損と、少なすぎる損。どちらに寄せても損をするので、その間のどこかに答えがあります。この構造は、「毎朝いくつ作るか」で扱った新聞売り子モデルとまったく同じです。あちらは「作りすぎて捨てる損」と「足りずに売り逃す損」、こちらは「レジを余らせる損」と「客を待たせる損」。呼び名が違うだけで、非対称な2つの損をつり合わせるという中身は同じです。
ここで使った考え方は待ち行列理論といい、経営システム工学の基本の道具です。スーパーのレジだけでなく、病院の外来、コールセンターの席数、高速道路の車線、サーバーの台数、工場の機械の並べ方まで、「順番を待つ」ものはすべて同じ式で設計されています。混雑率0.9で運用すると決めた瞬間に、待ち時間が何分になるかは計算で分かるのです。
機械学習理論研究室では、こうした「ばらつきのあるデータから、何をどれだけ用意すべきかを決める」問題を扱っています。到着の予測そのものを機械学習で行い、その予測の誤差まで含めて設計する、というのが現在の研究テーマのひとつです。