公開

待ち行列のシミュレーションとは?レジ待ちと渋滞で学ぶモデル化

文:野澤 嘉孝 (ソフトウェアエンジニア/プログラミングスクール Sandbox 代表)

待ち行列のシミュレーションとは?レジ待ちと渋滞で学ぶモデル化

この記事の概要

レジを急いでいるのに、なぜ行列は短くならないのでしょう? 信号待ちの車にも、同じ考え方を使えるのでしょうか? モデル化は、調べる目的に合わせて現実を単純化して表すこと。シミュレーションは、そのモデルを使って試すことです。 文化祭のワッフル屋を例に見ていきましょう。

レジを急いでいるのに、なぜ行列は短くならないのでしょう? 信号待ちの車にも、同じ考え方を使えるのでしょうか?

モデル化は、調べる目的に合わせて現実を単純化して表すこと。シミュレーションは、そのモデルを使って試すことです。

文化祭のワッフル屋を例に見ていきましょう。

先に結論:列の残りは「入る数」と「出る数」で変わる

  • 次の残り=前の残り+到着−実際に対応した人数。 対応できる上限と、実際に対応する人数は別。
  • 平均が同じでも、来るタイミングで列は変わる。 空いていた時間の対応能力は、後から使えない。
  • レジ待ちも信号待ちも、残りの数を更新して調べられる。 ただし、現実の細部まで同じ仕組みとは限らない。
  • 人数と待ち時間は別。 「10人残った」だけで「10分待つ」とは分からない。

今回は、到着と対応を1分単位にまとめた簡単なモデルを使います。得られるのは、決めた条件の下での答えです。

速く焼いているのに、列が縮まらない

文化祭2日目の昼。ユウキのクラスのワッフル屋には、廊下の角を曲がるほどの行列ができました。

ハルカ「ねえ、後ろの人、帰っちゃってない?」
ユウキ「さっきより速く焼いているのに……」
Sandy「頑張ってるかどうかと、列が減るかは別や。来る人数と、対応できる人数を見よか」

現実には、注文内容、焼き加減、支払い方法、団体客など、多くの要素があります。全部を詳しく再現しようとすると、調べたい仕組みが見えにくくなることもあります。

今回は「各分の終わりに何人残るか」を調べるため、到着人数・処理能力・前の残りに注目します。

何を残し、何を省くかは調べる目的によって変わる。

「天気はいつでも不要」と決めたわけではありません。雨で来客が変わるなら、予測の目的に応じて天気も考慮します。何を省けるかは、目的によって変わるのです。

モデルとシミュレーションはどう違う?

用語

意味

ワッフル屋の例

モデル化

必要な要素と関係を選び、単純化して表すこと

来客と処理の流れに絞る

モデル

単純化してできた表現

待ち人数を更新する式

数理モデル

数学的な関係で表したモデル

残りを足し引きする式

シミュレーション

モデルを使って行う模擬実験

到着や処理の条件を変えて10分間計算する

モデルは調べるための仕組み、シミュレーションはそれを使って試すこと、と考えると整理できます。未来だけでなく、現在や過去の現象を再現して調べる場合もあります。

モデルの分類は、一つの順番に並べるのではなく、異なる軸から見ます。

数理モデルであり、動的かつ確率モデルである場合もある。

表現に注目すれば、実物の模型のような物理モデル、図や式で表す論理モデルという分け方があります。時間的変化を扱わない静的モデルと、時間に沿った変化を扱う動的モデルという分類もあります。

偶然性を含まないのが確定モデル、確率的な要素を含むのが確率モデルです。乱数は、確率モデルをコンピュータで試す際に使える手段の一つ。乱数の命令が書かれていないだけで、確率モデルではないと決めることはできません。

今回の人数を更新する式は数理モデルで、時間ごとの変化を追うので動的です。到着を毎分3人に固定すれば確定モデル、乱数でばらつかせれば確率モデルとして扱えます。

待ち人数を更新する式と、計算のルール

待ち行列(キュー)は、サービスを待つ人や物の並びです。レジの客だけでなく、処理を待つコンピュータの仕事も対象になります。

ここからは簡単な離散時間モデルを使います。開始時の残りは0人。各分の初めにその分の客がまとめて到着し、その分の間に対応を完了すると決めます。客は途中で帰らず、対応途中の客を次の分へ持ち越さない設定です。

まず、実際の人数で考えます。前に1人残っていて、新しく3人来たなら、合計4人。最大2人対応できるなら、2人対応して2人残るという順番です。

この順番を式にします。前の残りをQ人、到着をA人、1分に対応できる上限をC人とすると、

  1. その分に対応する対象は Q+A人。
  2. 実際に処理する人数は min(Q+A, C)。
  3. 次の残りは Q+A−実際に処理する人数=max(0, Q+A−C)。

Q・A・Cは、いずれも0以上の整数として扱います。

minは小さい方、maxは大きい方を選ぶ意味です。

実際に処理する人数は、そこにいる人数を超えない。

1人しかいなければ、能力が2人分あっても実際に処理するのは1人。能力をそのまま引いて「残り−1人」にしないようにします。

分

前の残り

到着

処理能力

実際に処理

分末の残り

1

0

3

2

2

1

2

1

3

2

2

2

3

2

3

2

2

3

毎分3人到着・2人処理なら、毎分1人ずつ増え、10分後は10人です。毎分の到着を先にまとめる今回のモデルと、実際の時刻ごとに客が来るモデルでは、途中の待ち方は違います。

また、これは人数の式です。誰が何分待つかを正確に調べるには、到着時刻、対応の開始時刻、順番、対応時間なども記録します。「10人残る」と「10分待つ」は同じ意味ではありません。

平均が同じでも、列ができるのはなぜ?

一定の到着・一定の処理能力で計算するなら、差を見ると変化が分かります。

  • 到着が能力より多い:残りが増える。
  • 到着と能力が同じ:すでにある残りは減らない。
  • 到着が能力より少ない:残りがあれば減り、0より小さくはならない。

ただし、現実の到着にはばらつきがあります。平均だけから「絶対に待たない」とは判断できません。

例えば4分間に合計8人が来て、毎分最大2人対応できるとします。毎分2人の場合と、0人・0人・4人・4人の場合を比べましょう。

空いていた時間の処理能力は、後の混雑時に持ち越せない。

分末の残りを並べると、違いが見えます。

到着の仕方

1分目

2分目

3分目

4分目

毎分2人来る場合の残り

0

0

0

0

0・0・4・4人と来る場合の残り

0

0

2

4

どちらも到着は合計8人ですが、後者では最初の2分の能力が使われません。空いていた時間の処理能力を、混んだ後半へ貯金できないため、4人が残ります。

ユウキ「合計8人で、合計8人分の能力があるのに!」
Sandy「空いてた時間のレジを、あとから使うことはできへんねん」

この例は、平均が同じでも行列ができることを示しています。「ばらつきがあれば、どんなモデルでも毎分ずっと増える」という意味ではありません。到着と処理の分布、順序、相関や初期状態も影響します。

確率モデルを使うときは、1回だけで判断せず、同じ条件で複数回試して、平均・ばらつき・混雑の大きさを調べます。「各試行の最大待ち人数」と「その最大値を平均した値」も別です。試行中に観測した最大は、将来起こり得る絶対的な上限ではありません。

列を短くするには、どこを変える?

今回の式では、到着をならすことと、処理能力を増やすことが主な対策になります。

例えば、初めに3人残っていて、毎分3人来るところを毎分4人処理できれば、分末の残りは2人→1人→0人。能力を毎分3人まで増やすだけなら、残り3人は減りません。

ただし、レジだけ増やしても、ワッフルを焼く工程が追いつかなければ、全体の提供数は増やせません。このように全体の流れを制限する工程を、ボトルネックといいます。今回は何を「処理完了」とするのかを決めたうえで、そこを改善します。

番号札を配って自由に待てるようにすれば、廊下の物理的な列は短くできます。しかし、札を配るだけで作れるワッフルが増えるわけではありません。指定時刻を分けて呼ぶなど、到着を分散する仕組みと組み合わせて考えます。

途中で帰る客も調べたいなら、モデルに離脱人数を加えます。現実の改善策が2種類しかない、という話ではありません。

信号待ちの台数から、渋滞の長さを考える

次は、信号手前の1車線に注目します。最初の残りは0台、途中の合流・離脱はなく、毎分20台到着し、毎分15台まで通せるモデルです。

ここでも「次の残り=前の残り+到着−実際の通過台数」。毎分5台ずつ増えるので、10分後は50台残ります。

1台7mを割り当てるモデルでは、50台の列は約350m。

車長5m・車間2mを合わせて1台あたり7mを割り当てれば、列の長さは50×7=約350mと見積もれます。これは近似です。50台の先頭車の前端から最後尾車の後端までを測り、車間を49個と数えるなら、50×5+49×2=348mです。

実際には車種や車間が異なり、複数車線もあります。信号の赤・青を詳しく扱うなら、時間ごとに通過能力を変えます。「青信号で15台」と「1分あたり15台」を混ぜず、時間の単位をそろえましょう。

高速道路のサグ部で速度低下と後続のブレーキが連鎖する自然渋滞もあります。ただし、その波の伝わり方まで、今回の台数の足し引きだけで再現できるわけではありません。

試作問題とのつながりと、モデルの限界

大学入試センターの試作問題『情報Ⅰ』第2問Bでは、文化祭のクレープ販売を題材に、乱数で到着間隔を作り、待ち状況を調べています。来客10・20・30・40人の条件ごとに100回試行し、最大待ち人数の分布を読む内容もあります。

そこでは対応中の客を待ち人数に含めないなど、問題独自の定義が示されています。今回の分単位モデルの数値をそのまま当てはめず、何を待ち人数と数えるか、どんな順序で動かすかを読み取りましょう。試作問題は、本試験そのものではありません。

シミュレーションの結果は、置いた仮定の下での答えです。現実の記録と比較し、ずれた理由を調べて改善します。

モデルの結果を現実と比較し、仮定やデータを見直す。

Sandy「削った要素が、ほんまは大事やったかもしれへん。数字が出たら、次は現実と比べよな」

オリジナル例題:分末の残りを追おう

本記事のオリジナル学習例です。実際の共通テスト問題ではありません。

初めの残りは2人。各分の初めに1人・5人・0人・2人が順に到着し、各分に最大3人を処理します。途中離脱はありません。各分末の残りと、分末だけで見た最大人数はいくつでしょう?

解答:残りは0人・2人・0人・0人、分末の最大は2人です。

各分で同じ式を使います。

分

前の残り

到着

実際に処理

分末の残り

1

2

1

3

0

2

0

5

3

2

3

2

0

2

0

4

0

2

2

0

3分目は能力が3人分あっても、いるのは2人なので、処理も2人です。分末の残り0・2・0・0の最大は2人になります。

ただし、2分目の到着直後には5人います。「分末の最大」と「すべての時点の最大」を分けて数える必要があります。

覚えたい4つのポイント

  • モデル化は、目的に合わせて要素や関係を選んで表すこと。
  • 待ち人数は前の残り・到着・実際の処理数から更新し、処理能力との違いを確認する。
  • 平均が同じでも、ばらつきや到着の順序によって待ちが生じる。
  • 試行結果は現実と比較し、仮定とデータを見直す。

関連テーマは情報Ⅰサバイバルの記事一覧から学べます。モデルをプログラムにして試してみたい方は、プログラミングスクールSandboxもご覧ください。

参考資料

あわせて読みたい記事

Sandboxのサポート内容 Sandboxの情報Ⅰ学習サポートを見る →
共通テスト情報Ⅰのまとめ 共通テスト「情報Ⅰ」対策シリーズの一覧を見る →
野澤 嘉孝

この記事を書いた人

野澤 嘉孝

ソフトウェアエンジニア/プログラミングスクール Sandbox 代表

ソフトウェアエンジニア。同志社大学理工学部を経て、京都大学大学院で核融合発電の基礎研究(プラズマ物理)に従事。高校生向け数学塾の講師、大学での物理実験の授業を通じて延べ500名以上の学生をサポート。現在は業界特化型SaaSの開発に携わりながら、小中高生向けプログラミングスクール Sandbox を運営。

プロフィールと執筆記事の一覧 →

「情報Ⅰ、うちの子はどう対策すればいい?」

情報Ⅰ対策について無料で相談する

志望校の配点を一緒に確認したい方は → 無料の学習相談へ

入会金無料・いつでも退会OK・退会後もいつでも再入会できます